2009-09-25 6 views
5

Je parle d'oracle. J'ai quelques vues matérialisées, et elles sont mises à jour de temps en temps (c'est fait avec une tâche programmée). Il est facile de connaître la dernière date d'actualisation - il suffit d'interroger USER_MVIEW_REFRESH_TIMES. Et est-il possible de savoir si certaines vues sont mises à jour dans le moment actuel?Comment savoir si la mise à jour de MATERIALIZED VIEW est en cours?

Répondre

4

Vous pouvez voir indirectement si une vue matérialisée est rafraîchie en vérifiant si un processus a acquis des verrous: une vue matérialisée ne doit être modifiée que lorsqu'elle est actualisée (sauf les vues matérialisées FOR UPDATE utilisées pour la réplication bidirectionnelle).

Cette requête doit renvoyer les lignes que lorsque votre vue matérialisée est rafraîchie:

SELECT sid 
    FROM v$lock 
WHERE type = 'TX' 
    AND id1 = (SELECT object_id 
       FROM all_objects 
       WHERE owner = :owner 
       AND object_name = :object_name) 
4

vues matérialisées qui sont définies à rafraîchir sur un calendrier avec » ... COMMENCER ... SUITE ... "dans le cadre de leur DDL s'exécuteront sous le contrôle DBMS_JOB. Si l'actualisation de ces MV est en cours, vous verrez des valeurs pour THIS_DATE et THIS_SEC dans la vue USER_JOBS (ou DBA_JOBS) pour le travail correspondant et/ou une ligne dans DBA_JOBS_RUNNING.

Si vous avez défini le MV à actualiser à la demande et que vous lancez l'actualisation à l'extérieur, la réponse de Vincent est une façon de déterminer l'état.

+0

Merci pour la réponse. Mais les vues sont mises à jour avec une tâche Java externe. –

5

Vous pouvez essayer:

SELECT CURRMVOWNER, CURRMVNAME FROM V$MVREFRESH

pour obtenir la liste des points de vue rafraîchissants en ce moment.

Questions connexes