Oracle

物化視圖變為無效,USER_MVIEWS.COMPILE_STATE 變為“NEEDS_COMPILE”

  • January 10, 2018

我有一個從 Oracle(11.2.0.4) 物化視圖獲取數據的應用程序,當關聯表上發生任何 DML 操作或關聯對象無效時,物化視圖的預期行為將變為無效。

我的物化視圖選項如下所列,並確認關聯對象始終有效。

CREATE materialized VIEW mv_emp_test1 
NOLOGGING COMPRESS build IMMEDIATE 
REFRESH FORCE 
START WITH (SYSDATE) NEXT (SYSDATE+5/1024)
as
......

物化視圖在每 5 分鐘刷新一次時進入 INVALID 狀態,如果應用以下任何方法,則變為有效:

alter materialized view mv_emp_test1 recompile;
or
exec dbms_mview.refresh('mv_emp_test1');

此外,檢查了相關文件和錯誤,metalink 中的 Doc ID 264036.1 包含了確切的場景,但沒有找到適當的解決方法,以便每 5 分鐘自動刷新一次。

這是預期的行為。

如果基表中的數據發生更改並且視圖不再是最新的,則其狀態不再有效。如果您重新編譯或刷新,它將成為最新的並再次有效。因此,您不必擔心視圖的無效狀態。

這個問題已經在 stackoverfow.com 上提出並由Andrew Brennan回答:

請參閱 MOS 文件 ID 264036.1:

> > 自動維護與 MV 相關的依賴關係,以確保正確操作。創建 MV 時,物化視圖依賴於其定義中引用的主表。任何 DML 操作,例如對實體化視圖中的任何依賴項的 INSERT、DELETE、UPDATE 或 DDL 操作都將導致它變得無效。 > > >

物化視圖背後的整個想法是使數據在視圖中“可用”,而不必從基礎表中檢索數據,例如從遠端位置檢索數據。如果修改了數據或表定義,則 MV 變為無效。

物化視圖

(在早期版本中稱為快照)

物化視圖的定義可以在原始文件中找到:

同步複製

如果要檢索最新數據,則可能要考慮使用普通視圖或同步複製。

進一步閱讀:

引用自:https://dba.stackexchange.com/questions/194969