oracle基於COMMIT SCN的物化視圖日誌快速重新整理的方法

來源:互聯網
上載者:User

11.2中物化視圖日誌可以指定COMMIT SCN,這時物化視圖重新整理就不需要時間戳記了,這篇簡單描述Oracle是如何?通過COMMIT SCN來進行重新整理的。

建立一個測試環境:

SQL> SELECT * FROM V$VERSION;

BANNER

--------------------------------------------------------------------------------

Oracle Database11gEnterprise Edition Release11.2.0.1.0 - 64bit Production

PL/SQL Release 11.2.0.1.0 - Production

CORE    11.2.0.1.0      Production

TNS for Linux: Version 11.2.0.1.0 - Production

NLSRTL Version 11.2.0.1.0 - Production

SQL> CREATE TABLE T

2  (ID NUMBER PRIMARY KEY,

3  NAME VARCHAR2(30),

4  AGE NUMBER(3));

表已建立。

SQL> INSERT INTO T

2  SELECT ROWNUM, TNAME, ROWNUM

3  FROM TAB;

已建立18行。

SQL> CREATE MATERIALIZED VIEW LOG ON T

2  WITH COMMIT SCN;

實體化視圖日誌已建立。

SQL> CREATE MATERIALIZED VIEW MV_T REFRESH FAST

2  AS SELECT * FROM T;

實體化視圖已建立。

對物化視圖基表進行修改:

SQL> INSERT INTO T      

2  VALUES (20, 'TEST', 100);

已建立1行。

SQL> UPDATE T

2  SET NAME = 'TEST UPDATE'

3  WHERE ID = 1;

已更新1行。

SQL> DELETE T

2  WHERE ID = 2;

已刪除1行。

SQL> COMMIT;

提交完成。

SQL>COLCHANGE_VECTOR$$ FORMAT A30

SQL> SET NUMW 16

SQL> SELECT * FROM MLOG$_T;

ID D O CHANGE_VECTOR$$                           XID$$

---------------- - - ------------------------------ ----------------

20 I N FE                             2533498128696031

 1 U U 04                             2533498128696031

 2 D O 00                             2533498128696031

可以看到物化視圖日誌中記錄了INSERT、UPDATE和DELETE操作,由於指定了COMMIT SCN,物化視圖日誌中多出了XID$$列,而缺少了SNAPTIME$$列。

SQL> CREATE TABLE T_TIMESTAMP (ID NUMBER PRIMARY KEY);

表已建立。

SQL> CREATE MATERIALIZED VIEW LOG ON T_TIMESTAMP;

實體化視圖日誌已建立。

SQL> INSERT INTO T_TIMESTAMP VALUES (1);

已建立1行。

SQL> SELECT * FROM MLOG$_T_TIMESTAMP;

ID SNAPTIME$$     D O CHANGE_VECTOR$$                           XID$$

---------------- -------------- - - ------------------------------ ----------------

 1 01-1月-00     I N FE                             2814912975871092

可以看到,即使不指定WITH COMMIT SCN,11.2的物化視圖日誌也會包含XID$$列,估計是為了實現統一的介面。

下面對重新整理過程進行TRACE,看看Oracle是如何?重新整理的:

SQL> ALTER SESSION SET EVENTS '10046 TRACE NAME CONTEXT FOREVER, LEVEL 12';

會話已更改。

SQL> EXEC DBMS_MVIEW.REFRESH('MV_T')

PL/SQL過程已成功完成。

SQL> ALTER SESSION SET EVENTS '10046 TRACE NAME CONTEXT OFF';

查看本欄目更多精彩內容:http://www.bianceng.cnhttp://www.bianceng.cn/database/Oracle/

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.