Oracle 12c物化视图快速刷新-预期插入一次,但是有两次插入,一次删除

时间:2018-08-15 07:30:58

标签: oracle oracle12c materialized-views

我开始使用快速刷新的物化视图,我想知道为什么在我只希望插入几个插入的情况下,为什么会有这么多的插入和删除。

在以下测试设置中,我希望仅插入一个,但是在快速刷新mview时,将插入两个插入和一个删除。为什么会有两个插入和一个删除? (在进行完全刷新时,按预期只有一个插入。)

CREATE TABLE tparent (
     id             number(10)
    ,description    varchar2(10)
    ,CONSTRAINT tparent_pk PRIMARY KEY (id)
);

CREATE TABLE tchild (
     id              number(10)
    ,parentId       number(10)
    ,description    varchar2(10)
    ,CONSTRAINT tchild_pk PRIMARY KEY (id)
);

CREATE MATERIALIZED VIEW LOG ON tparent WITH ROWID;
CREATE MATERIALIZED VIEW LOG ON tchild WITH ROWID;

CREATE MATERIALIZED VIEW mvfamily
  BUILD IMMEDIATE 
  REFRESH FAST ON DEMAND
AS
SELECT p.id parentId
     , p.description parentDescr
     , c.id childId
     , c.description childDescr
     , p.rowid parentRowid
     , c.rowid childRowid
  FROM tparent p
     , tchild c
 WHERE p.id = c.parentId
;

INSERT INTO tparent VALUES (1, 'parent 1');
INSERT INTO tchild VALUES (1, 1, 'child 1');
COMMIT;

EXEC DBMS_MVIEW.REFRESH(list=>'MVFAMILY',method=>'F');

检查user_tab_modifications显示,在实例化视图上已完成两次插入和一次删除。总而言之,这显然是正确的,但是为什么快速刷新不仅可以插入一次?

SELECT table_name, inserts, updates, deletes 
  FROM user_tab_modifications 
     WHERE table_name = 'MVFAMILY';

TABLE_NAME      INSERTS    UPDATES    DELETES
------------ ---------- ---------- ----------
MVFAMILY              2          0          1

0 个答案:

没有答案