物化视图与REFRESH FAST ON COMMIT无法正常工作

时间:2018-02-05 18:13:38

标签: sql oracle views oracle12c materialized-views

我正在尝试创建物化视图。遵循以下步骤并实现它们,但视图不会刷新ON COMMIT。

1)基表 - AMT_T。表具有SCD 2类型数据。表没有索引或主键 - 现有应用程序的体系结构。

CREATE TABLE
AMT_T
(
    ID NUMBER(11) NOT NULL,
    AMT_TYP_CDE VARCHAR2(80 CHAR) NOT NULL,
    ROW_EFF_DTM TIMESTAMP(6) NOT NULL,
    ROW_EXP_DTM TIMESTAMP(6) NOT NULL,
    AMT NUMBER(13,2) NOT NULL
);

样本数据

ID      AMT_TYP_CDE     ROW_EFF_DTM         ROW_EXP_DTM         AMT
9956570 LOSSAMT         2012-10-22 00:00:00 2012-11-01 00:00:00 10
9956570 LOSSAMT         2012-11-01 00:00:00 9999-12-31 00:00:00 110

另一个处理日期表存储系统处理日期,用于连接到上表以过滤当前行。表是SCD-1,仅维护应用程序的当前行

CREATE TABLE
    PROCESS_DTE_T
    (
        CLASS_CDE CHAR(6 CHAR) NOT NULL,
        AS_OF_DTE DATE NOT NULL,
        GRP_CDE CHAR(6 CHAR) NOT NULL
    );

CLASS_CDE   AS_OF_DTE              GRP_CDE 
DETAIL      2018-02-02 00:00:00    PAL

2)在这些表上创建物化视图日志

create materialized view log on SCHEMA1.AMT_T with rowid;
create materialized view log on SCHEMA2.PROCESS_DTE_T with rowid;

成功创建。

3)创建物化视图如下。

CREATE MATERIALIZED VIEW SCHEMA1.AMT_MV 
        ( ID, 
        AMT_TYP_CDE,
        ROW_EFF_DTM, 
        ROW_EXP_DTM, 
        AMT, 
        a_row_id, 
        b_row_id ) 
BUILD IMMEDIATE 
REFRESH FAST ON COMMIT
ENABLE QUERY REWRITE AS
(
    SELECT
        a."ID",
        a."AMT_TYP_CDE",
        a."ROW_EFF_DTM",
        a."ROW_EXP_DTM",
        a."AMT",
        a.rowid,
        b.rowid
    FROM
        SCHEMA1.AMT_T a,
        SCHEMA2.PROCESS_DTE_T b
    WHERE
        TRUNC(a.ROW_EFF_DTM) <= b.AS_OF_DTE (+)
    AND TRUNC(a.ROW_EXP_DTM) > b.AS_OF_DTE (+)
    AND b.GRP_CDE = 'PAL');

视图已成功创建。

问题 - a)无法在上述任何表格的MLOG $ _ *中看到任何内容 b)物化视图未显示应用程序已插入/更新的新数据超过三天。能够在基表中看到新记录。

1 个答案:

答案 0 :(得分:-2)

提交之后你就打电话给它了 DBMS_SNAPSHOT.REFRESH('SCHEMA1','f');