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

物化视图尤其是快速刷新的物化视图,依赖于物化视图日志表,所以物化视图日志表被删除后报错是很正常的,不过如果物化视图日志表是直接被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可以禁止直接删除物化视图日志表,就不会带来这种令人迷惑的错误信息了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值