这也某客户的数据库出现异常,非归档环境。Instance crash之后正常open,然而数据库很快就crash 掉。我们来简单分析一下:
上面的错误对于大家来讲或许并不陌生,ora-00600 [4194]是一个非常常见的错误。然而,细心的人或许注意到了,
这里有一点不同的是:[4194]后面的2位都是空的。
对于ora-00600 [4194] 错误,Oracle MOS文档有个标准的解释,如下:
简单的讲,就是Oracle SMON进程在进程事务rollback时,发现redo block中对应的undo record 编号和
undo block中的undo record 编号不一致,进而导致事务无法进行正常回滚,最后抛出这个错误。
我们来看下smon 进程的trace,里面提到了异常的事务信息:
UBA应该是:0x00c000e9.0x12bf.0x25,即:0x00c000e9.12bf.25,这里的XID为:xid: 0x0006.010.000033dd
说明是第对应的第16个事务槽(SLOT:0x10). record 编号为0x25。 opcode为5.7,标示Begin transaction (transaction table update)
那么我们定位到这个record(0x25),来看看undo block的实际dump是什么:
我们可以看到该事务(0x10)回滚到0x25就结束了,因为rci值为0,说明这里就是结束的位置。 大家注意看这里的opcode代码,layer为11,opc为1.
那么也就是说undo block这个record实际上的opcode为:11.1.
大家应该都知道11.1标示什么? 11.1 标示:Interpret Undo Record (Undo)。同时看下面的信息也可以知道这里应该是进行了update操作。(URP)。
因此,很明显redo和undo block(file 3 block 233)的信息是不一致的。
上面的信息不够完整,下面我将recover失败的block(file 3 block 233)的信息贴出来:
我们可以看到,最新的一个事务事务XID为:0x0006.002.000033d9。seq为seq: 0x12bf
整个undo block 一共包含cnt: 0x3b(即59)个undo record记录;其中 irb: 0x3b 标示最新的一个事务
如果进行rollback,那么第0x3b的事务将是rollback的起点。
那么一个事务进行rollback,到什么时候结束呢? 当对应的rci值为0时,即表示结束。
很明显,最新的事务的SLOT为0x002。而出问题的事务的slot是0x010(转换为10进制为16)。
当然,最后要处理这个case是比较容易的,通过屏蔽第6号回滚段即可,这里不在累述。
Sat Aug 02 09:49:51 2014
MMON started with pid=15, OS id=3852
starting up 1 dispatcher(s) for network address '(ADDRESS=(PARTIAL=YES)(PROTOCOL=TCP))'...
Sat Aug 02 09:49:51 2014
MMNL started with pid=16, OS id=3196
starting up 1 shared server(s) ...
ORACLE_BASE from environment = C:\Oracle11
Sat Aug 02 09:49:52 2014
ALTER DATABASE MOUNT
Sat Aug 02 09:49:55 2014
Sweep [inc][51985]: completed
Sweep [inc][51984]: completed
Sweep [inc][51983]: completed
Sweep [inc][51982]: completed
Sweep [inc][51981]: completed
Sweep [inc][51980]: completed
Sweep [inc][51979]: completed
Successful mount of redo thread 1, with mount id 4101312896
Database mounted in Exclusive Mode
Lost write protection disabled
Sweep [inc][51948]: completed
Completed: ALTER DATABASE MOUNT
Sat Aug 02 09:49:57 2014
ALTER DATABASE OPEN
Sweep [inc][51947]: completed
Beginning crash recovery of 1 threads
parallel recovery started with 3 processes
Started redo scan
Completed redo scan
read 126 KB redo, 85 data blocks need recovery
Started redo application at
Thread 1: logseq 19, block 3
Recovery of Online Redo Log: Thread 1 Group 1 Seq 19 Reading mem 0
Mem# 0: C:\ORACLE11\ORADATA\xxxx\REDO01.LOG
Completed redo application of 0.10MB
Completed crash recovery at
Thread 1: logseq 19, block 256, scn 18445043
85 data blocks read, 85 data blocks written, 126 redo k-bytes read
Sweep [inc][51852]: completed
Sweep [inc][51851]: completed
Sweep [inc][51835]: completed
Thread 1 advanced to log sequence 20 (thread open)
Sweep [inc][51747]: completed
Sweep [inc2][51980]: completed
Sweep [inc2][51979]: completed
Sweep [inc2][51948]: completed
Sweep [inc2][51947]: completed
Sweep [inc2][51852]: completed
Sweep [inc2][51851]: completed
Thread 1 opened at log sequence 20
Current log# 2 seq# 20 mem# 0: C:\ORACLE11\ORADATA\xxxx\REDO02.LOG
Successful open of redo thread 1
Sweep [inc2][51835]: completed
MTTR advisory is disabled because FAST_START_MTTR_TARGET is not set
SMON: enabling cache recovery
Successfully onlined Undo Tablespace 2.
Verifying file header compatibility for 11g tablespace encryption..
Verifying 11g file header compatibility for tablespace encryption completed
SMON: enabling tx recovery
Database Characterset is AL32UTF8
Errors in file c:\oracle11\diag\rdbms\xxxx\xxxx\trace\xxxx_smon_2036.trc (incident=53038):
ORA-00600: internal error code, arguments: [4194], [],
Incident details in: c:\oracle11\diag\rdbms\xxxx\xxxx\incident\incdir_53038\xxxx_smon_2036_i53038.trc
No Resource Manager plan active
Doing block recovery for file 3 block 233
Resuming block recovery (PMON) for file 3 block 233
Block recovery from logseq 20, block 52 to scn 18445244
Recovery of Online Redo Log: Thread 1 Group 2 Seq 20 Reading mem 0
Mem# 0: C:\ORACLE11\ORADATA\xxxx\REDO02.LOG
Block recovery completed at rba 20.62.16, scn 0.18445245
Doing block recovery for file 3 block 208
Resuming block recovery (PMON) for file 3 block 208
Block recovery from logseq 20, block 52 to scn 18445233
Recovery of Online Redo Log: Thread 1 Group 2 Seq 20 Reading mem 0
Mem# 0: C:\ORACLE11\ORADATA\xxxx\REDO02.LOG
Block recovery completed at rba 20.57.16, scn 0.18445235
Errors in file c:\oracle11\diag\rdbms\xxxx\xxxx\trace\xxxx_smon_2036.trc:
ORA-01595: error freeing extent (2) of rollback segment (6))
ORA-00600: internal error code, arguments: [4194], [],
Starting background process QMNC
Sat Aug 02 09:50:01 2014
QMNC started with pid=20, OS id=4036
Sat Aug 02 09:50:01 2014
Trace dumping is performing id=[cdmp_20140802095001]
Sat Aug 02 09:50:02 2014
Errors in file c:\oracle11\diag\rdbms\xxxx\xxxx\trace\xxxx_mmon_3852.trc (incident=53054):
ORA-00600: internal error code, arguments: [4194], [],
Incident details in: c:\oracle11\diag\rdbms\xxxx\xxxx\incident\incdir_53054\xxxx_mmon_3852_i53054.trc
Completed: ALTER DATABASE OPEN
Doing block recovery for file 3 block 2022
Resuming block recovery (PMON) for file 3 block 2022
Block recovery from logseq 20, block 62 to scn 18445254
Recovery of Online Redo Log: Thread 1 Group 2 Seq 20 Reading mem 0
Mem# 0: C:\ORACLE11\ORADATA\xxxx\REDO02.LOG
Block recovery stopped at EOT rba 20.66.16
Block recovery completed at rba 20.66.16, scn 0.18445253
Doing block recovery for file 3 block 272
Resuming block recovery (PMON) for file 3 block 272
Block recovery from logseq 20, block 62 to scn 18445246
Recovery of Online Redo Log: Thread 1 Group 2 Seq 20 Reading mem 0
Mem# 0: C:\ORACLE11\ORADATA\xxxx\REDO02.LOG
Block recovery completed at rba 20.62.16, scn 0.18445247
Trace dumping is performing id=[cdmp_20140802095004]
Errors in file c:\oracle11\diag\rdbms\xxxx\xxxx\trace\xxxx_mmon_3852.trc (incident=53055):
ORA-00600: internal error code, arguments: [4194], [],
Incident details in: c:\oracle11\diag\rdbms\xxxx\xxxx\incident\incdir_53055\xxxx_mmon_3852_i53055.trc
Doing block recovery for file 3 block 2022
Resuming block recovery (PMON) for file 3 block 2022
Block recovery from logseq 20, block 62 to scn 18445254
Recovery of Online Redo Log: Thread 1 Group 2 Seq 20 Reading mem 0
Mem# 0: C:\ORACLE11\ORADATA\xxxx\REDO02.LOG
Block recovery completed at rba 20.66.16, scn 0.18445255
Doing block recovery for file 3 block 272
Resuming block recovery (PMON) for file 3 block 272
Block recovery from logseq 20, block 62 to scn 18445262
Trace dumping is performing id=[cdmp_20140802095006]
Recovery of Online Redo Log: Thread 1 Group 2 Seq 20 Reading mem 0
Mem# 0: C:\ORACLE11\ORADATA\xxxx\REDO02.LOG
Block recovery completed at rba 20.74.16, scn 0.18445263
Errors in file c:\oracle11\diag\rdbms\xxxx\xxxx\trace\xxxx_mmon_3852.trc (incident=53056):
ORA-00600: internal error code, arguments: [kewrose_1], [600], [ORA-00600: internal error code, arguments: [4194], [], [], [], [], [], [], [], [], [], [], []
Incident details in: c:\oracle11\diag\rdbms\xxxx\xxxx\incident\incdir_53056\xxxx_mmon_3852_i53056.trc
Sat Aug 02 09:50:06 2014
Errors in file c:\oracle11\diag\rdbms\xxxx\xxxx\trace\xxxx_ora_560.trc (incident=53134):
ORA-00600: 鍐呴儴閿欒浠g爜, 鍙傛暟: [4194], [],
Incident details in: c:\oracle11\diag\rdbms\xxxx\xxxx\incident\incdir_53134\xxxx_ora_560_i53134.trc
Trace dumping is performing id=[cdmp_20140802095007]
Doing block recovery for file 3 block 233
Resuming block recovery (PMON) for file 3 block 233
Block recovery from logseq 20, block 52 to scn 18445244
Recovery of Online Redo Log: Thread 1 Group 2 Seq 20 Reading mem 0
Mem# 0: C:\ORACLE11\ORADATA\xxxx\REDO02.LOG
Block recovery completed at rba 20.62.16, scn 0.18445246
Errors in file c:\oracle11\diag\rdbms\xxxx\xxxx\trace\xxxx_ora_560.trc (incident=53135):
ORA-00600: 鍐呴儴閿欒浠g爜, 鍙傛暟: [4194], [],
Incident details in: c:\oracle11\diag\rdbms\xxxx\xxxx\incident\incdir_53135\xxxx_ora_560_i53135.trc
Trace dumping is performing id=[cdmp_20140802095008]
Doing block recovery for file 3 block 233
Errors in file c:\oracle11\diag\rdbms\xxxx\xxxx\trace\xxxx_ora_560.trc:
ORA-00600: 鍐呴儴閿欒浠g爜, 鍙傛暟: [4194], [],
ORA-00600: 鍐呴儴閿欒浠g爜, 鍙傛暟: [4194], [],
Resuming block recovery (PMON) for file 3 block 233
Block recovery from logseq 20, block 52 to scn 18445244
Recovery of Online Redo Log: Thread 1 Group 2 Seq 20 Reading mem 0
Mem# 0: C:\ORACLE11\ORADATA\xxxx\REDO02.LOG
Block recovery completed at rba 20.62.16, scn 0.18445246
Exception [type: ACCESS_VIOLATION, UNABLE_TO_READ] [ADDR:0x3D599566] [PC:0x6D81343, ___dyn_tls_init_callback()+110921500]
Sat Aug 02 09:50:10 2014
Errors in file c:\oracle11\diag\rdbms\xxxx\xxxx\cdump\xxxxcore.log
ORA-07445: caught exception [ACCESS_VIOLATION] at [___dyn_tls_init_callback()+110921500] [0x06D81343]
Sat Aug 02 09:50:10 2014
db_recovery_file_dest_size of 3072 MB is 0.00{39ecd679003247f2ed728ad9c7ed019a369dd84d0731b449c26bf628d3c1a20b} used. This is a
user-specified limit on the amount of space that will be used by this
database for recovery-related files, and does not reflect the amount of
space available in the underlying filesystem or ASM diskgroup.
Trace dumping is performing id=[cdmp_20140802095010]
Sat Aug 02 09:50:11 2014
Restarting dead background process MMON
Sat Aug 02 09:50:11 2014
MMON started with pid=15, OS id=1908
Sat Aug 02 09:50:11 2014
Errors in file c:\oracle11\diag\rdbms\xxxx\xxxx\trace\xxxx_ora_560.trc (incident=54138):
ORA-00603: ORACLE server session terminated by fatal error
ORA-00600: internal error code, arguments: [4194], [],
Incident details in: c:\oracle11\diag\rdbms\xxxx\xxxx\incident\incdir_54138\xxxx_ora_560_i54138.trc
Errors in file c:\oracle11\diag\rdbms\xxxx\xxxx\incident\incdir_54138\xxxx_ora_560_i54138.trc:
ORA-00603: ORACLE server session terminated by fatal error
ORA-00600: internal error code, arguments: [4194], [],
Sat Aug 02 09:50:13 2014
Doing block recovery for file 3 block 233
Resuming block recovery (PMON) for file 3 block 233
Block recovery from logseq 20, block 52 to scn 18445244
Recovery of Online Redo Log: Thread 1 Group 2 Seq 20 Reading mem 0
Mem# 0: C:\ORACLE11\ORADATA\xxxx\REDO02.LOG
Block recovery completed at rba 20.62.16, scn 0.18445246
Errors in file c:\oracle11\diag\rdbms\xxxx\xxxx\trace\xxxx_ora_3364.trc (incident=53158):
ORA-00600: 鍐呴儴閿欒浠g爜, 鍙傛暟: [4194], [], [
Doing block recovery for file 3 block 233
Resuming block recovery (PMON) for file 3 block 233
Block recovery from logseq 20, block 52 to scn 18445244
Recovery of Online Redo Log: Thread 1 Group 2 Seq 20 Reading mem 0
Mem# 0: C:\ORACLE11\ORADATA\xxxx\REDO02.LOG
Block recovery completed at rba 20.62.16, scn 0.18445246
Errors in file c:\oracle11\diag\rdbms\xxxx\xxxx\trace\xxxx_pmon_3452.trc (incident=52950):
ORA-00600: internal error code, arguments: [4194], [],
Errors in file c:\oracle11\diag\rdbms\xxxx\xxxx\trace\xxxx_pmon_3452.trc:
ORA-00600: internal error code, arguments: [4194], [],
PMON (ospid: 3452): terminating the instance due to error 472
Sat Aug 02 09:50:22 2014
Instance terminated by PMON, pid = 3452
Sat Aug 02 10:09:11 2014
Starting ORACLE instance (normal)
上面的错误对于大家来讲或许并不陌生,ora-00600 [4194]是一个非常常见的错误。然而,细心的人或许注意到了,
这里有一点不同的是:[4194]后面的2位都是空的。
对于ora-00600 [4194] 错误,Oracle MOS文档有个标准的解释,如下:
ERROR:
ORA-600 [4194] [a] [b]
VERSIONS:
versions 6.0 to 10.1
DESCRIPTION:
A mismatch has been detected between Redo records and rollback (Undo)
records.
We are validating the Undo record number relating to the change being
applied against the maximum undo record number recorded in the undo block.
This error is reported when the validation fails.
ARGUMENTS:
Arg [a] Maximum Undo record number in Undo block
Arg [b] Undo record number from Redo block
简单的讲,就是Oracle SMON进程在进程事务rollback时,发现redo block中对应的undo record 编号和
undo block中的undo record 编号不一致,进而导致事务无法进行正常回滚,最后抛出这个错误。
我们来看下smon 进程的trace,里面提到了异常的事务信息:
Symbol file C:\Oracle11\product\11.2.0\dbhome_1\BIN\orannzsbb11.SYM does not match binary.
Symbol TimeStamp=4b62bd94, Module TimeStamp=0 are different
EnumerateLoadedModules64 failed with error -1073741819
Symbol file orannzsbb11.SYM does not match binary.
Symbol TimeStamp=4b62bd94, Module TimeStamp=0 are different
Incident 49431 created, dump file: c:\oracle11\diag\rdbms\xxxx\xxxx\incident\incdir_49431\xxxx_smon_1900_i49431.trc
ORA-00600: internal error code, arguments: [4194], [],
Error 600 in redo application callback
Dump of change vector:
TYP:0 CLS:28 AFN:3 DBA:0x00c000e9 OBJ:4294967295 SCN:0x0000.011346a3 SEQ:20 OP:5.1 ENC:0 RBL:0
ktudb redo: siz: 80 spc: 3542 flg: 0x0010 seq: 0x12bf rec: 0x25
xid: 0x0006.010.000033dd
ktubl redo: slt: 16 rci: 0 opc: 5.7 [objn: 0 objd: 0 tsn: 0]
Undo type: Regular undo Begin trans Last buffer split: No
Temp Object: No
Tablespace Undo: No
0x00000000 prev ctl uba: 0x00c000e9.12bf.22
prev ctl max cmt scn: 0x0000.01134172 prev tx cmt scn: 0x0000.01134184
txn start scn: 0xffff.ffffffff logon user: 0 prev brb: 12583127 prev bcl: 0 BuExt idx: 0 flg2: 0
Block after image is corrupt:
buffer rdba: 0x00c000e9
scn: 0x0000.011346a3 seq: 0x14 flg: 0x04 tail: 0x46a30214
frmt: 0x02 chkval: 0x8596 type: 0x02=KTU UNDO BLOCK
Hex dump of block: st=0, typ_found=1
Dump of memory from 0x9F508000 to 0x9F50A000
。。。。。。。。。。。。
UBA应该是:0x00c000e9.0x12bf.0x25,即:0x00c000e9.12bf.25,这里的XID为:xid: 0x0006.010.000033dd
说明是第对应的第16个事务槽(SLOT:0x10). record 编号为0x25。 opcode为5.7,标示Begin transaction (transaction table update)
那么我们定位到这个record(0x25),来看看undo block的实际dump是什么:
*-----------------------------
* Rec #0x25 slt: 0x10 objn: 5834(0x000016ca) objd: 5834 tblspc: 0(0x00000000)
* Layer: 11 (Row) opc: 1 rci 0x00
Undo type: Regular undo Begin trans Last buffer split: No
Temp Object: No
Tablespace Undo: No
rdba: 0x00000000Ext idx: 0
flg2: 0
*-----------------------------
uba: 0x00c000e9.12bf.22 ctl max scn: 0x0000.01134172 prv tx scn: 0x0000.01134184
txn start scn: scn: 0x0000.01134685 logon user: 0
prev brb: 12583127 prev bcl: 0
KDO undo record:
KTB Redo
op: 0x04 ver: 0x01
compat bit: 4 (post-11) padding: 0
op: L itl: xid: 0x0008.001.000033ba uba: 0x00c0083a.0e7f.19
flg: C--- lkc: 0 scn: 0x0000.01133d89
KDO Op code: URP row dependencies Disabled
xtype: XA flags: 0x00000000 bdba: 0x00402d92 hdba: 0x00402d90
itli: 2 ispac: 0 maxfr: 4863
tabn: 0 slot: 6(0x6) flag: 0x2c lock: 0 ckix: 0
ncol: 54 nnew: 4 size: -4
col 42: [ 2] c1 02
col 44: [13] 78 72 07 1e 10 01 0a 01 31 2d 00 1c 3c
col 49: *NULL*
col 50: *NULL*
我们可以看到该事务(0x10)回滚到0x25就结束了,因为rci值为0,说明这里就是结束的位置。 大家注意看这里的opcode代码,layer为11,opc为1.
那么也就是说undo block这个record实际上的opcode为:11.1.
大家应该都知道11.1标示什么? 11.1 标示:Interpret Undo Record (Undo)。同时看下面的信息也可以知道这里应该是进行了update操作。(URP)。
因此,很明显redo和undo block(file 3 block 233)的信息是不一致的。
上面的信息不够完整,下面我将recover失败的block(file 3 block 233)的信息贴出来:
Block image after block recovery:
buffer tsn: 2 rdba: 0x00c000e9 (3/233)
scn: 0x0000.011346a3 seq: 0x14 flg: 0x04 tail: 0x46a30214
frmt: 0x02 chkval: 0x8596 type: 0x02=KTU UNDO BLOCK
Hex dump of block: st=0, typ_found=1
Dump of memory from 0x9F508000 to 0x9F50A000
9F508000 0000A202 00C000E9 011346A3 04140000 [.........F......]
9F508010 00008596 00020006 000033D9 3B3B12BF [.........3....;;]
。。。。。。。。
********************************************************************************
UNDO BLK:
xid: 0x0006.002.000033d9 seq: 0x12bf cnt: 0x3b irb: 0x3b icl: 0x0 flg: 0x0000
Rec Offset Rec Offset Rec Offset Rec Offset Rec Offset
---------------------------------------------------------------------------
0x01 0x1f3c 0x02 0x1ed0 0x03 0x1e24 0x04 0x1dbc 0x05 0x1d54
0x06 0x1cec 0x07 0x1c24 0x08 0x1b40 0x09 0x1adc 0x0a 0x1a88
0x0b 0x1a04 0x0c 0x19a4 0x0d 0x1954 0x0e 0x18ec 0x0f 0x186c
0x10 0x1800 0x11 0x1784 0x12 0x1700 0x13 0x1688 0x14 0x1624
0x15 0x15a0 0x16 0x1528 0x17 0x14c4 0x18 0x1440 0x19 0x13c8
0x1a 0x1364 0x1b 0x12cc 0x1c 0x1234 0x1d 0x117c 0x1e 0x112c
0x1f 0x1048 0x20 0x0fe4 0x21 0x0f90 0x22 0x0f0c 0x23 0x0e94
0x24 0x0e30 0x25 0x0d78 0x26 0x0d18 0x27 0x0cc8 0x28 0x0c44
0x29 0x0b30 0x2a 0x0ac0 0x2b 0x0a40 0x2c 0x09d8 0x2d 0x0978
0x2e 0x0928 0x2f 0x0878 0x30 0x07d0 0x31 0x0728 0x32 0x0678
0x33 0x05e0 0x34 0x0538 0x35 0x0488 0x36 0x03f0 0x37 0x0348
0x38 0x02d8 0x39 0x0244 0x3a 0x0134 0x3b 0x00d0
。。。。。。。。。
*-----------------------------
* Rec #0x25 slt: 0x10 objn: 5834(0x000016ca) objd: 5834 tblspc: 0(0x00000000)
* Layer: 11 (Row) opc: 1 rci 0x00
Undo type: Regular undo Begin trans Last buffer split: No
Temp Object: No
Tablespace Undo: No
rdba: 0x00000000Ext idx: 0
flg2: 0
*-----------------------------
uba: 0x00c000e9.12bf.22 ctl max scn: 0x0000.01134172 prv tx scn: 0x0000.01134184
txn start scn: scn: 0x0000.01134685 logon user: 0
prev brb: 12583127 prev bcl: 0
KDO undo record:
KTB Redo
op: 0x04 ver: 0x01
compat bit: 4 (post-11) padding: 0
op: L itl: xid: 0x0008.001.000033ba uba: 0x00c0083a.0e7f.19
flg: C--- lkc: 0 scn: 0x0000.01133d89
KDO Op code: URP row dependencies Disabled
xtype: XA flags: 0x00000000 bdba: 0x00402d92 hdba: 0x00402d90
itli: 2 ispac: 0 maxfr: 4863
tabn: 0 slot: 6(0x6) flag: 0x2c lock: 0 ckix: 0
ncol: 54 nnew: 4 size: -4
col 42: [ 2] c1 02
col 44: [13] 78 72 07 1e 10 01 0a 01 31 2d 00 1c 3c
col 49: *NULL*
col 50: *NULL*
*-----------------------------
* Rec #0x26 slt: 0x10 objn: 5839(0x000016cf) objd: 5839 tblspc: 0(0x00000000)
* Layer: 10 (Index) opc: 22 rci 0x25
Undo type: Regular undo Last buffer split: No
Temp Object: No
Tablespace Undo: No
rdba: 0x00000000
*-----------------------------
index undo for leaf key operations
KTB Redo
op: 0x04 ver: 0x01
compat bit: 4 (post-11) padding: 0
op: L itl: xid: 0x0003.010.000033c2 uba: 0x00c0095b.0fbd.23
flg: C--- lkc: 0 scn: 0x0000.01133d87
Dump kdilk : itl=4, kdxlkflg=0x1 sdc=0 indexid=0x402db8 block=0x00402db9
(kdxlre): restore leaf row (clear leaf delete flags)
key :(10): 02 c1 02 06 00 40 2d 92 00 06
。。。。。。
*-----------------------------
* Rec #0x27 slt: 0x10 objn: 5839(0x000016cf) objd: 5839 tblspc: 0(0x00000000)
* Layer: 10 (Index) opc: 22 rci 0x26
Undo type: Regular undo Last buffer split: No
Temp Object: No
Tablespace Undo: No
rdba: 0x00000000
*-----------------------------
index undo for leaf key operations
KTB Redo
op: 0x02 ver: 0x01
compat bit: 4 (post-11) padding: 0
op: C uba: 0x00c000e9.12bf.26
Dump kdilk : itl=4, kdxlkflg=0x1 sdc=0 indexid=0x402db8 block=0x00402db9
(kdxlpu): purge leaf row
key :(10): 02 c1 04 06 00 40 2d 92 00 06
。。。。。。。
* Rec #0x3b slt: 0x02 objn: 68192(0x00010a60) objd: 68192 tblspc: 1(0x00000001)
* Layer: 10 (Index) opc: 22 rci 0x3a
Undo type: Regular undo Last buffer split: No
Temp Object: No
Tablespace Undo: No
rdba: 0x00000000
*-----------------------------
index undo for leaf key operations
KTB Redo
op: 0x04 ver: 0x01
compat bit: 4 (post-11) padding: 0
op: L itl: xid: 0x0002.012.000033b2 uba: 0x00c0009a.0f08.33
flg: C--- lkc: 0 scn: 0x0000.0113469f
Dump kdilk : itl=2, kdxlkflg=0x1 sdc=0 indexid=0x807a32 block=0x00807a33
(kdxlre): restore leaf row (clear leaf delete flags)
key :(15): 07 78 72 07 1e 10 3b 11 06 00 80 75 ff 00 07
我们可以看到,最新的一个事务事务XID为:0x0006.002.000033d9。seq为seq: 0x12bf
整个undo block 一共包含cnt: 0x3b(即59)个undo record记录;其中 irb: 0x3b 标示最新的一个事务
如果进行rollback,那么第0x3b的事务将是rollback的起点。
那么一个事务进行rollback,到什么时候结束呢? 当对应的rci值为0时,即表示结束。
很明显,最新的事务的SLOT为0x002。而出问题的事务的slot是0x010(转换为10进制为16)。
当然,最后要处理这个case是比较容易的,通过屏蔽第6号回滚段即可,这里不在累述。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




