物化视图 - 识别最后一次刷新

Posted

技术标签:

【中文标题】物化视图 - 识别最后一次刷新【英文标题】:Materialized Views - Identifying the last refresh 【发布时间】:2011-08-13 12:32:47 【问题描述】:

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

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

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

【问题讨论】:

具体是什么版本的Oracle? dba_mviews...bt 你确定你可以访问 sys 表吗.. @doc_180 我以为我可以访问它们,但我无法访问您建议的那个。我可以访问 all_tables 和 all_views。正如您可能已经猜到的那样,我没有太多的 oracle 经验。 @OMG Ponies 我相信我们有 9 个。 检查 all_mviews 选项。如果您看不到您感兴趣的 mv.. 您没有权限。 【参考方案1】:

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

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

【讨论】:

【参考方案2】:

不幸的是,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';

【讨论】:

我想知道日期是否更长。感谢您的补充回答。【参考方案3】:

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

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

【讨论】:

我们在哪里可以获得MV创作日期?

以上是关于物化视图 - 识别最后一次刷新的主要内容,如果未能解决你的问题,请参考以下文章

如何做到物化视图的自动刷新

Redshift 物化视图不刷新或删除

Oracle-视图

您可以刷新触发器内的物化视图吗?甲骨文 11g

oracle物化视图不会自动更新是怎么回事

如何获得oracle物化视图 定时刷新时 刷新所用的时间 或者是监控 物化视图在jobs中建立的job任务的执行时间