利用BBED恢复UPDATE修改前的值
实验过程如下:
1、创建表guo_test1
[email protected]> create table guoyJoe_t1(id int,name varchar2(10)); Table created. [email protected]> insert into guoyJoe_t1 values(1,'guoyJoe'); 1 row created. [email protected]> insert into guoyJoe_t1 values(1,'tom'); 1 row created. [email protected]> COMMIT; Commit complete.
2、查出这行记录的DBA
(福利推荐:阿里云、腾讯云、华为云服务器最新限时优惠活动,云服务器1核2G仅88元/年、2核4G仅698元/3年,点击这里立即抢购>>>)
[email protected]> 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 0 tom 5 20877 1 ————————————————
3、刷数据缓存
[email protected]> alter system flush buffer_cache; System altered.
4、利用BBED找到这行记录(修改前的值:guoyJoe)
BBED> BBED> set file 5 block 20877 FILE# 5 BLOCK# 20877
–观察行头
BBED> p kdbr
sb2 kdbr[0] @118 8074
sb2 kdbr[1] @120 8064
BBED> p *kdbr[0]
rowdata[10]
ub1 rowdata[10] @8174 0x2c
–观察事务
BBBED> x /rnc
rowdata[10] @8174
[email protected]: 0x2c (KDRHFL, KDRHFF, KDRHFH)
[email protected]: 0x01
[email protected]: 2
col 0[2] @8177: 1
col 1[7] @8180: guoyJoe
—观察空间
BBED> p kdbhavsp
sb2 kdbhavsp @110 8042
BBED> p kdbhtosp
sb2 kdbhtosp @112 8042
5、发生UPDATE语句,把原来的值guoyJoe修改成oracledba
[email protected]> update guoyJoe_t1 set name='oracledba' where name='guoyJoe'; 1 row updated. [email protected]> commit; Commit complete
6、刷数据缓存
[email protected]> alter system flush buffer_cache; System altered.
7、利用BBED找到这行被修改后的记录(修改后的值上:oracledba)
BBED> set file 5 block 20877 FILE# 5 BLOCK# 20877
–观察行头
BBED> p kdbr
sb2 kdbr[0] @118 8048
sb2 kdbr[1] @120 8064
BBED> p *kdbr[0]
rowdata[0]
ub1 rowdata[0] @8148 0x2c
–观察事务
BBED> x /rnc
rowdata[0] @8148
[email protected]: 0x2c (KDRHFL, KDRHFF, KDRHFH)
[email protected]: 0x01
[email protected]: 2
col 0[2] @8151: 1
col 1[9] @8154: oracledba
—观察空间
BBED> p kdbhavsp
sb2 kdbhavsp @110 8040
BBED> p kdbhtosp
sb2 kdbhtosp @112 8040
8、对比修改前与修改后的数据
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、开始恢复 (1)修改row directory指针位置(@118) --修改前
BBED> p kdbr
sb2 kdbr[0]
@118 8074 --修改后 @118 8048
BBED> p kdbr
sb2 kdbr[0]
g
[email protected]> select to_char(‘8074′,’xxxxxxxxxxxxxx’) from dual;
TO_CHAR(‘8074’,
1f8a
[email protected]> select to_char(‘8048′,’xxxxxxxxxxxxxx’) from dual;
TO_CHAR(‘8048’,
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 = 20877
Block Checking: DBA = 20992397, Block Type = KTB-managed data block
data header at 0x7f76ff66e264
kdbchk: xaction header lock count mismatch —-事务锁报错
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 Corrupt : 0
Total Blocks Influx : 0
Message 531 not found; product=RDBMS; facility=BBED
2)接下来修改事务锁 ---把更新前值的事务锁标记从00改为01
BBBED> x /rnc
rowdata[10] @8174
[email protected]: 0x2c (KDRHFL, KDRHFF, KDRHFH)
[email protected]: 0x01
[email protected]: 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 6501066f 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 650106ed
--把更新后值的事务锁标识01改为00
BBED> x /rnc
rowdata[0] @8148
[email protected]: 0x2c (KDRHFL, KDRHFF, KDRHFH)
[email protected]: 0x01
[email protected]: 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,
BBED> 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 = 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
---提示数据块的空间使用不正确(dtl-used=kdbhavsp=kdbhtosp) 8088-46=8042 与 avsp=8040相关2,也就是说我要恢复到8042 (3)修改空间,把空间修改为6a1f,以dtl-used=kdbhavsp为主
[email protected]> select to_char(‘8042′,’xxxxxxxxxxxxxx’) from dual;
TO_CHAR('8042', --------------- 1f6a
BBED> 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> 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 = 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 Corrupt : 0
Total Blocks Influx : 0
Message 531 not found; product=RDBMS; facility=BBED
10、恢复成功(oracledba--->guoyJoe)
[email protected]> alter system flush buffer_cache;
System altered.
[email protected]> 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 0
tom 5 20877 1
实际上用BBED恢复UPDATE前的值不难,主要是要了解内部原理和块格式 总结如下: (1)修改行头 (2)修改事务
你还在原价购买阿里云、腾讯云、华为云、天翼云产品?那就亏大啦!现在申请成为四大品牌云厂商VIP用户,可以3折优惠价购买云服务器等云产品,并且可享四大云服务商产品终身VIP优惠价,还等什么?赶紧点击下面对应链接免费申请VIP客户吧:
相关文章
- oracle学习笔记(十六) PL/SQL 异常和goto语句
- Linux云主机安全入侵排查步骤
- PHP官方框架 Zend Framework 2.1 发布
- PHP 5.4 内置Web服务器使用说明
- 一个小巧的PHP防注入类
- PHPCMS后台入口地址隐藏方法
- 在Linux中将目录压缩打包为zip文件 并通过ftp上传的Shell脚本
- 用PHP解析XML为数组的方法
- 一段经典的抽奖算法 for PHP版
- 在Linux中用Shell脚本完成SVN版本库的建立
- PHPCMS V9无法正常通过QQ登录的解决方案
- 解决Nginx环境下PHP的flush失效问题
- 用SS5在Linux上搭建Socks5 Proxy代理服务器
- Linux中编译安装Redis和PHP扩展
- 通过iptables规则让Linux主机屏蔽Ping
- 在Linux中部署FFmpeg开源视频压缩环境过程简单笔记
- 采用单例模式编写PHP的PDO类
- Linux下管理Memcached的Service脚本
- 开源消息队列MemcacheQ在Linux中编译安装教程
- Linux下部署Memcached和PHP的Memcache扩展方法