设为首页 加入收藏

TOP

【Oracle】使用bbed恢复delete的数据
2015-07-24 10:02:15 来源: 作者: 【 】 浏览:0
Tags:Oracle 使用 bbed 恢复 delete 数据

表中的数据被delete之后并不会真正删除数据,而是打了一个删除标记,只要还没有被覆盖就可以恢复回来。

实验过程如下:

SYS@ORCL>create table bbed_test(x varchar2(20));

Table created.

SYS@ORCL>insert into bbed_test values('BADLY9');

1 row created.

SYS@ORCL>insert into bbed_test values('JP');

1 row created.

SYS@ORCL>commit;

Commit complete.

SYS@ORCL>select rowid, dbms_rowid.rowid_relative_fno(rowid)rel_fno,

2 dbms_rowid.rowid_block_number(rowid)blockno,

3 dbms_rowid.rowid_row_number(rowid) rowno

4 from bbed_test;

ROWID REL_FNO BLOCKNO ROWNO

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

AAAM0VAABAAAOuCAAA 1 60290 0

AAAM0VAABAAAOuCAAB 1 60290 1

SYS@ORCL>alter system flush buffer_cache;

System altered.

SYS@ORCL>alter system dump datafile 1 block 60290;

System altered.

SYS@ORCL>oradebug setmypid

Statement processed.

SYS@ORCL>oradebug tracefile_name

/u01/app/oracle/admin/ORCL/udump/orcl_ora_18509.trc

查看dump文件

block_row_dump:

tab 0, row 0, @0x1f96

tl: 10 fb: --H-FL-- lb: 0x1 cc: 1

col 0: [ 6] 42 41 44 4c 59 39

tab 0, row 1, @0x1f90

tl: 6 fb: --H-FL-- lb: 0x1 cc: 1

col 0: [ 2] 4a 50

end_of_block_dump

红色标记的位置记录了该行数据的状态:

没有被删除的话是--H-FL--,其对应的值为0x2c

已经被删除的话是--HDFL--,其对应的值为0x3c

下面我们删除一行数据来看一下:

SYS@ORCL>delete bbed_test where x='BADLY9';

1 row deleted.

SYS@ORCL>commit;

Commit complete.

SYS@ORCL>select * from bbed_test;

X

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

JP

SYS@ORCL> alter system flush buffer_cache;

System altered.

SYS@ORCL>alter system dump datafile 1 block 60290;

System altered.

查看dump文件

block_row_dump:

tab 0, row 0, @0x1f96

tl: 2 fb: --HDFL-- lb: 0x2

tab 0, row 1, @0x1f90

tl: 6 fb: --H-FL-- lb: 0x0 cc: 1

col 0: [ 2] 4a 50

end_of_block_dump

可以看到此时row 0的数据已经被标记为删除。

下面使用bbed工具将该条数据恢复回来:

BBED> set dba 1,60290

DBA 0x0040eb82 (4254594 1,60290)

BBED> f /c BADLY9

File: /u01/app/oracle/oradata/ORCL/system01.dbf (1)

Block: 60290 Offsets: 8182 to 8191 Dba:0x0040eb82

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

4241444c 59390206 1e62

<32 bytes per line>

BBED> p *kdbr

rowdata[6]

----------

ub1 rowdata[6] @8178 0x3c

BBED> set offset 8178

OFFSET 8178

BBED> m /x 2c

File: /u01/app/oracle/oradata/ORCL/system01.dbf (1)

Block: 60290 Offsets: 8178 to 8191 Dba:0x0040eb82

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

2c020106 4241444c 59390206 1e62

<32 bytes per line>

BBED> sum apply

Check value for File 1, Block 60290:

current = 0xc7d4, required = 0xc7d4

现在去库里查看一下

SYS@ORCL>alter system flush buffer_cache;

System altered.

SYS@ORCL>select * from bbed_test;

X

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

BADLY9

JP

可以看到被delete的数据已经恢复回来。

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Oracle基础学习4--Oracle权限传递 下一篇RMAN前奏

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·如何从内核协议栈到 (2025-12-27 03:19:09)
·什么是网络协议?有哪 (2025-12-27 03:19:06)
·TCP/ IP协议有哪些 (2025-12-27 03:19:03)
·怎样用 Python 写一 (2025-12-27 02:49:19)
·如何学习python数据 (2025-12-27 02:49:16)