如何知道MATERIALIZED VIEW更新是否正在运行?

时间:2009-09-25 07:12:38

标签: sql oracle

我正在谈论甲骨文。我有一些物化视图,它们会不时更新(它是通过计划任务完成的)。很容易知道上次刷新日期 - 只需查询USER_MVIEW_REFRESH_TIMES即可。 有没有办法知道当前是否有一些观点正在更新?

3 个答案:

答案 0 :(得分:5)

你可以尝试:

SELECT CURRMVOWNER, CURRMVNAME FROM V$MVREFRESH

立即刷新视图列表。

答案 1 :(得分:4)

您可以通过查看进程是否已获取锁定来间接查看是否正在刷新实例化视图:只有在刷新时才应修改实例化视图(除了用于双向复制的FOR UPDATE实体化视图)。

此查询应仅在刷新实例化视图时返回行:

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

答案 2 :(得分:4)

定义为按照计划刷新的物化视图,其中“...... START WITH ... NEXT ...”作为其DDL的一部分,将在DBMS_JOB控制下执行。如果正在刷新这些MV,您将在USER_JOBS(或DBA_JOBS)视图中看到相应作业和/或DBA_JOBS_RUNNING中的行的THIS_DATE和THIS_SEC值。

如果您已根据需要定义了MV并且正在外部启动刷新,那么Vincent的答案是确定状态的一种方法。