Oracle 11x 中增量刷新的物化视图和相应的主表日志
Posted
技术标签:
【中文标题】Oracle 11x 中增量刷新的物化视图和相应的主表日志【英文标题】:Materalized Views and corresponding master table log for incremental refresh in Oracle 11x 【发布时间】:2017-01-06 09:44:59 【问题描述】:我有一个复杂的查询,它不满足使用“REFRESH FAST ON COMMIT”或“REFRESH FAST”创建物化视图的条件。我已经使用“立即构建”创建了物化视图。我已经在查询中使用的所有表上创建了物化视图日志。我的问题是,当我刷新物化视图时,它是否会使用物化视图日志来增量刷新表,而没有设置“REFRESH FAST ON COMMIT”或“REFRESH FAST”创建选项的物化视图。它会在刷新时重做查询并从头开始构建所有记录。
【问题讨论】:
我想我理解你的困惑 - 让我们试试吧。由于您的 MV 不符合refresh fast
的要求,因此不需要 MV 日志。这是事实。现在,既然这是事实,你还需要 MV 日志吗?答案是,日志不仅仅用于一个物化视图。您可能有不同的 MV,它们使用相同的基表(或表)。其中一些 MV 可能会快速刷新,而另一些可能不会。基表上的 MV 日志只是一个日志 - 它将被任何可快速刷新的 MV 使用并使用该表,即使表上的其他 MV 不能快速刷新。
【参考方案1】:
我没有完全理解你的问题,但这里有一些答案:
您可以设置REFRESH FAST
、REFRESH COMPLETE
和REFRESH FORCE
。
REFRESH FORCE
表示 Oracle 尝试进行 FAST 刷新,如果这不可能,则执行 COMPLETE 刷新。如果省略子句,REFRESH FORCE
是默认值。
COMPLETE refresh 不会触及任何 MATERIALIZED VIEW LOG,它们会一直保留到所有 FAST MATERIALIZED VIEW 都被刷新,即 COMPLETE refresh 重做查询并从头开始构建所有记录。
显然您尝试创建一个可快速刷新的 MATERIALIZED VIEW,但没有成功。
尝试过程DBMS_MVIEW.EXPLAIN_MVIEW 以检查为什么无法进行快速刷新。此过程需要表MV_CAPABILITIES_TABLE
:
CREATE TABLE MV_CAPABILITIES_TABLE
(
STATEMENT_ID VARCHAR2(30 BYTE),
MVOWNER VARCHAR2(30 BYTE),
MVNAME VARCHAR2(30 BYTE),
CAPABILITY_NAME VARCHAR2(30 BYTE),
POSSIBLE CHAR(1 BYTE),
RELATED_TEXT VARCHAR2(2000 BYTE),
RELATED_NUM NUMBER,
MSGNO INTEGER,
MSGTXT VARCHAR2(2000 BYTE),
SEQ NUMBER
)
【讨论】:
OK 确实刷新强制默认导致刷新使用物化视图日志。 我还应该为刷新力创建物化视图日志吗? 基表上的 MATERIALIZED VIEW LOG 是快速刷新的(一个)先决条件。你有什么问题,分别。你想达到什么目标? 我想知道是否刷新强制默认选项将使用物化视图日志进行增量更新,而不是完全重新运行查询。 阅读我的回答:“强制”可以同时进行快速或完全刷新。 FAST 使用物化视图日志,COMPLETE 不使用。以上是关于Oracle 11x 中增量刷新的物化视图和相应的主表日志的主要内容,如果未能解决你的问题,请参考以下文章
如何获得oracle物化视图 定时刷新时 刷新所用的时间 或者是监控 物化视图在jobs中建立的job任务的执行时间