网站首页
JSP空间
动态资讯
开源项目
技术文档
资源下载
J2EE资源
客户论坛
在线支付
 
  技术文档>>数据库技术>>Oracle技术>>Oracle开发>查看文档  
  解析:物化视图刷新中出现的“约束冲突”     
  文章作者:未知  文章来源:赛迪网技术社区  
  查看:131次  录入:管理员--2007-11-15  
 

本文中,我们通过实例的方法来帮助您理解物化视图刷新过程中出现的约束冲突问题。

即使将物化视图的约束建立和基表完全一致,由于物化视图的刷新机制,也会产生约束冲突的现象。

以下是一个简单的示例:

sql> create table t (id number primary key, name varchar2(30));--表已创建

sql> alter table t add constraint un_t_name unique (name);
--表已更改

sql> create materialized view log on t;
--实体化视图日志已创建:

sql> create materialized view mv_t refresh fast as select * from t;
--实体化视图已创建。

sql> alter table mv_t add constraint un_mv_t_name unique (name);
--表已更改:

sql> insert into t values (1, 'a');
--已创建 1 行:

sql> insert into t values (2, 'b');
--已创建 1 行:

sql> commit;
--提交完成:

sql> exec dbms_mview.refresh('mv_t')

--pl/sql 过程已成功完成。

上面构造了一个简单的物化视图,物化视图和基表建立了相同的唯一约束。

下面进行一个循环的更新操作,然后观察刷新的情况:

sql> update t set name = 'c' where id = 1;

--已更新 1 行。

sql> update t set name = 'a' where id = 2;

--已更新 1 行。

sql> update t set name = 'b' where id = 1;

--已更新 1 行。

sql> commit;

--提交完成。

sql> exec dbms_mview.refresh('mv_t')
begin dbms_mview.refresh('mv_t'); end;

*
error 位于第 1 行:
ora-12008: 实体化视图的刷新路径中存在错误
ora-00001: 违反唯一约束条件 (yangtk.un_mv_t_name)
ora-06512: 在"sys.dbms_snapshot", line 794
ora-06512: 在"sys.dbms_snapshot", line 851
ora-06512: 在"sys.dbms_snapshot", line 832
ora-06512: 在line 1

刷新失败了。解决这个问题的一个方法是对于物化视图不建立唯一约束,唯一性由基表保证。但是这种方法只对只读物化视图适用。而且,缺少唯一约束信息,可能会影响sql的执行计划。

这种情况下,最好的解决方法是建立延迟约束。

sql> alter table mv_t drop constraint un_mv_t_name;

--表已更改。

sql> alter table mv_t add constraint 
un_mv_t_name unique (name) deferrable;

--表已更改。

sql> exec dbms_mview.refresh('mv_t')

--pl/sql 过程已成功完成。

注释:延迟唯一约束对应的索引也必须是非唯一的,否则无法达到延迟约束的目的。

 
 
上一篇: 解析:job的interval输入参数过长的问题    下一篇: 教你快速掌握oracle 9i数据库的移动过程
  相关文档
oracle数据库中的timestamp和date类型 05-08
快速了解Oracle9i中的一个特殊等待事件 09-29
讲解oracle数据库冷备份恢复的具体步骤 07-21
关闭ORACLE SERVLET ENGINE 11-12
Oracle安全性管理采取的基本措施简介 04-12
如何在window nt系统中监测oracle进程 02-01
实例讲解分区表的可用性及相关错误案例 (1) 03-31
如何确定Oracle数据库表中重复的记录 01-15
带你深入的了解执着并购中的--甲骨文 11-15
学习 Oracle过程中几个常见问题的总结 08-05
oracle数据字典与动态性能表的相关概念 04-24
讲解oracle数据库的全文索引设置步骤 (1) 03-27
全面解析oracle数据库中管理实例的方法 (1) 04-24
如何用dbms_rowid获取rowid的详细信息 03-26
oracle数据库10g环境下修改vip地址的方法 07-25
oracle10g r2 emca常用命令及实例步骤 07-25
使用t-sql强制所有用户退出当前数据库 07-17
解析Oracle 9i数据库异常关闭后的启动 08-05
Oracle *Graphics中不同类型图形的切换 09-01
sql server 2008的新特性概述:集成服务 02-21
返回首页 | 关于我们 | J网章程 | JSP空间合租 | 客服中心 | 免责声明 | 常见问题 | 参观机房
本站主机空间代理至厦门市华众网络科技有限公司
《中华人民共和国增值电信业务经营许可证》
编号:闽B2-20050079
@2005-2008福建JSP技术网 版权所有 闽ICP备05000928号
厦门(总部):13616026886 福州:0591-87655121
邮箱:admin@fjjsp.com 站长QQ,点击这里给我发消息