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 FASTREFRESH COMPLETEREFRESH FORCEREFRESH 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任务的执行时间

Oracle设置物化视图的自动刷新

oracle物化视图不会自动更新是怎么回事

oracle 物化视图 job

Oracle - 物化视图在完全刷新期间仍可访问。这是如何运作的?

Oracle-视图