Reprinted please indicate the source: http://blog.csdn.net/guoyjoe/article/details/30615151
The experiment process is as follows:
1. Create the table guo_test1
gyj@PROD> create table guoyJoe_t1(id int,name varchar2(10));Table created.gyj@PROD> insert into guoyJoe_t1 values(1,'guoyJoe');1 row created.gyj@PROD> insert into guoyJoe_t1 values(1,'tom');1 row created.gyj@PROD> COMMIT;Commit complete.
2. Find the DBA for this line of record
gyj@PROD> select name,dbms_rowid.rowid_relative_fno(rowid) file#,dbms_rowid.rowid_block_number(rowid) block#,dbms_rowid.rowid_row_number(rowid) row# from guoyJoe_t1;NAME FILE# BLOCK# ROW#---------- ---------- ---------- ----------guoyJoe 5 20877 0tom 5 20877 1
3. Data Cache refreshing
gyj@PROD> alter system flush buffer_cache;System altered.
4. Use BBED to find the record (the value before modification: guoyJoe)
BBED> BBED> set file 5 block 20877 FILE# 5 BLOCK# 20877
-- Observe the line Header
BBED> p kdbr
Sb2 kdbr [0] @ 118 8074
Sb2 kdbr [1] @ 120 8064
BBED> p * kdbr [0]
Rowdata [10]
-----------
Ub1 rowdata [10] @ 8174 0x2c
-- Observe transactions
BBBED> x/rnc
Rowdata [10] @ 8174
-----------
Flag @ 8174: 0x2c (KDRHFL, KDRHFF, KDRHFH)
Lock @ 8175: 0x01
Cols @ 8176: 2
Col 0 [2] @ 8177: 1
Col 1 [7] @ 8180: guoyJoe
--- Observation space
BBED> p kdbhavsp
Sb2 kdbhavsp @ 110 8042
BBED> p kdbhtosp
Sb2 kdbhtosp @ 112 8042
5. When an UPDATE statement occurs, change the original value guoyJoe to oracledba.
gyj@PROD> update guoyJoe_t1 set name='oracledba' where name='guoyJoe';1 row updated.gyj@PROD> commit;Commit complete
6. Data Cache refreshing
gyj@PROD> alter system flush buffer_cache;System altered.
7. Use BBED to find the modified record (the modified value is oracledba)
BBED> set file 5 block 20877 FILE# 5 BLOCK# 20877
-- Observe the line Header
BBED> p kdbr
Sb2 kdbr [0] @ 118 8048
Sb2 kdbr [1] @ 120 8064
BBED> p * kdbr [0]
Rowdata [0]
----------
Ub1 rowdata [0] @ 8148 0x2c
-- Observe transactions
BBED> x/rnc
Rowdata [0] @ 8148
----------
Flag @ 8148: 0x2c (KDRHFL, KDRHFF, KDRHFH)
Lock @ 8149: 0x01
Cols @ 8150: 2
Col 0 [2] @ 8151: 1
Col 1 [9] @ 8154: oracledba
--- Observation space
BBED> p kdbhavsp
Sb2 kdbhavsp @ 110 8040
BBED> p kdbhtosp
Sb2 kdbhtosp @ 112 8040
8. Compare the data before and after modification
BBED> d /v offset 8174 count 16 File: /u01/app/oracle/oradata/PROD/tp01.dbf (5) Block: 20877 Offsets: 8174 to 8189 Dba:0x0140518d------------------------------------------------------- 2c000202 c1020767 756f794a 6f650106 l ,...á..guoyJoe..BBED> d /v offset 8148 count 16 File: /u01/app/oracle/oradata/PROD/tp01.dbf (5) Block: 20877 Offsets: 8148 to 8163 Dba:0x0140518d------------------------------------------------------- 2c010202 c102096f 7261636c 65646261 l ,...á..oracledba
9. Start recovery
(1) modify the row directory pointer position (@ 118)
-- Before modification
BBED> p kdbr
Sb2 kdbr [0] @ 118 8074
-- After modification
BBED> p kdbr
Sb2 kdbr [0] @ 118 8048
Gyj @ PROD> select to_char ('000000', 'xxxxxxxxxxxxxxxxxx') from dual;
TO_CHAR ('20140901 ',
---------------
1f8a
Gyj @ PROD> select to_char ('000000', 'xxxxxxxxxxxxxxxxxx') from dual;
TO_CHAR ('20140901 ',
---------------
1f70
BBED> d/v offset 118 count 16
File:/u01/app/oracle/oradata/PROD/tp01.dbf (5)
Block: 20877 Offsets: 118 to 133 Dba: 0x0140518d
-------------------------------------------------------
701f801f 00000000 00000000 00000000 l p ...............
BBED> modify/x 8a offset 118
Warning: contents of previous BIFILE will be lost. Proceed? (Y/N) Y
File:/u01/app/oracle/oradata/PROD/tp01.dbf (5)
Block: 20877 Offsets: 118 to 133 Dba: 0x0140518d
------------------------------------------------------------------------
8a1f801f 00000000 00000000 00000000
<32 bytes per line>
BBED> sum apply
Check value for File 5, Block 20877:
Current = 0x8a00, required = 0x8a00
BBED> verify
DBVERIFY-Verification starting
FILE =/u01/app/oracle/oradata/PROD/tp01.dbf
BLOCK = 1, 20877
Block Checking: DBA = 20992397, Block Type = KTB-managed data block
Data header at 0x7f76ff66e264
Kdbchk: xaction header lock count mismatch ---- transaction lock Error
Trans = 1 ilk = 1 nlo = 0
Block 20877 failed with check code 6108
DBVERIFY-Verification complete
Total Blocks Examined: 1
Total Blocks Processed (Data): 1
Total Blocks Failing (Data): 1
Total Blocks Processed (Index): 0
Total Blocks Failing (Index): 0
Total Blocks Empty: 0
Total Blocks Marked Blocks upt: 0
Total Blocks Influx: 0
Message 531 not found; product = RDBMS; facility = BBED
(2) Next, modify the transaction lock.
--- Change the transaction lock mark of the pre-update value from 00 to 01
BBBED> x/rnc
Rowdata [10] @ 8174
-----------
Flag @ 8174: 0x2c (KDRHFL, KDRHFF, KDRHFH)
Lock @ 8175: 0x01
Cols @ 8176: 2
BBED> d/v offset 8175 count 16
File:/u01/app/oracle/oradata/PROD/tp01.dbf (5)
Block: 20877 Offsets: 8175 to 8190 Dba: 0x0140518d
-------------------------------------------------------
000202c1 02076775 6f794a6f limit 1066f l ...... guoyJoe .. o
BBED> modify/x 01 offset 8175
File:/u01/app/oracle/oradata/PROD/tp01.dbf (5)
Block: 20861 Offsets: 8175 to 8190 Dba: 0x0140517d
------------------------------------------------------------------------
010202c1 02076775 6f794a6f effecteded
-- Change the updated transaction lock ID 01 to 00.
BBED> x/rnc
Rowdata [0] @ 8148
----------
Flag @ 8148: 0x2c (KDRHFL, KDRHFF, KDRHFH)
Lock @ 8149: 0x01
Cols @ 8150: 2
BBED> d/v offset 8149 count 16
File:/u01/app/oracle/oradata/PROD/tp01.dbf (5)
Block: 20877 Offsets: 8149 to 8164 Dba: 0x0140518d
-------------------------------------------------------
010202c1 02096f72 61636c65 6462612c l ...... oracledba,
Bb> modify/x 00 offset 8149
File:/u01/app/oracle/oradata/PROD/tp01.dbf (5)
Block: 20861 Offsets: 8159 to 8174 Dba: 0x0140517d
------------------------------------------------------------------------
000202c1 02096f72 61636c65 6462612c
BBED> sum apply
Check value for File 5, Block 20877:
Current = 0x8a00, required = 0x8a00
BBED> verify
DBVERIFY-Verification starting
FILE =/u01/app/oracle/oradata/PROD/tp01.dbf
BLOCK = 1, 20877
Block Checking: DBA = 20992397, Block Type = KTB-managed data block
Data header at 0x7cb464
Kdbchk: the amount of space used is not equal to block size
Used = 46 fsc = 0 avsp = 8040 dtl = 8088
--- Prompt that the data block space usage is incorrect (dtl-used = kdbhavsp = kdbhtosp)
8088-46 = 8042 associated with avsp = 8040 2, that is, I want to restore to 8042
(3) modify the space to 6a1f, with dtl-used = kdbhavsp as the main
Gyj @ PROD> select to_char ('000000', 'xxxxxxxxxxxxxxxxxx') from dual;
TO_CHAR ('20140901 ',
---------------
1f6a
BBED & gt; modify/x 6a1f offset 110
File:/u01/app/oracle/oradata/PROD/tp01.dbf (5)
Block: 20877 Offsets: 110 to 125 Dba: 0x0140518d
------------------------------------------------------------------------
6a1f681f 00000200 8a1f801f 00000000
<32 bytes per line>
BBED & gt; modify/x 6a1f offset 112
File:/u01/app/oracle/oradata/PROD/tp01.dbf (5)
Block: 20877 Offsets: 112 to 127 Dba: 0x0140518d
------------------------------------------------------------------------
6a1f0000 02008a1f 801f0000 00000000
<32 bytes per line>
BBED> sum apply
Check value for File 5, Block 20877:
Current = 0x8a00, required = 0x8a00
BBED> verify
DBVERIFY-Verification starting
FILE =/u01/app/oracle/oradata/PROD/tp01.dbf
BLOCK = 1, 20877
DBVERIFY-Verification complete
Total Blocks Examined: 1
Total Blocks Processed (Data): 1
Total Blocks Failing (Data): 0
Total Blocks Processed (Index): 0
Total Blocks Failing (Index): 0
Total Blocks Empty: 0
Total Blocks Marked Blocks upt: 0
Total Blocks Influx: 0
Message 531 not found; product = RDBMS; facility = BBED
10. Successful recovery (oracledba ---> guoyJoe)
gyj@PROD> alter system flush buffer_cache;System altered.gyj@PROD> select name,dbms_rowid.rowid_relative_fno(rowid) file#,dbms_rowid.rowid_block_number(rowid) block#,dbms_rowid.rowid_row_number(rowid) row# from guoyJoe_t1 where id=1;NAME FILE# BLOCK# ROW#---------- ---------- ---------- ----------guoyJoe 5 20877 0tom 5 20877 1
In fact, it is not difficult to use BBED to restore the value before UPDATE, mainly to understand the internal principle and block format
Summary:
(1) modify the row Header
(2) Modifying transactions
(3) modify a space