实战演练:如何用BBED恢复删除的数据

本文介绍了如何使用BBED工具在Oracle数据库中恢复已删除的数据。通过创建测试数据,dump header block,查找并修改被删除数据的行标头,最终验证数据恢复的过程。作者肖杰是Oracle技术顾问,具有丰富的数据库运维和故障处理经验。
摘要由CSDN通过智能技术生成

墨墨导读:本文来自墨天轮用户 肖杰 的投稿,介绍用BBED恢复删除数据的全过程。

墨天轮主页:https://www.modb.pro/u/6722

Oracle中delete行时,数据实际上并没有被删除。而是将行标记为已删除,并相应地调整空闲空间计数器和指针。行状态存储在每行的行标头中,该行标头占用每行的前几个字节。

行标头由行标记、锁字节(ITL条目)和列计数组成。第一个Row标志是一个单字节,它保存一个显示行状态的位掩码。位掩码解码如下

因此行标头=head of row picec + first data picec + last data picec = 44 => 0x2c

当数据被删除后,行标头+16即60=>0x3c
因此,当数据未被覆盖时,修改行标头0x3c为0x2c即可恢复。

测试:

1,创建测试数据
SQL> create table devin.test_delete(id number,name nvarchar2(10)) tablespace devin;

Table created.

SQL> insert into devin.test_delete values(1,'devin1');

1 row created.

SQL> insert into devin.test_delete values(2,'devin2');

1 row created.

SQL> insert into devin.test_delete values(3,'devin3');

1 row created.

SQL> commit;

Commit complete.

SQL> select * from devin.test_delete;

        ID NAME
---------- ----------------------------------------------------------------------
         1 devin1
         2 devin2
         3 devin3
		 
SQL> delete from devin.test_delete where id=3;

1 row deleted.

SQL> commit;

Commit complete.

SQL> select * from devin.test_delete;

        ID NAME
---------- ----------------------------------------------------------------------
         1 devin1
         2 devin2

SQL> col segment_Name for a15
SQL> select segment_name,tablespace_name,header_file,header_block from dba_segments where segment_name='TEST_DELETE';

SEGMENT_NAME    TABLESPACE_NAME                HEADER_FILE HEADER_BLOCK
--------------- ------------------------------ ----------- ------------
TEST_DELETE     DEVIN                                    9          138

可以看到表位于9号文件,段头块是138,先dump 138快,根据段头找到具体的数据存放的block。

2,dump header block
SQL> alter system dump datafile 9 block 138;


System altered.


*** 2021-02-05T11:00:07.663087+08:00
Start dump data blocks tsn: 9 file#:9 minblk 138 maxblk 138
Block dump from cache:
Dump of buffer cache at level 4 for pdb=0 tsn=9 rdba=37748874
BH (0x6ebdb498) file#: 9 rdba: 0x0240008a (9/138) class: 4 ba: 0x6e8da000
  set: 6 pool: 3 bsz: 8192 bsi: 0 sflg: 0 pwc: 0,0
  dbwrid: 0 obj: 75550 objn:
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值