使用bbed直接修改oracle数据文件恢复被delete掉的数据

今天简单写篇有关oracle BBED 与oracle 数据文件block 格式结合起来运用的文章。以更了解数据库的内部的某些东西。一条记录被delete


后,如何通过直接修改oracle 的数据文件,而直接将数据恢复的方法。当然不管表被delete 也好,drop 也好,teuncate也好,有很多的恢复

方法。在此只是研究其中的一种。以起到抛砖引玉的作用。(如转载请注明出处www.sosdb.com)

以下通过具体的试验来详细解释整个过程:

1.create tablespace sosdbcom datafile '/ora/sosdbcom.dbf' size 5M;

2.create table sosdb(sos01 varchar2(15),sos02 number(4)) tablespace sosdbcom;

3.insert into sosdb values('www.sosdb.com',86)

insert into sosdb select * from sosdb.com;

insert into sosdb select * from sosdb.com;

commit;

4.select * from sosdb;

SOS01 SOS02

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

www.sosdb.com 86

www.sosdb.com 86

www.sosdb.com 86

www.sosdb.com 86

现在我们删除一条,就选择第一条吧。

5。delete from sosdb where roenum<2;

commit;

现在看看

SQL> select * from sosdb;



SOS01 SOS02

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

www.sosdb.com 86

www.sosdb.com 86

www.sosdb.com 86

SQL>

好了,剩下的工作就如何通过修改oracle datafile 的block
,直接将被删除的这条记录恢复出来的工作了。

这里需要用到bbed ,至于bbed的使用方法见:


http://www.sosdb.com/jdul/dispbbs.asp?boardID=1&ID=237&page=1




写一个bbed 参数文件 par.bbd

blocksize=8192

listfile=a.txt

mode=edit



写一个a.txt

15 /ora/sosdbcom.dbf 5251072



打开bbed:

[oracle@mail ora]$./bbed parfile=par.bbd

dump file 14 block 10 count 8192

把这个block dump出来看看,会发现最后的一部份内容是:

00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

00000000 00000000 00000000 2c00020d 7777772e 736f7364 622e636f 6d02c157

2c00020d 7777772e 736f7364 622e636f 6d02c157 2c00020d 7777772e 736f7364

622e636f 6d02c157 3c02020d 7777772e 736f7364 622e636f 6d02c157 01064cd4



分析会发现每个row 的标志为 2c00,但一条为3c02 ,其实这个就是被删除的那条记录的标志。我们只

要把这个标志修改过来,然后再修改一下数据文件的某些标志就可以了。



修改方法如下:

bbed> modify /x 2c file 14 block 10 offset 8168

bbed> modify /x 00 file 14 block 10 offset 8169

修改完之后block的状态是corrupt的。用sum命令使之有效。

bbed> sum file 14 block 10 apply



现在重新启动oracle数据库并查询表sosdb:

SQL> conn / as sysdba

Connected to an idle instance.

SQL> startup

ORACLE instance started.



Total System Global Area 236000356 bytes

Fixed Size 451684 bytes

Variable Size 201326592 bytes

Database Buffers 33554432 bytes

Redo Buffers 667648 bytes

Database mounted.

Database opened.

SQL> select * from sosdb;



SOS01 SOS02

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

www.sosdb.com 86

www.sosdb.com 86

www.sosdb.com 86

www.sosdb.com 86



OK,到此,删除的记录恢复成功。



在这里只是讲个简单的例子,其实很多时候我们都可以采用此类的方法来做些其他的工作,尤其是恢复工作。

转载于:https://www.cnblogs.com/nclly/archive/2009/07/07/1518249.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值