物化檢視日誌表被DROP後建立物化檢視報錯

yangtingkun發表於2009-10-28

物化檢視尤其是快速重新整理的物化檢視,依賴於物化檢視日誌表,所以物化檢視日誌表被刪除後報錯是很正常的,不過如果物化檢視日誌表是直接被DROP,則錯誤資訊比較有意思。

 

 

直接看例子:

SQL> create table t (id number primary key, name varchar2(30));

表已建立。

SQL> create materialized view log on t;

實體化檢視日誌已建立。

SQL> create materialized view mv_t refresh fast as select * from t;

實體化檢視已建立。

SQL> drop materialized view mv_t;

實體化檢視已刪除。

SQL> drop table mlog$_t;

表已刪除。

SQL> create materialized view mv_t refresh fast as select * from t;
create materialized view mv_t refresh fast as select * from t
                                                            *
1 行出現錯誤:
ORA-23412:
主表的主鍵列已更改


SQL> create materialized view mv_t as select * from t;
create materialized view mv_t as select * from t
                                               *
1 行出現錯誤:
ORA-00942:
表或檢視不存在


SQL> drop materialized view log on t;

實體化檢視日誌已刪除。

SQL> create materialized view mv_t refresh fast as select * from t;
create materialized view mv_t refresh fast as select * from t
                                                            *
1 行出現錯誤:
ORA-23413:
"TEST"."T" 不帶實體化檢視日誌


SQL> create materialized view mv_t as select * from t;

實體化檢視已建立。

SQL> drop materialized view mv_t;

實體化檢視已刪除。

SQL> create materialized view log on t;

實體化檢視日誌已建立。

SQL> drop table mlog$_t purge;

表已刪除。

SQL> create materialized view mv_t refresh fast as select * from t;
create materialized view mv_t refresh fast as select * from t
                                                            *
1 行出現錯誤:
ORA-23412:
主表的主鍵列已更改


SQL> create materialized view mv_t as select * from t;
create materialized view mv_t as select * from t
                                               *
1 行出現錯誤:
ORA-00942:
表或檢視不存在


SQL> drop materialized view log on t;

實體化檢視日誌已刪除。

物化檢視日誌的清除必須使用DROP MATERIALIZED VIEW LOG ON的語法,如果直接刪除了物化檢視日誌對應的表,就會導致上面的錯誤資訊。有趣的是,建立快速重新整理的物化檢視錯誤是ORA-23412,而建立完全重新整理或FORCE重新整理的物化檢視會報錯ORA-942

而對於沒有建立物化檢視日誌的基表,則快速重新整理的物化檢視會報錯ORA-23413,而完全重新整理或FORCE重新整理的物化檢視則不會報錯。

如果Oracle可以禁止直接刪除物化檢視日誌表,就不會帶來這種令人迷惑的錯誤資訊了。

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4227/viewspace-617658/,如需轉載,請註明出處,否則將追究法律責任。

相關文章