解决Oracle在SYSTEM 回滚段中出现ORA-600 [4193] ORA-600 [4194]

如果自己搞不定可以找诗檀软件专业ORACLE数据库修复团队成员帮您恢复!

诗檀软件专业数据库修复团队

服务热线 : 13764045638 QQ号:47079569 邮箱:service@parnassusdata.com

 

 

1.适用范围

 

版本8.1.7.4到10.2.3[release 8.1.7 to 10.2]

 

2.目标

 

这个文档主要提供一个修补方案,当SYSTEM 回滚段出项ORA-600[4139]/ORA-600[4194],这个情况会阻止数据库开启。

支持当SYSTEM回滚段被影响时,让恢复的时间点在逻辑不一致之前。

ORA-600[4193]和ORA-[4104经常由新事务并且发生在undo的段头(TRN CTL / FREE BLOCK POOL的信息)和undo 段块中。如果这个情况发生在非SYSTEM的undo段上,可以直接删除这些回滚段。这是在涉及到SYSTEM回滚段时,一个手动处理的方法。

 

3.修复

 

在进行操作之前,首先进行备份

在SYSTEM 回滚段头中使用BBED 设置ktuxc.ktuxcnfb 和 ktuxc.ktuxcfbp[0..x].ktufbuba 为0。这样做的话,Oracle在新的事务的时候会使用空的块,不会对undo块头和undo块进行比较。

 

例如:

如下是一个回滚段头的dump

TRN CTL:: seq: 0x00af chd: 0x0036 ctl: 0x002a inc: 0x00000000 nfb: 0x0001

mgc: 0x8002 xts: 0x0068 flg: 0x0001 opt: 2147483646 (0x7ffffffe)

uba: 0x00400006.00af.0f scn: 0x07be.a0bae152

Version: 0x01

FREE BLOCK POOL::

uba: 0x00400006.00af.0f ext: 0x0 spc: 0x13b4

uba: 0x00000000.00a8.0d ext: 0x7 spc: 0x1a2c

uba: 0x00000000.009b.0b ext: 0x3 spc: 0x1c08

uba: 0x00000000.0092.27 ext: 0x3 spc: 0x12d0

uba: 0x00000000.0000.00 ext: 0x0 spc: 0x0

 

1.设置bbed合适的偏移量,修改 ktuxc.ktuxcnfb 为0X0000。在这个例子:0X0001

2.设置合适的偏移量,将所有非零的ktuxcfbp[0..x].ktufbuba设置为0X00000000.在这个例子中,只有ktuxc.ktuxcfbp[0].ktufbuba是非零的值0X00400006

 

3.在块已经被修改好后设置块的校验码为一个新的值,或者禁用块中的checksum。

 

部分块在修改后的dump如下:

The partial block dump after the modification is:

TRN CTL:: seq: 0x00af chd: 0x0036 ctl: 0x002a inc: 0x00000000 nfb: 0x0000

mgc: 0x8002 xts: 0x0068 flg: 0x0001 opt: 2147483646 (0x7ffffffe)

uba: 0x00400006.00af.0f scn: 0x07be.a0bae152

Version: 0x01

FREE BLOCK POOL::

uba: 0x00000000.00af.0f ext: 0x0 spc: 0x13b4

uba: 0x00000000.00a8.0d ext: 0x7 spc: 0x1a2c

uba: 0x00000000.009b.0b ext: 0x3 spc: 0x1c08

uba: 0x00000000.0092.27 ext: 0x3 spc: 0x12d0

uba: 0x00000000.0000.00 ext: 0x0 spc: 0x0

 

 

nfb=ktuxc.ktuxcnfb –在空块池中非空槽位的数目

ktuxc.ktuxcfbp=空闲块池条目

 

4.打开数据库并且收缩system 回滚段。这个只是为了从“擦伤”处释放段中空闲的extent:

alter rollback segment SYSTEM shrink;

Comment

*

沪ICP备14014813号-2

沪公网安备 31010802001379号