表中的数据被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】使用bbed恢复delete的数据的更多相关文章

  1. 06 使用bbed修复delete的数据--01

    06 使用bbed修复delete的数据--01 根据rowid查看数据文件和block号 SYS@ orcl ; ROWID ID NAME FILE# BLOCK# --------------- ...

  2. 06 使用bbed提交delete的数据--01

    使用bbed模拟delete提交操作 --session 1 TEST@ orcl )); Table created. TEST@ orcl ,'AAAAA'); row created. TEST ...

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

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

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

    bbed 可以在db open 状态来进行修改,但是建议在做任何修改操作之前先shutdown db. 这样避免checkpoint 进程重写bbed 对block 的修改. 也避免oracle 在b ...

  5. Oracle 备份、恢复单表或多表数据步骤

    Oracle 备份.恢复单表或多表数据步骤,适用于 Oracle 8.9.10.        *备份单表或多表数据: exp user/password@server file=filefullpa ...

  6. ApexSQL Log 从意外UPDATE和DELETE操作中恢复SQL Server数据

    下载地址:https://www.apexsql.com/download.aspx 如何从意外UPDATE和DELETE操作中恢复SQL Server数据 ApexSQL Log 从意外UPDATE ...

  7. 一句DELETE引发的加班(Mysql 恢复Delete删除的数据)

    本机用的Navicat连mysql测试DB又连了正式DB,因为本地与正式要频繁操作所以都打开了很多查询,本来要DELETE删除测试DB的数据,没看清在正式环境执行了.共删除了325条数据,然后在网上找 ...

  8. window下Mysql 恢复Delete删除的数据

    转载:https://www.cnblogs.com/q149072205/p/11940591.html 本机用的Navicat连mysql测试DB又连了正式DB,因为本地与正式要频繁操作所以都打开 ...

  9. Oracle使用fy_recover_data恢复truncate删除的数据

    (一)truncate操作概述 在生产中,truncate是使用的多的命令,在使用不当的情况下,往往会造成表的数据全部丢失,恢复较为困难.对于truncate恢复,常见的有以下几种方法可以进行恢复: ...

随机推荐

  1. nj07---npm

    一.如何使用包管理器 Node.js包管理器,即npm是Node.js官方提供的包管理工具,它已经成了Node.js包的标准发布平台,用于Node.js包的发布.传播.依赖控制.(可以下载上面的包也可 ...

  2. emmet教程

    https://www.zfanw.com/blog/zencoding-vim-tutorial-chinese.html https://www.zfanw.com/blog/zencoding- ...

  3. 利用Matlab自带的深度学习工具进行车辆区域检测与车型识别【Github更新!!!】(三)

    前言 对前面的东西更新了一下.地方包括: 1.GUI的更新,更友好的用户界面 2.支持用手直接画车辆区域,并且识别出来 3.将proposal.detect.fine-grained classifi ...

  4. Deleting elements

    There are several ways to delete elements from a list. If you know the index of the element you want ...

  5. App server 与 Web server之间的区别

    原文: http://www.javaworld.com/javaqa/2002-08/01-qa-0823-appvswebserver.html 简单来说,web服务器提供页面给浏览器,而app服 ...

  6. WHERE、ORDER BY、GROUP BY、HAVING语句解析(二十八)

    之前啊,我们提及到,对于update和delete,若不带where条件,则对所有记录都有效. 一.WHERE条件表达式 (1)对记录进行过滤,如果没有指定WHERE子句,则显示所有记录. (2)在W ...

  7. jsp输出九九乘法表

    <% String st = ""; for(int i = 1; i <= 9; i++){ for(int j = 1; j <= i; j++){ st + ...

  8. 继承—Car

    编写一个Car类,具有final类型的属性品牌,具有功能drive: 定义其子类Aodi和Benchi,具有属性:价格.型号:具有功能:变速: 定义主类E,在其main方法中分别创建Aodi和Benc ...

  9. codeforces 527 C Glass Carving

    Glass Carving time limit per test 2 seconds Leonid wants to become a glass carver (the person who cr ...

  10. affe(8) solver 优化方法

    上文提到,到目前为止,caffe总共提供了六种优化方法: Stochastic Gradient Descent (type: "SGD"), AdaDelta (type: &q ...