Oracle 11x 中用于增量刷新的实体化视图和相应的主 table 日志
Materalized Views and corresponding master table log for incremental refresh in Oracle 11x
我有一个复杂的查询,不满足使用 'REFRESH FAST ON COMMIT' 或 'REFRESH FAST' 创建物化视图的条件。我用 'BUILD IMMEDIATE' 创建了物化视图。我已经在查询中使用的所有 table 上创建了物化视图日志。我的问题是,当我刷新实体化视图时,它是否会使用实体化视图日志来增量刷新 table 而实体化视图没有设置 'REFRESH FAST ON COMMIT' 或 'REFRESH FAST' 创建选项。它会在刷新时重做查询并从头开始构建所有记录吗?
我没有完全理解你的问题,但这里有一些答案:
您可以设置REFRESH FAST
、REFRESH COMPLETE
和REFRESH FORCE
。
REFRESH FORCE
表示 Oracle 尝试进行快速刷新,如果这不可能,则执行完全刷新。如果您省略该子句,则 REFRESH FORCE
是默认值。
完全刷新不会触及任何物化视图日志,它们会一直保留到所有快速物化视图都已刷新,即完全刷新重做查询并从头开始构建所有记录。
显然您尝试创建一个可快速刷新的实体化视图,但您没有成功。
尝试程序 DBMS_MVIEW.EXPLAIN_MVIEW 以检查无法快速刷新的原因。此程序需要 table 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
)
我有一个复杂的查询,不满足使用 'REFRESH FAST ON COMMIT' 或 'REFRESH FAST' 创建物化视图的条件。我用 'BUILD IMMEDIATE' 创建了物化视图。我已经在查询中使用的所有 table 上创建了物化视图日志。我的问题是,当我刷新实体化视图时,它是否会使用实体化视图日志来增量刷新 table 而实体化视图没有设置 'REFRESH FAST ON COMMIT' 或 'REFRESH FAST' 创建选项。它会在刷新时重做查询并从头开始构建所有记录吗?
我没有完全理解你的问题,但这里有一些答案:
您可以设置REFRESH FAST
、REFRESH COMPLETE
和REFRESH FORCE
。
REFRESH FORCE
表示 Oracle 尝试进行快速刷新,如果这不可能,则执行完全刷新。如果您省略该子句,则 REFRESH FORCE
是默认值。
完全刷新不会触及任何物化视图日志,它们会一直保留到所有快速物化视图都已刷新,即完全刷新重做查询并从头开始构建所有记录。
显然您尝试创建一个可快速刷新的实体化视图,但您没有成功。
尝试程序 DBMS_MVIEW.EXPLAIN_MVIEW 以检查无法快速刷新的原因。此程序需要 table 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
)