物化视图 - 识别上次刷新

时间:2011-04-27 03:05:25

标签: oracle materialized-views

我目前访问了一系列视图和物化视图。具体化由第三方维护,第三方提供关于实现的频率和成功的信息很少。最近,物化视图无法刷新,我发送了大量报告,其中包含不正确/延迟的数据。

目前我正在查询我打算用什么来确定何时在事务系统中发生最新更新,如果它还没有刷新,那么其余的代码就不会执行,但是这会浪费很多精力和有时可能导致错误的假设(物化视图可能已刷新,但没有进行额外的事务 - 因此代码的其余部分不会执行),我更喜欢另一种方法。

有没有办法确定是否使用Oracle系统表刷新了物化视图?如果没有,有没有人有任何想法,我怎么会这样做,而不必联系第三方?

3 个答案:

答案 0 :(得分:37)

看起来doc_180已经在评论中回答了这个问题,我不确定为什么它没有被添加为答案

SELECT owner, mview_name, last_refresh_date
  FROM all_mviews
 WHERE owner = <<user that owns the materialized view>>
   AND mview_name = <<name of the materialized view>>

如果您有权访问DBA表,则可以将DBA_MVIEWS替换为ALL_MVIEWS。这样您就可以访问有关何时刷新每个物化视图的信息,而不仅仅是您有权访问的物化视图的子集。当然,在这种情况下,这可能不是一个特别重要的区别。

答案 1 :(得分:6)

不幸的是,oracles默认日期格式为YYYY-MM-DD。如果你需要时间 只是使用这样的东西:

SELECT owner, mview_name, to_char(LAST_REFRESH_DATE, 'yyyy-mm-dd hh24:mi:ss') last_refresh_date
FROM all_mviews
WHERE owner = 'FOO'
AND mview_name = 'MV_BAR';

答案 2 :(得分:0)

我个人使用all_snapshots,这些信息是对DBA_MVIEWS或ALL_MVIEWS的信息的补充

select owner, name, last_refresh, error, status, refresh_mode  
from  all_snapshots 
where owner = 'owner';