您的位置:首页 > 运维架构

物化视图日志表被DROP后建立物化视图报错

2014-08-29 11:16 381 查看
物化视图尤其是快速刷新的物化视图,依赖于物化视图日志表,所以物化视图日志表被删除后报错是很正常的,不过如果物化视图日志表是直接被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可以禁止直接删除物化视图日志表,就不会带来这种令人迷惑的错误信息了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: