2011-04-27 91 views
17

我目前訪問一系列視圖和物化視圖。具體化由第三方維護,第三方几乎沒有提供關於實現的頻率和成功的信息。最近,物化視圖未能刷新,並且我發送了許多包含不正確/延遲數據的報告。物化視圖 - 識別上次刷新

目前我正在查詢每一個物化我打算用於確定什麼時候最新的更新發生在事務性系統內,如果它沒有被刷新那麼其餘的代碼不會執行,但是這大量的浪費的努力並且有時會導致錯誤的假設(物化視圖可能已被刷新,但沒有進行額外的事務 - 因此其餘的代碼不會執行),我寧願使用其他方法。

有沒有一種方法來識別是否使用Oracle系統表來刷新物化視圖?如果沒有,有沒有人有任何想法,我會如何做到這一點,而無需聯繫第三方?

+0

具體是什麼的Oracle版本? – 2011-04-27 03:13:58

+0

dba_mviews ... bt是否確定您有權訪問sys表.. – 2011-04-27 03:15:32

+0

@ doc_180我以爲我可以訪問它們,但我無法訪問您建議的那個。我可以訪問all_tables和all_views。正如你可能已經猜到的那樣,我對oracle沒有太多的經驗。 – Scott 2011-04-27 03:24:17

回答

32

它看起來像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_MVIEWSALL_MVIEWS。這將允許您訪問關於何時刷新每個物化視圖的信息,而不僅僅是您有權訪問的物化視圖的子集。當然,在這種情況下,這可能不是特別重要的區別。

5

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

我想知道是否日期更長。感謝您的額外答覆。 – hot2use 2016-06-01 09:13:44

0

我個人使用的all_snapshots,而這些信息是互補的DBA_MVIEWS的信息或ALL_MVIEWS

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