27

我目前访问一系列视图和物化视图。物化由第三方维护,该第三方几乎没有提供关于物化频率和成功的信息。最近物化视图未能刷新,我发送了许多报告,其中包含不正确/延迟的数据。

目前我正在查询我打算用来确定事务系统中最新更新何时发生的每个物化,如果尚未刷新,则其余代码不会执行,但这会浪费大量精力,有时会导致对于不正确的假设(物化视图可能已刷新,但没有进行其他事务 - 因此代码的其余部分不会执行),我更喜欢另一种方法。

有没有办法确定物化视图是否已使用 Oracle 系统表刷新?如果没有,有没有人知道我如何在不联系第三方的情况下做到这一点?

4

3 回答 3

53

看起来 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. 这将允许您访问有关何时刷新每个物化视图的信息,而不仅仅是您有权访问的物化视图的子集。当然,在这种情况下,这可能不是特别重要的区别。

于 2011-04-27T09:53:01.147 回答
7

不幸的是,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';
于 2014-05-30T11:29:33.930 回答
2

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

select owner, name, last_refresh, error, status, refresh_mode  
from  all_snapshots 
where owner = 'owner';
于 2016-05-13T10:11:28.030 回答