联系:手机/微信(+86 17813235971) QQ(107644445)
作者:惜分飞©版权所有[未经本人同意,不得以任何形式转载,否则有进一步追究法律责任的权利.]
指定undo$对应数据块(11g 1_225,10g 1_106)[具体时候需要查询]
BBED> set file 1 block 225 FILE# 1 BLOCK# 225
查询数据内容,主要关注kdbr
BBED> map File: /u01/oracle/oradata/ora11g/system01.dbf (1) Block: 225 Dba:0x004000e1 ------------------------------------------------------------ KTB Data Block (Table/Cluster) struct kcbh, 20 bytes @0 struct ktbbh, 48 bytes @20 struct kdbh, 14 bytes @68 struct kdbt[1], 4 bytes @82 sb2 kdbr[31] @86 <===表示31条记录,从0开始 ub1 freespace[3644] @148 ub1 rowdata[4396] @3792 ub4 tailchk @8188
查看30号回滚段内容(列举其中一个)
BBED> p *kdbr[30] rowdata[0] ---------- ub1 rowdata[0] @3792 0x2c BBED> x /rncnnnnnnn rowdata[0] @3792 ---------- flag@3792: 0x2c (KDRHFL, KDRHFF, KDRHFH) lock@3793: 0x01 cols@3794: 17 col 0[2] @3795: 30 col 1[21] @3798: _SYSSMU30_3379578723$ col 2[2] @3820: 1 col 3[2] @3823: 3 col 4[3] @3826: 432 col 5[1] @3830: 0 col 6[1] @3832: 0 col 7[1] @3834: 0 col 8[1] @3836: 0 col 9[1] @3838: 0 col 10[2] @3840: 5 <===修改前对应值undo$.status$ col 11[2] @3843: 6 col 12[0] @3846: *NULL* col 13[0] @3847: *NULL* col 14[0] @3848: *NULL* col 15[0] @3849: *NULL* col 16[2] @3850: 2 BBED> x /r rowdata[0] @3792 ---------- flag@3792: 0x2c (KDRHFL, KDRHFF, KDRHFH) lock@3793: 0x01 cols@3794: 17 col 0[2] @3795: 0xc1 0x1f col 1[21] @3798: 0x5f 0x53 0x59 0x53 0x53 0x4d 0x55 0x33 0x30 0x5f 0x33 0x33 0x37 0x39 0x35 0x37 0x38 0x37 0x32 0x33 0x24 col 2[2] @3820: 0xc1 0x02 col 3[2] @3823: 0xc1 0x04 col 4[3] @3826: 0xc2 0x05 0x21 col 5[1] @3830: 0x80 col 6[1] @3832: 0x80 col 7[1] @3834: 0x80 col 8[1] @3836: 0x80 col 9[1] @3838: 0x80 col 10[2] @3840: 0xc1 0x06 <===修改前16进制值 col 11[2] @3843: 0xc1 0x07 col 12[0] @3846: *NULL* col 13[0] @3847: *NULL* col 14[0] @3848: *NULL* col 15[0] @3849: *NULL* col 16[2] @3850: 0xc1 0x03
修改回滚段状态
BBED> m /x 02 offset 3842 <===注意修改为02 Warning: contents of previous BIFILE will be lost. Proceed? (Y/N) y File: /u01/oracle/oradata/ora11g/system01.dbf (1) Block: 225 Offsets: 3842 to 4353 Dba:0x004000e1 ------------------------------------------------------------------------ 0202c107 ffffffff 02c1032c 001102c1 <32 bytes per line> BBED> p *kdbr[30] rowdata[0] ---------- ub1 rowdata[0] @3792 0x2c BBED> x /r rowdata[0] @3792 ---------- flag@3792: 0x2c (KDRHFL, KDRHFF, KDRHFH) lock@3793: 0x01 cols@3794: 17 col 0[2] @3795: 0xc1 0x1f col 1[21] @3798: 0x5f 0x53 0x59 0x53 0x53 0x4d 0x55 0x33 0x30 0x5f 0x33 0x33 0x37 0x39 0x35 0x37 0x38 0x37 0x32 0x33 0x24 col 2[2] @3820: 0xc1 0x02 col 3[2] @3823: 0xc1 0x04 col 4[3] @3826: 0xc2 0x05 0x21 col 5[1] @3830: 0x80 col 6[1] @3832: 0x80 col 7[1] @3834: 0x80 col 8[1] @3836: 0x80 col 9[1] @3838: 0x80 col 10[2] @3840: 0xc1 0x02 <===修改后16进制值 col 11[2] @3843: 0xc1 0x07 col 12[0] @3846: *NULL* col 13[0] @3847: *NULL* col 14[0] @3848: *NULL* col 15[0] @3849: *NULL* col 16[2] @3850: 0xc1 0x03 BBED> x /rncnnnnnnn rowdata[0] @3792 ---------- flag@3792: 0x2c (KDRHFL, KDRHFF, KDRHFH) lock@3793: 0x01 cols@3794: 17 col 0[2] @3795: 30 col 1[21] @3798: _SYSSMU30_3379578723$ col 2[2] @3820: 1 col 3[2] @3823: 3 col 4[3] @3826: 432 col 5[1] @3830: 0 col 6[1] @3832: 0 col 7[1] @3834: 0 col 8[1] @3836: 0 col 9[1] @3838: 0 col 10[2] @3840: 1 <===实际展示值undo$.status$ col 11[2] @3843: 6 col 12[0] @3846: *NULL* col 13[0] @3847: *NULL* col 14[0] @3848: *NULL* col 15[0] @3849: *NULL* col 16[2] @3850: 2
1.修改为02(表示的实际值比修改值大1[1:DELETE,2:OFFLINE, 3:ONLINE,4:UNDEFINED,5:NEEDS RECOVERY,6:PARTLY AVAILABLE,其他表示:UNDEFINED])
2.Offset需要在10列漂移量上+2(或者11列偏移量-1)
修改验证值
BBED> sum apply Check value for File 1, Block 225: current = 0x9708, required = 0x9708
补充说明
1)通过dbms_metadata.get_ddl分析DBA_ROLLBACK_SEGS可以知道seg$.status$表示含义
2, 'OFFLINE' 3, 'ONLINE', 4, 'UNDEFINED' 5, 'NEEDS RECOVERY', 6, 'PARTLY AVAILABLE' other, 'UNDEFINED'
2)该方法一般出现在使用隐含参数屏蔽回滚段无效之后使用,一般不到最后,不建议使用该方法,可能引起不可预知的后果
3)使用该方法启动数据库后,需要手工删除seg$中被bbed处理过的回滚段