Use BBED to restore the value before UPDATE

Source: Internet
Author: User

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

Related Article

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.