·天新网首页·加入收藏·设为首页
首页|笔记本|手机|数码相机|摄像机|MP3/MP4|主板|内存|显示器|办公|打印机|下载|开发|学院|汽车|业界
硬件|台式机|数码|数字家庭|投影仪|GPS/CPU|显卡|硬盘|服务器|网络|一体机|驱动|源码|考试|游戏|通信
您现在的位置:天新网 > 软件开发 > 数据库开发 > Oracle
设置CURSOR_SHARING为SIMILAR后产生的bug
http://dev.21tx.com 2007年12月06日 赛迪网 99113

Oracle10.2.0.3下,假如我们设置了CURSOR_SHARING为SIMILAR,就会造成远端数据库物化视图刷新失败。

错误示例:

会话一:

SQL> ALTER SYSTEM SET CURSOR_SHARING = SIMILAR;

系统已更改。

SQL> CREATE TABLE T_MV (ID NUMBER PRIMARY KEY, NAME VARCHAR2(30));

表已创建。

SQL> CREATE MATERIALIZED VIEW LOG ON T_MV;

实体化视图日志已创建。

会话二:

SQL> SET SQLP 'SQL2> '

SQL2> CREATE DATABASE LINK TESTRAC.US.ORACLE.COM

2 CONNECT TO TEST IDENTIFIED BY TEST USING 'TESTRAC';

数据库链接已创建。

SQL2> CREATE MATERIALIZED VIEW MV_T_MV REFRESH FAST

2 AS SELECT * FROM T_MV@TESTRAC.US.ORACLE.COM;

实体化视图已创建。

会话一:

SQL> INSERT INTO T_MV VALUES (1, 'A');

已创建 1 行。

SQL> DELETE T_MV WHERE ID = 1;

已删除 1 行。

SQL> COMMIT;

提交完成。

会话二:

SQL2> EXEC DBMS_MVIEW.REFRESH('MV_T_MV')

PL/SQL 过程已成功完成。

会话一:

SQL> INSERT INTO T_MV VALUES (2, 'B');

已创建 1 行。

SQL> DELETE T_MV WHERE ID = 2;

已删除 1 行。

SQL> COMMIT;

提交完成。

会话二:

SQL2> EXEC DBMS_MVIEW.REFRESH('MV_T_MV')

BEGIN DBMS_MVIEW.REFRESH('MV_T_MV'); END;

*第 1 行出现错误:

ORA-12008: 实体化视图的刷新路径中存在错误

ORA-01008: 并非所有变量都已绑定

ORA-02063: 紧接着 line (起自 TESTRAC.US.ORACLE.COM)

ORA-06512: 在 "SYS.DBMS_SNAPSHOT", line 2254

ORA-06512: 在 "SYS.DBMS_SNAPSHOT", line 2460

ORA-06512: 在 "SYS.DBMS_SNAPSHOT", line 2429

ORA-06512: 在 line 1

出现这个错误的主要原因是由于设置了CURSOR_SHARING的值等于SIMILAR。

查询metalink后你会发现10.2.0.3上和CURSOR_SHARING相关的问题确实不少,具体的描述可以参考:Doc ID: Note:457607.1。这个问题和Bug No. 5863277的描述最为接近。

解决此问题的方法就是将CURSOR_SHARING设置为EXACT,否则需要打5863277的补丁。

上一篇: 教你如何在数据字典中修改Oracle的表列名
下一篇: Oracle数据库中的Instance和数据库的区别

25年牵手相伴,2500台经典机型限量特供,800-858-2883手机400-884-9425

热点文章
关于我们 | 联系我们 | 广告服务 | 工作机会 | 版权声明 | 欢迎投稿 | 网站地图
Copyright © 2000-2009 , www.21tx.com , All Rights Reserved .
晨新科技 版权所有 Created by TXSite.net