Oracle的實體化視圖(MVIEW)的深入研究之四

來源:互聯網
上載者:User
Oracle的實體化視圖(MVIEW)的深入研究之四  
  現在對第一篇中基表進行移動(Move)操作, 會發現不能進行快速重新整理, 必須進行全部(Complete)重新整理才行. 如下所示:
SQL> ALTER TABLE T_MVLOG MOVE;

Table altered.

SQL> EXEC DBMS_MVIEW.REFRESH('MV_T_MVLOG','FAST');
BEGIN DBMS_MVIEW.REFRESH('MV_T_MVLOG','FAST'); END;

*
ERROR at line 1:
ORA-12034: materialized view log on "ANYSQL"."T_MVLOG" younger than last refresh
ORA-06512: at "SYS.DBMS_SNAPSHOT", line 803
ORA-06512: at "SYS.DBMS_SNAPSHOT", line 860
ORA-06512: at "SYS.DBMS_SNAPSHOT", line 841
ORA-06512: at line 1

    為什麼失敗, 可以仔細分析一下基於ROWID的MVIEW LOG被重新整理的過程, 當基表移動後, ROWID的值變了, 因此不能再繼續支援主表的UPDATE/DELETE這樣的操作了. 下面將這個實體化視圖重新定義成基於主鍵(Primary Key)的, 首先刪除現有的實體化視圖及日誌, 再為表加一個主鍵, 重新建立實體化視圖 :

SQL>  alter table t_mvlog modify col1 not null;

Table altered.

SQL> alter table t_mvlog add primary key (col1);

Table altered.

SQL> create materialized view log on t_mvlog with primary key, sequence;

Materialized view log created.

SQL> CREATE MATERIALIZED VIEW MV_T_MVLOG
  2    REFRESH FAST WITH PRIMARY KEY
  3  AS SELECT ROWID R_ID, A.* FROM T_MVLOG A;

Materialized view created.

    再對基表作移動(Move)操作後, 就可以進行增量重新整理了.

SQL> alter table t_mvlog move;

Table altered.

SQL> exec dbms_mview.refresh('MV_T_MVLOG','FAST');

PL/SQL procedure successfully completed.

    選擇基於ROWID還是基於主鍵(Primary Key)的實體化視圖日誌, 還是很重要的.  

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.