bbed修改undo段狀態

sjw1933發表於2022-10-09

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 處理過的回滾段


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23825935/viewspace-2917442/,如需轉載,請註明出處,否則將追究法律責任。

相關文章