【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】使用bbed恢复delete的数据的更多相关文章
- 06 使用bbed修复delete的数据--01
06 使用bbed修复delete的数据--01 根据rowid查看数据文件和block号 SYS@ orcl ; ROWID ID NAME FILE# BLOCK# --------------- ...
- 06 使用bbed提交delete的数据--01
使用bbed模拟delete提交操作 --session 1 TEST@ orcl )); Table created. TEST@ orcl ,'AAAAA'); row created. TEST ...
- Oracle闪回查询恢复delete删除数据
Flashback query(闪回查询)原理 Oracle根据undo信息,利用undo数据,类似一致性读取方法,可以把表置于一个删除前的时间点(或SCN),从而将数据找回. Flashback q ...
- Oracle bbed 实用示例-----修改Data内容、恢复delete的rows
bbed 可以在db open 状态来进行修改,但是建议在做任何修改操作之前先shutdown db. 这样避免checkpoint 进程重写bbed 对block 的修改. 也避免oracle 在b ...
- Oracle 备份、恢复单表或多表数据步骤
Oracle 备份.恢复单表或多表数据步骤,适用于 Oracle 8.9.10. *备份单表或多表数据: exp user/password@server file=filefullpa ...
- ApexSQL Log 从意外UPDATE和DELETE操作中恢复SQL Server数据
下载地址:https://www.apexsql.com/download.aspx 如何从意外UPDATE和DELETE操作中恢复SQL Server数据 ApexSQL Log 从意外UPDATE ...
- 一句DELETE引发的加班(Mysql 恢复Delete删除的数据)
本机用的Navicat连mysql测试DB又连了正式DB,因为本地与正式要频繁操作所以都打开了很多查询,本来要DELETE删除测试DB的数据,没看清在正式环境执行了.共删除了325条数据,然后在网上找 ...
- window下Mysql 恢复Delete删除的数据
转载:https://www.cnblogs.com/q149072205/p/11940591.html 本机用的Navicat连mysql测试DB又连了正式DB,因为本地与正式要频繁操作所以都打开 ...
- Oracle使用fy_recover_data恢复truncate删除的数据
(一)truncate操作概述 在生产中,truncate是使用的多的命令,在使用不当的情况下,往往会造成表的数据全部丢失,恢复较为困难.对于truncate恢复,常见的有以下几种方法可以进行恢复: ...
随机推荐
- Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD
Build.VERSION.SDK_INT是系统的版本,Build.VERSION_CODES.GINGERBREAD是版本号. 到VERSION.SDK_INT不禁诧异,这是何物?! 看API的定义 ...
- es6 --- class 类的继承使用
传统的javascript中只有对象,没有类的概念.它是基于原型的面向对象语言.原型对象特点就是将自身的属性共享给新对象.这样的写法相对于其它传统面向对象语言来讲,很有一种独树一帜的感脚!非常容易让人 ...
- 关于fetch
前言: fetch是用来取代传统的XMLHttpRequest的. 它的优点很多,包括链式调用的语法.返回promise等. 什么是fetch? fetch api是基于promise的设计,它是为了 ...
- JAVA程序类加载及其反射机制
[IT168 技术]当调用java命令运行某个Java程序时,该命令将启动一条Java虚拟机进程,同一个JVM的所有线程,所有变量都处于同一进程里,它们都是用该JVM进程的内存区. 程序运行到最后正常 ...
- NodeJS学习笔记 (30)定时器-timers
https://github.com/chyingp/nodejs-learning-guide
- Python爬虫基础示例
使用pip安装相关依赖: pip install requests pip install bs4 安装成功提示:Successfully installed *... 爬取中国天气网数据示例代码: ...
- 题解 P2068 【统计和】
这是一道单点修改,区间查询的线段树. 需要实现的操作有三个:建树,更新与查询. 首先,线段树用结构体维护,如下: struct node { int l, r; int val; } tree[max ...
- CodeForces 383C Propagating tree
Propagating tree Time Limit: 2000ms Memory Limit: 262144KB This problem will be judged on CodeForces ...
- ZOJ Problem Set - 3229 Shoot the Bullet 【有上下界网络流+流量输出】
题目:problemId=3442" target="_blank">ZOJ Problem Set - 3229 Shoot the Bullet 分类:有源有汇 ...
- python in操作引发 TypeError
在看 networkx 源代码的时候认为疑惑.为什么外层 for 要注意 TypeError.里面就不用.相同是 in, 一直纠结 node 是不是有问题,比方 node 不能够被迭代什么的,那么里面 ...