bbed修改undo段状态

来源:这里教程网 时间:2026-03-03 17:56:06 作者:

bbed 修改 undo$( 回滚段 ) 状态

指定 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 处理过的回滚段

相关推荐