• --:)欢迎访问锋网源码(:--
  • 首页
  • RSS订阅
  • 常用软件
  • 网页模板
  • 网站运作
  • 锋网学院
  • 繁體中文

  • 学院首页
  • 新闻资讯
  • 网站运营
  • 网站开发
  • 美工设计
  • 数据库类
  • 服务器类
  • 网络应用
  • 操作系统
  • 软件教学
编程开发   认证考试   网络安全   文章搜索: 高级搜索
会员登录/控制面版 您的位置: 学院首页 >> 数据库类 >> Oracle >> 文章内容
 

精彩推荐

 
 

本类推荐文章

 
 

本类阅读排行

  • ORACLE学习笔记--性能优化
  • Oracle数据库维护常用SQL语句..
  • oracle HA应用的方案参考
  • 在UNIX服务器上设置Oracle8i..
  • Oracle 数据库的备份与恢复(..
  • 在UNIX服务器上设置Oracle8i..
  • Oracle 数据库的备份与恢复(..
  • 如何在hp-ux10.20系统中正确..
  • 在一台机器配置两个listener..
  • 如何保持Oracle数据库的优良..
  • Oracle 数据库的备份与恢复
  • Oracle数据库的空间管理技巧
  • 在slackware 10下安装Oracle..
  • 在UnixWare7.1.1上安装Oracl..
  • 在Oracle中添加用户 赋权 修..
  • Oracle 10g导出的数据库能否..
  • 解决Oracle并行服务器的相关..
  • 最影响Oracle系统性能的初始..
  • 正确进行Oracle数据库性能完..
  • 详细介绍Oracle数据库的启动..
 
 

解决物化视图刷新过程中的约束冲突问题

  • 日期:2008-06-17     人气:     出处:     作者:
  • 字体大小:
  • 小
  • 中
  • 大

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

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

以下是一个简单的示例:

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 过程已成功完成。

 

 

 

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

相关文章
  • 解决物化视图刷新过程中的约束冲突问题
相关软件

  • 网友评论:
  • 查看所有评论
  • 我要发表评论
 

关于本站 | 广告联系 | 版权声明 | 网站地图 | 加入收藏 | 帮助中心 |

Copyright © 2006-2007 fwvv.net  程序支持:木翼  皖ICP备06004916号  

感谢:点击网络 联网科技 天盈信息 中国E速网 59互联  提供服务器及带宽赞助