[ 登录 ][ 注册 ] 天极传媒: 比特网 | 天极网 | IT专家网 | 52PK游戏网 | 手机天极 | IT分众 |
您现在的位置: IT专家网 > 数据库子站 > 数据库技巧

Oracle 11g解决Oracle 10g中bug

作者: yangtingkun,  出处:blog, 责任编辑: 李书琴, 
2007-11-16 11:32
  在Oracle10.2.0.3下,如果设置了CURSOR_SHARING为SIMILAR,则可能造成远端数据库物化视图刷新失败……

  在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将在11g中解决这个bug。

  • 本文关键词:

网友评论

笔名 
请您注意:遵守国家有关法律、法规,尊重网上道德,承担一切因您的行为而直接或间接引起的法律责任。    IT专家网友拥有管理笔名和留言的一切权利。

邮件订阅