表中的数据被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. MDNS的漏洞报告——mdns的最大问题是允许广域网的mdns单播查询,这会暴露设备信息,或者被利用用于dns放大攻击

    Vulnerability Note VU#550620 Multicast DNS (mDNS) implementations may respond to unicast queries ori ...

  2. Android-加载大图,照片墙的实现

    照片墙这种功能现在应该算是挺常见了,在很多应用中你都可以经常看到照片墙的身影.它的设计思路其实也非常简单,用一个GridView控件当作“墙”,然后随着GridView的滚动将一张张照片贴在“墙”上, ...

  3. 基于JS的身份证验证(完整版)

    var Wi = [ 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1 ]; // 加权因子 var ValideCode = [ 1, 0 ...

  4. Goldengate参数规范

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

  5. RSA不对称加密

    package sinRsa; import java.io.ByteArrayOutputStream; import java.io.FileInputStream; import java.io ...

  6. NodeJS学习笔记 进阶 (2)Nodejs进阶:MD5加密算法(ok)

    个人总结:这篇文章讲解了Nodejs中自带模块的MD5加密算法的使用,读完这篇文章需要15分钟,其实还有一个叫utility的包在npm上,也非常好用. 摘选自网络 简介 MD5(Message-Di ...

  7. node使用express命令报错找不到ejs的解决方法

    首先确定已经全局安装过好几遍express和express-generator,但一使用express命令直接报找不到ejs模块,全局和本地安装ejs都没用,nodemon模块报同样错误,找不到deb ...

  8. django-debug-toolbar 使用

    https://pypi.org/project/django-debug-toolbar/ https://django-debug-toolbar.readthedocs.io/en/latest ...

  9. 洛谷 P1156 垃圾陷阱 (01背包拓展)(好题!!)

    这真是一道好题目 学到了很多 一开始感觉吃或者不吃会有后效性 然后看到洛谷的题解,直接把这个有后效性的部分当作dp的维度和值 因为这个垃圾可以堆或者不堆,所以这个很像01背包, 但是加了非常多的限制条 ...

  10. Tensorflow MNIST 数据集測试代码入门

    本系列文章由 @yhl_leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/50614444 測试代码已上传至GitH ...