新疆软件开发

本站首页 软件开发 成功案例 公司新闻 公司简介 客服中心 软件技术 网站建设
  您现在的位置: 新疆二域软件开发公司 >> 数据库开发 >> 文章正文

怎样解决视图刷新时出现的约束冲突

                             本文中,我们通过实例的方法来帮助您理解物化视图刷新过程中出现的约束冲突问题。
  即使将物化视图的约束建立和基表完全一致,由于物化视图的刷新机制,也会产生约束冲突的现象。
  以下是一个简单的示例:
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 过程已成功完成。
 


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

作者:未知 | 文章来源:未知 | 更新时间:2008-1-19 18:33:29

  • 上一篇文章:

  • 下一篇文章:

  • 相关文章:
    没有相关文章
    软件技术
    · 开发语言
    · Java技术
    · .Net技术
    · 数据库开发
    最新文章  
    ·Domino平台的优缺点分析
    ·oracle不能连接本地库的解
    ·使用经验整理-TestDirecto
    ·学习sqlserver数据库的维度
    ·sqlserver 多用户并发中如
    ·丢失日志文件后数据库还能
    ·人工智能在数据库sql语句编
    ·数据库学习:Oracle应用程
    ·基础知识:软件测试的要点
    ·技术文章:sqlserver 2008
    ·SQL Server虚拟内存和物理
    ·在MySQL中 describe命令怎
    ·怎样解决视图刷新时出现的
    ·如果忘记了MySQL的root用户
    ·基础学习:基于SQL的sysob
    关于我们 | 软件开发 | 下载试用 | 客服中心 | 联系我们 | 友情链接 | 网站地图 | 新疆电子地图 | RSS订阅
    版权所有 © 2016 新疆二域软件开发网 www.k8w.net All Rights Reserved 新ICP备14003571号
    新疆软件开发总机:0991-4842803、4811639.
    客服QQ:596589785 ;地址:新疆乌鲁木齐北京中路华联大厦A-5C 邮编:830000