表中的数据被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. angularjs --- ngResource 类似于 ajax发送请求。

    <!DOCTYPE HTML> <html ng-app="myApp"> <head> <meta http-equiv="C ...

  2. thinkphp5项目--个人博客(七)

    thinkphp5项目--个人博客(七) 项目地址 fry404006308/personalBlog: personalBloghttps://github.com/fry404006308/per ...

  3. 2.boost遍历数组容器

    #include <iostream> #include <string> #include<boost/array.hpp>//区别 using namespac ...

  4. SpringMVC学习一:SpringMVC的配置

    SpringMVC的配置主要分为两部分: 1.xml文件配置 2.注解的配置 SpringMVC配置的步骤如下: 1.在将SpringMVC的jar包导入到web项目中后,先配置web.xml 文件. ...

  5. Goldengate参数规范

    1.    文档综述 1.1.  文档说明 本文档规定了在实施Goldengate时,各个进程需要配置的参数. 该参数模板适合于Goldengate11.2.1.0版本: **注:本文档为Golden ...

  6. 利用NSProxy解决NSTimer内存泄漏问题

    之前写过一篇利用RunTime解决由NSTimer导致的内存泄漏的文章,最近和同事讨论觉得这样写有点复杂,然后发现有NSProxy这么好用的根类,根类,根类,没错NSProxy与NSObject一样是 ...

  7. Win8.1应用开发之文件操作

    在操作文件之前,先相应用的应用功能声明进行设定.用户通过C#(非UI)对win8.1上的文件进行訪问,仅仅能局限于图片,音乐,视频和文档四个目录. 而通过文件选取器则能訪问到整个系统的文件. (一)应 ...

  8. HDU 3555 Bomb(数位DP模板啊两种形式)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3555 Problem Description The counter-terrorists found ...

  9. Visual Code中的智能提示

    https://code.visualstudio.com/docs/editor/intellisense C# https://marketplace.visualstudio.com/items ...

  10. assert 的理解

    assert 可以实现如下功能: 保证参数之间的大小等约束关系: 函数执行过程中得到的中间结果是否符合预期: def gen_batch(batch_size, skip_window, num_sk ...