总的来说Oracle11g的测试还是很到位的,用了这么长时间,测试了这么多的新功能,一共只碰到过一个7445错误和一个600错误。对于一个新推出的版本,已经算是很不错了。
这个错误可以重现,当执行下面的SQL,会产生这个错误:
SQL> SELECT B.OWNER, B.TABLE_NAME, OBJECT_NAME, SUBOBJECT_NAME
2 FROM
3 DBA_OBJECTS A,
4 (
5 SELECT B.OWNER, B.TABLE_NAME, DBMS_ROWID.ROWID_OBJECT(B.ROWID) DATA_OBJECT_ID
6 FROM T_PRIMARY A, T_FOREIGN B
7 WHERE A.OWNER = B.OWNER
8 AND A.TABLE_NAME = B.TABLE_NAME
9 AND A.TABLE_NAME IN (’DUAL’, ’T_PRIMARY’, ’T’, ’DR$INDEX’)
10 ) B
11 WHERE A.DATA_OBJECT_ID = B.DATA_OBJECT_ID.
DBA_OBJECTS A,
*第 3 行出现错误:
ORA-00600: 内部错误代码, 参数: [kkdcacr: ptn_kxcp], [], [], [], [], [], [], []
至于T_PRIMARY和T_FOREIGN的创建脚本和含义,可以参考:http://yangtingkun.itpub.net/post/468/404694
通过EXPLAIN PLAN FOR查看执行计划也会报错:
SQL> EXPLAIN PLAN FOR
2 SELECT B.OWNER, B.TABLE_NAME, OBJECT_NAME, SUBOBJECT_NAME
3 FROM
4 DBA_OBJECTS A,
5 (
6 SELECT B.OWNER, B.TABLE_NAME, DBMS_ROWID.ROWID_OBJECT(B.ROWID) DATA_OBJECT_ID
7 FROM T_PRIMARY A, T_FOREIGN B
8 WHERE A.OWNER = B.OWNER
9 AND A.TABLE_NAME = B.TABLE_NAME
10 AND A.TABLE_NAME IN (’DUAL’, ’T_PRIMARY’, ’T’, ’DR$INDEX’)
11 ) B
12 WHERE A.DATA_OBJECT_ID = B.DATA_OBJECT_ID.
DBA_OBJECTS A,
*第 4 行出现错误:
ORA-00600: 内部错误代码, 参数: [kkdcacr: ptn_kxcp], [], [], [], [], [], [], []
去掉内存查询中的连接,只保留T_FOREIGN表,则错误消失。
SQL> SELECT B.OWNER, B.TABLE_NAME, OBJECT_NAME, SUBOBJECT_NAME
2 FROM
3 DBA_OBJECTS A,
4 (
5 SELECT B.OWNER, B.TABLE_NAME, DBMS_ROWID.ROWID_OBJECT(B.ROWID) DATA_OBJECT_ID
6 FROM T_FOREIGN B
7 WHERE TABLE_NAME IN (’DUAL’, ’T_PRIMARY’, ’T’, ’DR$INDEX’)
8 ) B
9 WHERE A.DATA_OBJECT_ID = B.DATA_OBJECT_ID.
OWNER TABLE_NAME OBJECT_NAM SUBOBJECT_NAME
-------- ---------- ---------- ------------------------------
YANGTK T_PRIMARY T_FOREIGN P4 CTXSYS DR$INDEX T_FOREIGN P3