Oracle
物化視圖變為無效,USER_MVIEWS.COMPILE_STATE 變為“NEEDS_COMPILE”
我有一個從 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 變為無效。
物化視圖
(在早期版本中稱為快照)
物化視圖的定義可以在原始文件中找到:
同步複製
如果要檢索最新數據,則可能要考慮使用普通視圖或同步複製。
進一步閱讀: