物化视图变为无效,并且 USER_MVIEWS.COMPILE_STATE 变为“NEEDS_COMPILE”

Sur*_*tam 1 oracle oracle-11g-r2 materialized-view

我有一个从 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
......
Run Code Online (Sandbox Code Playgroud)

当物化视图每 5 分钟刷新一次时,它会进入 INVALID 状态,并且如果应用以下任何方法,则变为有效状态:

alter materialized view mv_emp_test1 recompile;
or
exec dbms_mview.refresh('mv_emp_test1');
Run Code Online (Sandbox Code Playgroud)

另外,检查了相关文档和错误,metalink中的Doc ID 264036.1已经包含了确切的场景,但没有找到适当的解决方法,以便每5分钟自动刷新一次。

mir*_*173 5

这是预期的行为。

如果基表中的数据发生更改并且视图不再是最新的,则其状态不再有效。如果您重新编译或刷新,它将变为最新并且再次有效。因此您不必担心视图的无效状态。

这个问题已经在 stackoverfow.com 上提出并由Andrew Brennan回答:

请参阅 MOS 文档 ID 264036.1:

自动维护与 MV 相关的依赖关系,以确保正确运行。创建 MV 时,物化视图取决于其定义中引用的主表。任何 DML 操作,例如对物化视图中任何依赖项的 INSERT、DELETE、UPDATE 或 DDL 操作,都会导致其变得无效。