10203設定CURSOR_SHARING為SIMILAR導致物化檢視重新整理失敗

yangtingkun發表於2007-11-15

Oracle10.2.0.3下,如果設定了CURSOR_SHARINGSIMILAR,則可能造成遠端資料庫物化檢視重新整理失敗。


重現一下錯誤。

會話一:

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

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4227/viewspace-69503/,如需轉載,請註明出處,否則將追究法律責任。

相關文章