9.Oracle BBED解析数据块——BBED基本案例一改变数据

欢迎转载,转载请标明出处:    http://blog.csdn.net/notbaron/article/details/50572039    

 Bbed可以修改打开的数据库的数据文件,不过建议关闭数据库进行修改。避免CHECKPIONT进程覆盖修改。也避免读取修改前的块。

         提醒:使用BBED修改数据库块的内存是不被ORACLE支持的。只是用于学习目的。如果用于生产系统,那么只能是最后的办法,一旦问题解决,所有数据要立即EXPORT,然后创建新的数据库。

         DBA需要记住,使用BBED可能导致内部的表例如OBJ$,UET$,FET$的内容不匹配。导致数据库的错误无法预测,也可能出现ORA-600错误。

执行查询如下:

tpcc@PDB1> select * from warehouse;

 

     W_ID   W_YTD        W_TAX W_NAME     W_STREET_1                 W_STREET_2

---------- ---------- ---------- ------------------------------ --------------------

W_CITY                  W_ W_ZIP

-------------------- -- ---------

          1   3000000            .13 xTOYek3P   BtQR1dHdLVZ1qoHHz        hu2QiBRTj0CU8bEMFHnQ

O5KwCMtRiEwNYzY      h1 764711111

通过ROWID来找到要修改的BLOCK,如下

tpcc@PDB1> select rowid from warehouse;

 

ROWID

------------------

AAAWnbAAOAAAAEUAAA

如下:

SQL>SELECT rowid,

      DBMS_ROWID.Rowid_object(ROWID) "OBJECT",

      DBMS_ROWID.Rowid_relative_fno(ROWID) "FILE",

      DBMS_ROWID.Rowid_block_number(ROWID) "BLOCK",

      DBMS_ROWID.Rowid_row_number(ROWID) "ROW"

      FROMwarehouse;

ROWID                     OBJECT          FILE     BLOCK      ROW

------------------ ---------- -------------------- ----------

AAAWnbAAOAAAAEUAAA       92635             14         276       0

然后修改FILE 14,BOCK 276,通过FIND命令来查找偏移,如下

BBED> find /c xTOYek3P

 File: /oradata/tpcctab1.dbf (14)

 Block: 276              Offsets: 8112 to 8143           Dba:0x03800114

------------------------------------------------------------------------

 78544f59 656b3350 11427451 52316448 644c565a31716f48 487a1468 75325169

 

 <32 bytes per line>

然后使用DUMP命令来验证找到的数据,然后准确定位数据偏移

如下:

BBED> dump /v dba 14,276 offset 8112 count 32

 File: /oradata/tpcctab1.dbf (14)

 Block: 276    Offsets: 8112 to 8143 Dba:0x03800114

-------------------------------------------------------

 78544f59 656b3350 11427451 52316448 lxTOYek3P.BtQR1dH

 644c565a 31716f48 487a1468 75325169 ldLVZ1qoHHz.hu2Qi

 

 <16 bytes per line>

然后使用modify进行修改如下:

BBED> modify /c 123wname dba 14,276 offset8112                                            

 File: /oradata/tpcctab1.dbf (14)

 Block: 276              Offsets: 8112 to 8143           Dba:0x03800114

------------------------------------------------------------------------

 31323377 6e616d65 11427451 52316448 644c565a31716f48 487a1468 75325169

 

 <32 bytes per line>

然后验证如下:

BBED> dump /v dba 14,276 offset 8112 count 32

 File: /oradata/tpcctab1.dbf (14)

 Block: 276    Offsets: 8112 to 8143 Dba:0x03800114

-------------------------------------------------------

 31323377 6e616d65 11427451 52316448 l 123wname.BtQR1dH

 644c565a 31716f48 487a1468 75325169 ldLVZ1qoHHz.hu2Qi

 

 <16 bytes per line>

此时数据库查找不能显示,还需要修改块的checksum,如下:

BBED>sum dba 14,276

Check value for File 14, Block 276:

current = 0x02fc, required = 0x759c

BBED> sum dba 14,276 apply

Check value for File 14, Block 276:

current = 0x759c, required = 0x759c

然后从数据库查询如下:

tpcc@PDB1> select * from warehouse;

 

     W_ID   W_YTD        W_TAX W_NAME     W_STREET_1                 W_STREET_2

---------- ---------- ---------- ------------------------------ --------------------

W_CITY                  W_ W_ZIP

-------------------- -- ---------

          1   3000000            .13 123wname   BtQR1dHdLVZ1qoHHz     hu2QiBRTj0CU8bEMFHnQ

O5KwCMtRiEwNYzY      h1 764711111

PS:如果没有生效,就需要清空缓存:altersystem flush buffer_cache;