Oracle的實體化視圖(MVIEW)的深入研究之二
Oracle的實體化視圖(MVIEW)的深入研究之二
轉:http://www.anysql.net/oracle/reorg_master_table.html
當在一個表上建了物化視圖的日誌(Materialized View Log)後, 所有的DML操作都會被相應地記錄到物化視圖日誌表(MLOG$_)中, 如果想對這個表進行操作, 但不想這些操作被記錄到日誌(MVIEW LOG)中, 應當怎麼辦呢? 在DBMS_MVIEW包中有兩個過程可以用來完成這個要求. 這裡我們需要開啟兩個會話, 其中一個會話以DBA的身份登陸(Session DBA), 另一個會話隨便了(Session USER), 按如下次序來進行操作:
在Session USER中先運行以下語句去看一下MVIEW LOG表中有多少條記錄:
SQL> SELECT count(*) FROM MLOG$_T_REORG;
COUNT(*)
----------
0
在Session DBA中運行BEGIN_TABLE_REORGANIZATION過程開始維護, 記得執行完後要運行COMMIT命令, 否則會阻塞(Block)別的進程:
SQL> exec dbms_mview.begin_table_reorganization('ANYSQL','T_REORG');
PL/SQL procedure successfully completed.
在Session USER中先運行DML直接修改表的資料, 提交後看一下MVIEW LOG表中的記錄有沒有增加:
SQL> insert into t_reorg select * from tab;
13 rows created.
SQL> COMMIT;
Commit complete.
SQL> SELECT count(*) FROM MLOG$_T_REORG;
COUNT(*)
----------
0
在Session DBA中運行END_TABLE_REORGANIZATION過程結束維護, 記得執行完後要運行COMMIT命令, 否則會阻塞(Block)別的進程:
SQL> exec dbms_mview.end_table_reorganization('ANYSQL','T_REORG');
PL/SQL procedure successfully completed.
在Session USER中先運行一些DML語句, 檢查一下MVIEW LOG表中的記錄數是不是增多了:
SQL> delete t_reorg;
13 rows deleted.
SQL> commit;
Commit complete.
SQL> SELECT count(*) FROM MLOG$_T_REORG;
COUNT(*)
----------
13
在這兒說了一大堆, 其實是如何讓表不產生實體化視圖日誌的問題.