我正在尝试创建物化视图。遵循以下步骤并实现它们,但视图不会刷新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)物化视图未显示应用程序已插入/更新的新数据超过三天。能够在基表中看到新记录。
答案 0 :(得分:-2)
提交之后你就打电话给它了 DBMS_SNAPSHOT.REFRESH('SCHEMA1','f');