首页 » OGG, ORACLE 9i-23ai » ora-600 [kcbgcur_9] internal error when ALTER DATABASE ADD SUPPLEMENTAL LOG DATA
ora-600 [kcbgcur_9] internal error when ALTER DATABASE ADD SUPPLEMENTAL LOG DATA
今天在配置GOLDENGATE时在增加附加日志时遇到了ora-600 ,下面记录一下解决过程
[oracle@dev-db ogg11r2]$ sqlplus / as sysdba
SQL*Plus: Release 10.2.0.1.0 - Production on Wed Oct 10 13:05:43 2012
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bit Production
With the Partitioning, OLAP and Data Mining options
SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA
*
ERROR at line 1:
ORA-00600: internal error code, arguments: [kcbgcur_9], [8388681], [25],
[100663296], [33554432], [], [], []
SQL> select SUPPLEMENTAL_LOG_DATA_MIN from v$database;
SUPPLEME
--------
NO
SQL> archive log list
Database log mode No Archive Mode
Automatic archival Disabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 57572
Current log sequence 57575
SQL> alter database archivelog;
Database altered.
SQL> alter database open;
Database altered.
SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA
*
ERROR at line 1:
ORA-00600: internal error code, arguments: [kcbgcur_9], [8388681], [25],
[100663296], [33554432], [], [], []
/oracle/admin/devdb/udump/devdb_ora_22143.trc
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bit Production
With the Partitioning, OLAP and Data Mining options
ORACLE_HOME = /oracle/product/10.2.0
System name: Linux
Node name: dev-db
Release: 2.6.9-67.ELsmp
Version: #1 SMP Fri Nov 16 12:49:06 EST 2007
Machine: x86_64
Instance name: devdb
Redo thread mounted by this instance: 1
Oracle process number: 56
Unix process pid: 22143, image: oracle@dev-db (TNS V1-V3)
*** SERVICE NAME:(SYS$USERS) 2012-10-10 13:05:46.872
*** SESSION ID:(1771.4915) 2012-10-10 13:05:46.872
*** 2012-10-10 13:05:46.872
ksedmp: internal or fatal error
ORA-00600: internal error code, arguments: [kcbgcur_9], [8388681], [25], [100663296], [33554432], [], [], []
Current SQL statement for this session:
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA
----- Call Stack Trace -----
calling call entry argument values in hex
location type point (? means dubious value)
-------------------- -------- -------------------- ----------------------------
ksedst()+31 call ksedst1() 000000000 ? 000000001 ?
000000000 ? 000000000 ?
000000000 ? 000000001 ?
ksedmp()+610 call ksedst() 000000000 ? 000000001 ?
000000000 ? 000000000 ?
000000000 ? 000000001 ?
ksfdmp()+21 call ksedmp() 000000003 ? 000000001 ?
000000000 ? 000000000 ?
000000000 ? 000000001 ?
kgerinv()+161 call ksfdmp() 000000003 ? 000000001 ?
000000000 ? 000000000 ?
000000000 ? 000000001 ?
kgeasnmierr()+163 call kgerinv() 006469D40 ? 2A971F0040 ?
000000000 ? 000000000 ?
000000001 ? 000000001 ?
kcbgcur()+4762 call kgeasnmierr() 006469D40 ? 2A971F0040 ?
000000000 ? 000000000 ?
000000000 ? 000800049 ?
ktugusc()+699 call kcbgcur() 00528F7A0 ? 000000001 ?
000000000 ? 000000000 ?
000000000 ? 000800049 ?
ktucwt3()+267 call ktugusc() 7FBFFF3650 ? 017F7E490 ?
000000001 ? 000000000 ?
000000000 ? 000000000 ?
dbs_about_to_modify call ktucwt3() 7FBFFF3C90 ? 00147AE14 ?
_slog_data()+1929 000000001 ? 000000000 ?
000000000 ? 000000000 ?
dbsucf()+3272 call dbs_about_to_modify 000000041 ? 000000008 ?
_slog_data() 7FBFFF42DC ? 7FBFFF42E4 ?
646000000000001 ? 000000000 ?
adbdrv()+47228 call dbsucf() 000000041 ? 000000008 ?
21A55C430 ? 7FBFFF42E4 ?
从ora-600 [kcbgcur_9] 的第二个参数是DBA,根据DBA计算datafile number
SQL> select dbms_utility.data_block_address_file(8388681) from dual;
DBMS_UTILITY.DATA_BLOCK_ADDRESS_FILE(8388681)
---------------------------------------------
2
SQL> select name from v$datafile where file#=2;
NAME
--------------------------------------------------------------------------------
/oradata/devdb/undotbs01.dbf
从上面的可以判断是个undo文件,查看该undo tablespace发现这个文件是它的first file,表空间的第一个文件不可以删除替换。所以我再新建undo一个undotbs2,替换原来的undotbs1
create undo tablespace undotbs2 datafile '/backup/oradata/undotbs201.dbf' size 1g;
alter tablespace undotbs2 add datafile '/oradata/devdb/undotbs202.dbf' size 1g;
SQL> alter system set undo_tablespace=undotbs2;
System altered.
SQL> SELECT a.name,b.status
2 FROM v$rollname a,v$rollstat b
3 WHERE a.usn = b.usn
4 AND a.name IN (
5 SELECT segment_name
6 FROM dba_segments
7 WHERE tablespace_name = 'UNDOTBS1'
8 );
NAME STATUS
------------------------------ ---------------
_SYSSMU5$ PENDING OFFLINE
SQL> SELECT a.name,b.status , d.username , d.sid , d.serial#
2 FROM v$rollname a,v$rollstat b, v$transaction c , v$session d
3 WHERE a.usn = b.usn
4 AND a.usn = c.xidusn
5 AND c.ses_addr = d.saddr
6 AND a.name IN (
7 SELECT segment_name
8 FROM dba_segments
9 WHERE tablespace_name = 'UNDOTBS1'
10 );
NAME STATUS USERNA SID SERIAL#
---------- --------------- ------ ---------- ----------
no rows selected
发现untotbs1还有个回滚段在使用状态是PENDING OFFLINE,但与此关连的transaction已不存在,那就没法简单kill session/rollback transaction,接一来dump undo header查看一下此undo segment事件信息
SQL> alter system dump undo header '_SYSSMU5$';
System altered.
SQL> oradebug setmypid;
Statement processed.
SQL> oradebug tracefile_name;
/oracle/admin/devdb/udump/devdb_ora_24351.trc
[oracle@dev-db ~]$ vi /oracle/admin/devdb/udump/devdb_ora_24351.trc
/oracle/admin/devdb/udump/devdb_ora_24351.trc
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bit Production
With the Partitioning, OLAP and Data Mining options
ORACLE_HOME = /oracle/product/10.2.0
System name: Linux
Node name: dev-db
Release: 2.6.9-67.ELsmp
Version: #1 SMP Fri Nov 16 12:49:06 EST 2007
Machine: x86_64
Instance name: devdb
Redo thread mounted by this instance: 1
Oracle process number: 101
Unix process pid: 24351, image: oracle@dev-db (TNS V1-V3)
*** 2012-10-10 14:36:16.762
*** SERVICE NAME:(SYS$USERS) 2012-10-10 14:36:16.761
*** SESSION ID:(2034.4056) 2012-10-10 14:36:16.761
********************************************************************************
Undo Segment: _SYSSMU5$ (5)
********************************************************************************
Extent Control Header
-----------------------------------------------------------------
Extent Header:: spare1: 0 spare2: 0 #extents: 5 #blocks: 399
last map 0x00000000 #maps: 0 offset: 4080
Highwater:: 0x00800478 ext#: 2 blk#: 111 ext size: 128
#blocks in seg. hdr's freelists: 0
#blocks below: 0
mapblk 0x00000000 offset: 2
Unlocked
Map Header:: next 0x00000000 #extents: 5 obj#: 0 flag: 0x40000000
Extent Map
-----------------------------------------------------------------
0x0080004a length: 7
0x00800051 length: 8
0x00800409 length: 128
0x00800209 length: 128
0x00800309 length: 128
Retention Table
-----------------------------------------------------------
Extent Number:0 Commit Time: 1244535908
Extent Number:1 Commit Time: 1244529413
Extent Number:2 Commit Time: 0
Extent Number:3 Commit Time: 1244535908
Extent Number:4 Commit Time: 1244535908
TRN CTL:: seq: 0x0135 chd: 0x001e ctl: 0x0004 inc: 0x00000000 nfb: 0x0001
mgc: 0x8201 xts: 0x0068 flg: 0x0001 opt: 2147483646 (0x7ffffffe)
uba: 0x00800476.0135.12 scn: 0x0003.11a0950d
Version: 0x01
FREE BLOCK POOL::
uba: 0x00800478.0135.01 ext: 0x2 spc: 0x12dc
uba: 0x00000000.0135.0d ext: 0x2 spc: 0x17a8
uba: 0x00000000.0135.06 ext: 0x2 spc: 0xa96
uba: 0x00000000.0000.00 ext: 0x0 spc: 0x0
uba: 0x00000000.0000.00 ext: 0x0 spc: 0x0
TRN TBL::
index state cflags wrap# uel scn dba parent-xid nub stmt_num cmt
------------------------------------------------------------------------------------------------
0x00 9 0x00 0x0380 0x0020 0x0003.11a0a8a4 0x00800474 0x0000.000.00000000 0x00000002 0x00000000 1347443029
0x01 9 0x00 0x037e 0x0025 0x0003.11a09f15 0x00800472 0x0000.000.00000000 0x00000001 0x00000000 1347442905
0x02 9 0x00 0x037c 0x0012 0x0003.11a0a950 0x00800476 0x0000.000.00000000 0x00000001 0x00000000 1347443044
0x03 9 0x00 0x0381 0x0029 0x0003.11a095c6 0x0080046d 0x0000.000.00000000 0x00000001 0x00000000 1347442894
0x04 9 0x00 0x0381 0xffff 0x0003.11a0a959 0x00800478 0x0000.000.00000000 0x00000002 0x00000000 1347443044
0x00800051 length: 8
0x00800409 length: 128
0x00800209 length: 128
0x00800309 length: 128
Retention Table
-----------------------------------------------------------
Extent Number:0 Commit Time: 1244535908
Extent Number:1 Commit Time: 1244529413
Extent Number:2 Commit Time: 0
Extent Number:3 Commit Time: 1244535908
Extent Number:4 Commit Time: 1244535908
TRN CTL:: seq: 0x0135 chd: 0x001e ctl: 0x0004 inc: 0x00000000 nfb: 0x0001
mgc: 0x8201 xts: 0x0068 flg: 0x0001 opt: 2147483646 (0x7ffffffe)
uba: 0x00800476.0135.12 scn: 0x0003.11a0950d
Version: 0x01
FREE BLOCK POOL::
uba: 0x00800478.0135.01 ext: 0x2 spc: 0x12dc
uba: 0x00000000.0135.0d ext: 0x2 spc: 0x17a8
uba: 0x00000000.0135.06 ext: 0x2 spc: 0xa96
uba: 0x00000000.0000.00 ext: 0x0 spc: 0x0
uba: 0x00000000.0000.00 ext: 0x0 spc: 0x0
TRN TBL::
index state cflags wrap# uel scn dba parent-xid nub stmt_num cmt
------------------------------------------------------------------------------------------------
0x00 9 0x00 0x0380 0x0020 0x0003.11a0a8a4 0x00800474 0x0000.000.00000000 0x00000002 0x00000000 1347443029
0x01 9 0x00 0x037e 0x0025 0x0003.11a09f15 0x00800472 0x0000.000.00000000 0x00000001 0x00000000 1347442905
0x02 9 0x00 0x037c 0x0012 0x0003.11a0a950 0x00800476 0x0000.000.00000000 0x00000001 0x00000000 1347443044
...
0x08 9 0x00 0x037e 0x001d 0x0003.11a095ca 0x0080046e 0x0000.000.00000000 0x00000001 0x00000000 1347442894
0x09 9 0x00 0x0380 0x002f 0x0003.11a09512 0x0080046c 0x0000.000.00000000 0x00000001 0x00000000 1347442779
0x0a 9 0x00 0x0380 0x0003 0x0003.11a0954e 0x0080046d 0x0000.000.00000000 0x00000001 0x00000000 1347442794
0x0b 9 0x00 0x037e 0x001b 0x0003.11a0a90e 0x00800477 0x0000.000.00000000 0x00000001 0x00000000 1347443030
...
0x25 9 0x00 0x037e 0x0021 0x0003.11a09f1f 0x00800472 0x0000.000.00000000 0x00000001 0x00000000 1347442905
0x26 9 0x00 0x037e 0x002a 0x0003.11a09f41 0x00800472 0x0000.000.00000000 0x00000001 0x00000000 1347442919
0x27 9 0x00 0x037f 0x002b 0x0003.11a09543 0x0080046d 0x0000.000.00000000 0x00000001 0x00000000 1347442794
0x28 9 0x00 0x0380 0x0017 0x0003.11a0a920 0x00800477 0x0000.000.00000000 0x00000001 0x00000000 1347443035
0x29 9 0x00 0x037e 0x0008 0x0003.11a095c9 0x0080046e 0x0000.000.00000000 0x00000001 0x00000000 1347442894
0x2a 9 0x00 0x0380 0x0015 0x0003.11a09f47 0x00800472 0x0000.000.00000000 0x00000001 0x00000000 1347442919
0x2b 9 0x00 0x037f 0x000a 0x0003.11a0954c 0x0080046d 0x0000.000.00000000 0x00000001 0x00000000 1347442794
0x2c 9 0x00 0x037e 0x0014 0x0003.11a09eb8 0x0080046f 0x0000.000.00000000 0x00000001 0x00000000 1347442904
0x2d 2 0x97 0x0361 0x0003 0x0000.005f314e 0x00800422 0x0000.000.00000000 0x00000035 0x00800422 0
0x2e 9 0x00 0x037e 0x000b 0x0003.11a0a8fd 0x00800477 0x0000.000.00000000 0x00000001 0x00000000 1347443030
0x2f 9 0x00 0x037e 0x0024 0x0003.11a09537 0x0080046d 0x0000.000.00000000 0x00000001 0x00000000 1347442794
注意到倒数第三行有一个状态为2记录,state=9表示事务已结束,state=10表示没有commit或者rollback,states=2表示存在prepared的悬挂事务,那查询一下分布式事务
SQL> select local_tran_id,state,FAIL_TIME from dba_2pc_pending;
LOCAL_TRAN_ID STATE FAIL_TIME
---------------------- ---------------- -------------------
8.7.699 collecting 2009-06-02 17:40:11
5.45.865 prepared 2009-06-09 17:06:49
7.18.3979 collecting 2009-06-30 16:15:20
发现果然有3条记录,(注:之前有重启过实例并未自动清空),用rollback force 回滚prepared的事务,collecting的事务会报错
SQL> rollback force '8.7.699';
rollback force '8.7.699'
*
ERROR at line 1:
ORA-02058: no prepared transaction found with ID 8.7.699
SQL> rollback force '5.45.865';
Rollback complete.
SQL> rollback force '7.18.3979';
rollback force '7.18.3979'
*
ERROR at line 1:
ORA-02058: no prepared transaction found with ID 7.18.3979
SQL> select local_tran_id,state,FAIL_TIME from dba_2pc_pending;
LOCAL_TRAN_ID STATE FAIL_TIME
---------------------- ---------------- -------------------
8.7.699 collecting 2009-06-02 17:40:11
5.45.865 forced rollback 2009-06-09 17:06:49
7.18.3979 collecting 2009-06-30 16:15:20
对于no prepared transaction我直接用DBMS_TRANSACTION package把transaction删除
SQL> execute DBMS_TRANSACTION.PURGE_LOST_DB_ENTRY('8.7.699');
PL/SQL procedure successfully completed.
SQL> execute DBMS_TRANSACTION.PURGE_LOST_DB_ENTRY('7.18.3979');
BEGIN DBMS_TRANSACTION.PURGE_LOST_DB_ENTRY('7.18.3979'); END;
*
ERROR at line 1:
ORA-01453: SET TRANSACTION must be first statement of transaction
ORA-06512: at "SYS.DBMS_TRANSACTION", line 65
ORA-06512: at "SYS.DBMS_TRANSACTION", line 85
ORA-06512: at line 1
SQL> select local_tran_id,state,FAIL_TIME from dba_2pc_pending;
LOCAL_TRAN_ID STATE FAIL_TIME
---------------------- ---------------- -------------------
5.45.865 forced rollback 2009-06-09 17:06:49
7.18.3979 collecting 2009-06-30 16:15:20
遇ORA-01453我再次要进行一次提交
SQL> commit;
Commit complete.
SQL> execute DBMS_TRANSACTION.PURGE_LOST_DB_ENTRY('7.18.3979');
PL/SQL procedure successfully completed.
SQL> select local_tran_id,state,FAIL_TIME from dba_2pc_pending;
LOCAL_TRAN_ID STATE FAIL_TIME
---------------------- ---------------- -------------------
5.45.865 forced rollback 2009-06-09 17:06:49
SQL> SELECT a.name,b.status
2 FROM v$rollname a,v$rollstat b
3 WHERE a.usn = b.usn
4 AND a.name IN (
5 SELECT segment_name
6 FROM dba_segments
7 WHERE tablespace_name = 'UNDOTBS1'
8 );
no rows selected
发现undotbs1的回滚段都已offline,删除原来的undotbs1
SQL> drop tablespace undotbs1 including contents and datafiles;
Tablespace dropped.
SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
Database altered.
到这因数据库增加附加日志遭遇ora-600的问题已解决,原因在于undo中有挂起的事务。
对不起,这篇文章暂时关闭评论。