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;