Oracle特殊恢复原理与实战_10 恢复ora-600[4193][4194]的错误
恢复ora-600[4193]的错误
ora-600[4193]解析
ORA-600[41XX] 这种错误基本都于UNDO有关系
ora-600[4193]:表示undo和redo不一致(Arg [a] Undo record seq number,Arg [b] Redo record seq number )
数据库在启动时需要进行一个前滚的操作,在前滚时会应用redo 到undo block上,操作时会检查undo record里的seq#和redo record里的seq#。正常情况下,这2者的seq# 应该是一致的,在一致的情况下,我们才应用redo record 到undo record。如果不一致就会出现ORA-600[4193][a][b]的错误。其中a是undo里的seq#记录,b是redo里的seq#值。 这里的值都是十六进程,可以通过to_number() 函数来转换。
人为构造ORA-600[4193]错误
SQL> select header_file,header_block from dba_segments where segment_name='SYSTEM';
HEADER_FILE HEADER_BLOCK
----------- ------------
1 128
SQL> alter system dump datafile 1 block 128;
System altered.
SQL> oradebug setmypid
Statement processed.
SQL> oradebug tracefile_name
/u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_ora_7485.trc
# 查看trace
#------------------------------------------------------------------------------------------------
-----------------------------------------------------------------
Extent Header:: spare1: 0 spare2: 0 #extents: 6 #blocks: 47
last map 0x00000000 #maps: 0 offset: 4128
Highwater:: 0x00400212 ext#: 2 blk#: 2 ext size: 8
#blocks in seg. hdr's freelists: 0
#blocks below: 0
mapblk 0x00000000 offset: 2
Unlocked
Map Header:: next 0x00000000 #extents: 6 obj#: 0 flag: 0x40000000
Extent Map
-----------------------------------------------------------------
0x00400081 length: 7
0x00400088 length: 8
0x00400210 length: 8
0x00400218 length: 8
0x00400220 length: 8
0x00400228 length: 8
TRN CTL:: seq: 0x001a chd: 0x0002 ctl: 0x0003 inc: 0x00000000 nfb: 0x0001
mgc: 0x8002 xts: 0x0068 flg: 0x0001 opt: 2147483646 (0x7ffffffe)
uba: 0x00400212.001a.07 scn: 0x0000.0012926d # uba: 0x00400212.001a.07
Version: 0x01
FREE BLOCK POOL:: # 可用的UNDO块
uba: 0x00400212.001a.08 ext: 0x2 spc: 0x18be
uba: 0x00000000.0019.21 ext: 0x1 spc: 0x11c4
uba: 0x00000000.0018.02 ext: 0x0 spc: 0x1e62
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
------------------------------------------------------------------------------------------------
0x00 9 0x00 0x0013 0x004a 0x0000.00129275 0x0040008e 0x0000.000.00000000 0x00000001 0x00000000
0x01 9 0x00 0x0013 0x000a 0x0000.00129279 0x0040008e 0x0000.000.00000000 0x00000001 0x00000000
0x02 9 0x00 0x0013 0x0007 0x0000.0012926f 0x0040008d 0x0000.000.00000000 0x00000001 0x00000000
.....
#------------------------------------------------------------------------------------------------
# BBED
bbed
BBED> set file 1 block 128
FILE# 1
BLOCK# 128
BBED> p ktuxc
struct ktuxc, 104 bytes @4148
struct ktuxcscn, 8 bytes @4148
ub4 kscnbas @4148 0x0012926d
ub2 kscnwrp @4152 0x0000
struct ktuxcuba, 8 bytes @4156
ub4 kubadba @4156 0x00400212
ub2 kubaseq @4160 0x001a
ub1 kubarec @4162 0x07 # uba: 0x00400212.001a.07 跟上面的dump对应
sb2 ktuxcflg @4164 1 (KTUXCFSK)
ub2 ktuxcseq @4166 0x001a
sb2 ktuxcnfb @4168 1
ub4 ktuxcinc @4172 0x00000000
sb2 ktuxcchd @4176 2
sb2 ktuxcctl @4178 3
ub2 ktuxcmgc @4180 0x8002
ub4 ktuxcopt @4188 0x7ffffffe
struct ktuxcfbp[0], 12 bytes @4192
struct ktufbuba, 8 bytes @4192
ub4 kubadba @4192 0x00400212
ub2 kubaseq @4196 0x001a # undo空闲块的sequence
ub1 kubarec @4198 |
