【Oracle】使用bbed恢复delete的数据

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

实验步骤例如以下:

[email protected]>create table bbed_test(x varchar2(20));

Table created.

[email protected]>insert into bbed_test values(‘BADLY9‘);

1 row created.

[email protected]>insert into bbed_test values(‘JP‘);

1 row created.

[email protected]>commit;

Commit complete.

[email protected]>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

[email protected]>alter system flush buffer_cache;

System altered.

[email protected]>alter system dump datafile 1 block 60290;

System altered.

[email protected]>oradebug setmypid

Statement processed.

[email protected]>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

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

[email protected]>delete bbed_test where x=‘BADLY9‘;

1 row deleted.

[email protected]>commit;

Commit complete.

[email protected]>select * from bbed_test;

X

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

JP

[email protected]> alter system flush buffer_cache;

System altered.

[email protected]>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

如今去库里查看一下

[email protected]>alter system flush buffer_cache;

System altered.

[email protected]>select * from bbed_test;

X

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

BADLY9

JP

能够看到被delete的数据已经恢复回来。

时间: 2024-10-12 21:57:16

【Oracle】使用bbed恢复delete的数据的相关文章

使用BBED恢复DELETE的数据

测试环境请参见 使用BBED手工提交事务 尝试恢复delete的数据: BBED> modify /x 2c offset 5064 File: /data/orcl/orcl/users01.dbf (4) Block: 68               Offsets: 5064 to 5071           Dba:0x01000044 ------------------------------------------------------------------------ 2

【Oracle】使用bbed恢复update的数据

使用bbed不仅仅可以找回已经delete的数据还可以恢复update的数据,当然过程要比恢复delete的数据复杂一些. 实验过程如下: [email protected]>create table bbed_test(x int,y varchar2(20)); Table created. [email protected]>insert into bbed_test values(1,'BADLY9'); 1 row created. [email protected]>inse

Oracle闪回查询恢复delete删除数据

Flashback query(闪回查询)原理 Oracle根据undo信息,利用undo数据,类似一致性读取方法,可以把表置于一个删除前的时间点(或SCN),从而将数据找回. Flashback query(闪回查询)前提: SQL> show parameter undo; NAME                                TYPE       VALUE ------------------------------------ ----------- --------

恢复oracle中update或delete的数据

问题描述 比如在开发人员对employee表进行一个update语句,但更新完之后,才发现更新的语句有误,需要撤销刚才的update操作.如(update employee e set e.block='0300100011000000248' wheree.block='0300100011000000240'; 更新了10条数据) 1.如果在很短的时间内,可以查询数据库中的versions,记录短时间内的employee表中的update.delete.insert的操作.(时间多长取决于数

Oracle bbed 实用示例-----修改Data内容、恢复delete的rows

bbed 可以在db open 状态来进行修改,但是建议在做任何修改操作之前先shutdown db. 这样避免checkpoint 进程重写bbed 对block 的修改. 也避免oracle 在bbed 修改完成之前读block 或者申明block 为corrupt. 一. 示例: 修改Data内容 1.1连接bbed [[email protected] ~]$ bbed parfile=/u01/app/oracle/bbed/bbed.par Password: BBED: Relea

利用BBED恢复数据文件头

转载请注明出处:http://blog.csdn.net/guoyjoe/article/details/31018075 @@@@@@@利用BBED模拟损坏5文件1号块(文件头) BBED> copy file 4 block 4 to file 5 block 1 File: /u01/app/oracle/oradata/PROD/tp01.dbf (5) Block: 1 Offsets: 0 to 19 Dba:0x01400001 --------------------------

利用 BBED 恢复非归档模式下 OFFLINE 数据文件

今天来模拟一个非归档模式下恢复OFFLINE数据文件的场景,主要有2种情况: 一种是在线日志没有被覆盖,另一种是在线日志被覆盖. 第一种情况比较简单,数据库自身就能处理,而第二种情况稍显复杂,但也并不难,下面开始整个实验过程: 一.在线日志没有被覆盖的场景 --切换数据库到非归档模式 SQL> archive log list Database log mode       Archive Mode Automatic archival       Enabled Archive destina

SQLServer 恢复delete 删除的数据

恢复delete 删除的数据 一次偶然的机会我看到 恢复SQLSERVER被误删除的数据>博文 原文地址为:http://www.cnblogs.com/lyhabc/p/3683147.html 我就很好奇的看了下,然后就是一头雾水 ,完全看不懂 .其实我并没打算把 这篇博文看懂,既然别人已经开发好了 ,直接拿来用就行了. 后来我就随便测试了下 ,发现以下几个问题 1.博文中作者说 支持 datetime类型,测试的结果发现 完全不对,得到的日期是不正确的 2.该数据恢复方式不支持date类型

Oracle数据库备份恢复高级培训视频课程(案例、实战、深入、全面)

套餐介绍: 介绍:风哥Oracle数据库备份恢复培训(案例.实战.深入.全面),DBA初级到骨灰级的脱变. 内容:风哥Oracle数据库备份恢复及存储容灾基础,控制文件与参数文件详解,存储结构深入分析,Oracle底层技术,数据块解析,BBED深入解析,重做日志Redo深入解析,Undo回滚段深入解析,用户管理模式的备份恢复,RMAN备份恢复,Flashback闪回恢复管理,LogMiner日志挖掘技术,SQL_Loader,Oracle逻辑备份恢复迁移之exp/imp和expdp/impdp.