物化视图日志表被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可以禁止直接删除物化视图日志表,就不会带来这种令人迷惑的错误信息了
直接看例子:
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可以禁止直接删除物化视图日志表,就不会带来这种令人迷惑的错误信息了
相关文章推荐
- Oracle中建立物化视图报错
- [Oracle小经验]解决由于物化视图日志导致的不能进行表重命名【转贴项目组数据库工程师】
- 简单描述Oracle物化视图日志
- 物化视图日志结构
- Oracle 建立物化视图步骤
- 建立快速刷新的物化视图(materialized view)
- 物化视图日志的维护
- 【听海日志】之ORACLE物化视图 [转]http://www.itpub.net/thread-1614812-1-1.html
- Oracle 如何根据物化视图日志快速刷新物化视图 (不积跬步,无以至千里)
- Oracle materizlized view Study (3) ---详解物化视图日志
- 【原创】物化视图日志对性能的影响测试
- 物化视图日志没有清除
- Oracle11g r2物化视图日志新增COMMIT SCN语句
- 建物化视图日志报索引未发现ORA-08102
- oracle学习笔记——物化视图日志
- 建立物化视图所需权限
- Oracle materizlized view Study (3) ---详解物化视图日志
- Oracle 物化视图日志 与 快速刷新 说明
- oracle物化视图日志结构
- 通过案例学调优之--跨库建立物化视图(Materialized View)