ORA-600(kzdugt)错误

创建用户时产生ORA-600(kzdugt)错误。
错误信息为:

Mon Mar 12 12:06:58 CST 2012
Errors IN file /u01/app/oracle/admin/orcl10g/udump/orcl10g_ora_22193.trc:
ORA-00600: internal error code, arguments: [kzdugt], [], [], [], [], [], [], []

详细的信息为:

Dump file /u01/app/oracle/admin/orcl10g/udump/orcl10g_ora_22193.trc
Oracle DATABASE 10g Enterprise Edition Release 10.2.0.5.0 - 64bit Production
WITH the Partitioning, OLAP, DATA Mining AND REAL Application Testing options
ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1
System name:    Linux
Node name:      hpserver2.enmotech.com
Release:        2.6.32-100.28.5.el6.x86_64
Version:        #1 SMP Wed Feb 2 18:40:23 EST 2011
Machine:        x86_64
Instance name: orcl10g
Redo thread mounted BY this instance: 1
Oracle process NUMBER: 13
Unix process pid: 22193, image: oracle@hpserver2.enmotech.com (TNS V1-V3)
*** ACTION NAME:() 2012-03-12 12:06:58.209
*** MODULE NAME:(sqlplus@hpserver2.enmotech.com (TNS V1-V3)) 2012-03-12 12:06:58.209
*** SERVICE NAME:(SYS$USERS) 2012-03-12 12:06:58.209
*** SESSION ID:(31.660) 2012-03-12 12:06:58.209
*** 2012-03-12 12:06:58.209
ksedmp: internal OR fatal error
ORA-00600: internal error code, arguments: [kzdugt], [], [], [], [], [], [], []
CURRENT SQL statement FOR this SESSION:
CREATE USER reptdb
IDENTIFIED BY *******DEFAULT tablespace users
----- Call Stack Trace -----
calling              CALL     entry                argument VALUES IN hex      
location             TYPE     point                (? means dubious VALUE)     
-------------------- -------- -------------------- ----------------------------
ssd_unwind_bp: unhandled instruction at 0x76ab50 instr=f
ksedst()+31          CALL     ksedst1()            000000000 ? 000000001 ?
                                                   7FFFFD029C60 ? 7FFFFD029CC0 ?
                                                   7FFFFD029C00 ? 000000000 ?
ksedmp()+610         CALL     ksedst()             000000000 ? 000000001 ?
                                                   7FFFFD029C60 ? 7FFFFD029CC0 ?
                                                   7FFFFD029C00 ? 000000000 ?
ksfdmp()+63          CALL     ksedmp()             000000003 ? 000000001 ?
                                                   7FFFFD029C60 ? 7FFFFD029CC0 ?
                                                   7FFFFD029C00 ? 000000000 ?
kgerinv()+161        CALL     ksfdmp()             006AE9A40 ? 000000003 ?
                                                   7FFFFD029C60 ? 7FFFFD029CC0 ?
                                                   7FFFFD029C00 ? 000000000 ?
kgesinv()+33         CALL     kgerinv()            006AE9A40 ? 007F5EE48 ?
                                                   7FFFFD029CC0 ? 7FFFFD029C00 ?
                                                   000000000 ? 000000000 ?
ksesin()+211         CALL     kgesinv()            006AE9A40 ? 007F5EE48 ?
                                                   7FFFFD029CC0 ? 7FFFFD029C00 ?
                                                   000000000 ? 000000000 ?
kzdugt()+1435        CALL     ksesin()             006AE9A40 ? 007F5EE48 ?

这个错误是在创建用户时产生的,其对应的bug描述为:ORA-00600 [kzdugt] While Creating An User [ID 734801.1]。
导致问题的原因仍然是数据字典的不一致,如果从USER$查询MAX(USER#)的值大于_NEXT_USER对应的USER#的值,就会导致这个问题。
接近方法除了可以直接更新_NEXT_USER对应的USER#的值外,还可以通过PL/SQL循环动态创建用户并捕获错误,使得_NEXT_USER的值最终超过USER$其他所有的记录,就可以避免这个错误了。

This entry was posted in BUG and tagged , , , . Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *