通过数据库链查询的时候出现了这个ORA-600错误。
这个错误可以通过下面的步骤重现:
SQL> select * from v$version;
BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bi
PL/SQL Release 10.2.0.3.0 - Production
CORE 10.2.0.3.0 Production
TNS for Linux: Version 10.2.0.3.0 - Production
NLSRTL Version 10.2.0.3.0 - Production
SQL> select username, password
2 from dba_users
3 where username = 'TEST';
USERNAME PASSWORD
------------------------------ ------------------------------
TEST 7A0F2B316C212D67
SQL> create database link test@test08
2 connect to test
3 identified by values '7A0F2B316C212D67'
4 using '172.25.13.229/test08';
Database link created.
SQL> select * from globalname@test@test08;
select * from globalname@test@test08
*
ERROR at line 1:
ORA-00600: internal error code, arguments: [kzdlk_zt2 err], [18446744073709551603], [], [], [], [], [], []
对应alert文件中的错误信息为:
Errors in file /opt/ora10g/admin/test08/udump/test08_ora_3282.trc:
ORA-00600: internal error code, arguments: [kzdlk_zt2 err], [18446744073709551603], [], [], [], [], [], []
详细的trace信息为:
[oracle@yans1 bdump]$ more /opt/ora10g/admin/test08/udump/test08_ora_3282.trc
/opt/ora10g/admin/test08/udump/test08_ora_3282.trc
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bit Production
With the Partitioning, OLAP and Data Mining options
ORACLE_HOME = /opt/ora10g/product/10.2.0/db_1
System name: Linux
Node name: yans1
Release: 2.6.9-42.0.0.0.1.ELsmp
Version: #1 SMP Sun Oct 15 15:13:57 PDT 2006
Machine: x86_64
Instance name: test08
Redo thread mounted by this instance: 1
Oracle process number: 24
Unix process pid: 3282, image: oracle@yans1 (TNS V1-V3)
*** ACTION NAME:() 2010-05-10 10:08:59.545
*** MODULE NAME:(SQL*Plus) 2010-05-10 10:08:59.545
*** SERVICE NAME:(SYS$USERS) 2010-05-10 10:08:59.545
*** SESSION ID:(154.4775) 2010-05-10 10:08:59.545
*** 2010-05-10 10:08:59.545
ksedmp: internal or fatal error
ORA-00600: internal error code, arguments: [kzdlk_zt2 err], [18446744073709551603], [], [], [], [], [], []
Current SQL statement for this session:
select * from glbal_name@test@test08
----- Call Stack Trace -----
calling call entry argument values in hex
location type point (? means dubious value)
-------------------- -------- -------------------- ----------------------------
ksedst()+31 call ksedst1() 000000000 ? 000000001 ?
7FBFFE9BE0 ? 7FBFFE9C40 ?
7FBFFE9B80 ? 000000000 ?
ksedmp()+610 call ksedst() 000000000 ? 000000001 ?
7FBFFE9BE0 ? 7FBFFE9C40 ?
7FBFFE9B80 ? 000000000 ?
ksfdmp()+21 call ksedmp() 000000003 ? 000000001 ?
7FBFFE9BE0 ? 7FBFFE9C40 ?
7FBFFE9B80 ? 000000000 ?
kgerinv()+161 call ksfdmp() 000000003 ? 000000001 ?
7FBFFE9BE0 ? 7FBFFE9C40 ?
7FBFFE9B80 ? 000000000 ?
kgeasnmierr()+163 call kgerinv() 006618E20 ? 2A972D1168 ?
7FBFFE9C40 ? 7FBFFE9B80 ?
000000000 ? 000000000 ?
kzdlkdbde()+341 call kgeasnmierr() 006618E20 ? 2A972D1168 ?
7FBFFE9C40 ? 7FBFFE9B80 ?
000000000 ?
FFFFFFFFFFFFFFF3 ?
npigdn0()+1111 call kzdlkdbde() 100BD90F4 ? 7FBFFEEF98 ?
7FBFFE9C40 ? 7FBFFE9B80 ?
000000000 ?
FFFFFFFFFFFFFFF3 ?
npicon0()+844 call npigdn0() 1001C0790 ? 00000004A ?
000000001 ? 7FBFFF1B90 ?
7FBFFF1828 ? 7FBFFF1C08 ?
查询metalink,Oracle认为这不是bug,因为VALUES方式指定密码在CREATE DATABASE LINK语句中是被禁止的,只有Oracle内部工具例如imp可以进行这种操作。所以当用户明确发出这种语句,就会导致上面的ORA-600错误。具体的描述可以参考metalink文档:ID 456320.1。
Oracle认为这不是bug,不过既然这种VALUES语句是被禁止的,那么在用户创建的过程中就应该发出提示,比如在9.2中:
SQL> select * from v$version;
BANNER
----------------------------------------------------------------
Oracle9i Enterprise Edition Release 9.2.0.4.0 - Production
PL/SQL Release 9.2.0.4.0 - Production
CORE 9.2.0.3.0 Production
TNS for Linux: Version 9.2.0.4.0 - Production
NLSRTL Version 9.2.0.4.0 - Production
SQL> select username, password
2 from dba_users
3 where username = user;
USERNAME PASSWORD
------------------------------ ------------------------------
TEST 7A0F2B316C212D67
SQL> create database link test@testdata
2 connect to test
3 identified by values '7A0F2B316C212D67'
4 using '(DESCRIPTION =
5 (ADDRESS_LIST =
6 (ADDRESS = (PROTOCOL = TCP)(HOST = 172.25.88.94)(PORT = 1521)))
7 (CONNECT_DATA =
8 (SERVER = DEDICATED) (SERVICE_NAME = testdata)))';
identified by values '7A0F2B316C212D67'
*
ERROR 位于第 3 行:
ORA-00988: 缺少或无效口令
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/4227/viewspace-662477/ ,如需转载,请注明出处,否则将追究法律责任。