通过BBED恢复删除的数据

首先创建表以及数据并查出文件id和块number:

SQL> create table yy(id number,name varchar2(20));

Table created.

SQL> insert into yy values(2,‘xmj‘);

1 row created.

SQL> insert into yy values(1,‘xw‘);

1 row created.

SQL> commit;

Commit complete.

SQL> select * from yy;

        ID NAME
---------- --------------------
         2 xmj
         1 xw

SQL> select dbms_rowid.rowid_relative_fno(rowid) rel_fno,dbms_rowid.rowid_block_number(rowid) blockno from yy;  

   REL_FNO    BLOCKNO
---------- ----------
         1      58930
         1      58930

SQL> select * from yy;

        ID NAME
---------- --------------------
         2 xmj
         1 xw

SQL> delete from yy where id = 1
  2  ;

1 row deleted.

SQL> commit;

Commit complete.

SQL> select * from yy;

        ID NAME
---------- --------------------
         2 xmj

下面通过bbed恢复出xw这条数据:

BBED> set dba 1,58930
        DBA             0x0040e632 (4253234 1,58930)

BBED> find /c xw
 File: /u01/app/oracle/oradata/qxptfh01/system01.dbf (1)
 Block: 58930            Offsets: 8176 to 8191           Dba:0x0040e632
------------------------------------------------------------------------
 78772c00 0202c103 03786d6a 0206e66b 

 <32 bytes per line>

BBED> set dba 1,58930 offset 8176
        DBA             0x0040e632 (4253234 1,58930)
        OFFSET          8176

BBED> d /v dba 1,58930 offset 8176
 File: /u01/app/oracle/oradata/qxptfh01/system01.dbf (1)
 Block: 58930   Offsets: 8176 to 8191  Dba:0x0040e632
-------------------------------------------------------
 78772c00 0202c103 03786d6a 0206e66b l xw,......xmj...k

 <16 bytes per line>

BBED> d /v offset 8169
 File: /u01/app/oracle/oradata/qxptfh01/system01.dbf (1)
 Block: 58930   Offsets: 8169 to 8191  Dba:0x0040e632
-------------------------------------------------------
 3c020202 c1020278 772c0002 02c10303 l <......xw,......
 786d6a02 06e66b                     l xmj...k

 <16 bytes per line>

BBED> modify /x 2c
Warning: contents of previous BIFILE will be lost. Proceed? (Y/N) y
 File: /u01/app/oracle/oradata/qxptfh01/system01.dbf (1)
 Block: 58930            Offsets: 8169 to 8191           Dba:0x0040e632
------------------------------------------------------------------------
 2c020202 c1020278 772c0002 02c10303 786d6a02 06e66b 

 <32 bytes per line>

BBED> sum apply
Check value for File 1, Block 58930:
current = 0xe6f8, required = 0xe6f8

其实可以通过p kdbr先查出它的offset,再具体定位:

BBED> set dba 1,58930
        DBA             0x0040e632 (4253234 1,58930)

BBED> p kdbr
sb2 kdbr[0]                                 @110      8086
sb2 kdbr[1]                                 @112      8077

BBED> p *kdbr[0]
rowdata[9]
----------
ub1 rowdata[9]                              @8178     0x2c

BBED> p *kdbr[1]
rowdata[0]
----------
ub1 rowdata[0]                              @8169     0x2c           ---这就是我们删除的数据信息,offset为8169

BBED>

以上恢复操作最好shudown数据库后进行操作:

验证:

SQL> select * from yy;

        ID NAME
---------- --------------------
         2 xmj
         1 xw

说明:

1)如果数据未删除:row flag的值为 32+8+4=44或者0x2c

2)如果数据被删除:row flag的值为 32+16+8+4=60或者0x3c

时间: 2024-08-02 22:18:47

通过BBED恢复删除的数据的相关文章

oracle特殊恢复-bbed修改某个数据文件头

数据文件头中的scn要与控制文件中的scn一致,数据库才可以open,在open过程中我们可以通过bbed来修改某个数据文件头的scn,来欺骗oracle,来open库. 1.环境如下 使用Oracle 11gR2进行测试,具体版本为11.2.0.4 [email protected] SQL>select file#,name,checkpoint_change#,checkpoint_time from v$datafile;      FILE# NAME                 

使用bbed恢复表数据

对于表级别的数据恢复,ORACLE提供了多种恢复方法:flashback query,logmnr等. 本文通过演示样例演示使用bbed的copy命令恢复用户误删除或者损坏的表数据,当然我们也能够使用该方法来恢复其它数据. 实验过程: SQL> select tablespace_name,file_name from dba_data_files; TABLESPACE_NAME FILE_NAME --------------- -------------------------------

如何通过BBED找回删除数据

项目案例:客户删除delete了重要数据,无备份,客户联系我,要求恢复相应数据.本次通过实验方式重现客户现场.备份高于一切,首先备份,再操作 创建表格: create table king(age number,name varchar2(20)); insert into king values(20,'rick'); insert into king values(30,'wuzy'); commit; select dbms_rowid.rowid_relative_fno(rowid)

ORACLE恢复删除的数据

---正在执行的 select a.username, a.sid,b.SQL_TEXT, b.SQL_FULLTEXT  from v$session a, v$sqlarea b where a.sql_address = b.address ---执行过的select b.SQL_TEXT,b.FIRST_LOAD_TIME,b.SQL_FULLTEXT  from v$sqlarea bwhere b.FIRST_LOAD_TIME between '2009-10-15/09:24:4

ORACLE 恢复删除的数据

/*1.FLASHBACK QUERY*/ --闪回到15分钟前 select * from orders as of timestamp (systimestamp - interval ''15'' minute) where ...... 这里可以使用DAY.SECOND.MONTH替换minute,例如: SELECT * FROM orders AS OF TIMESTAMP(SYSTIMESTAMP - INTERVAL ''2'' DAY) --闪回到某个时间点 select *

使用BBED了解数据块结构

Oracle数据块主要有两种:文件头块和数据块. 下面先介绍数据块: 数据块简单分为下面几层: BBED> set dba 1,58914 DBA 0x0040e622 (4253218 1,58914) BBED> map File: /u01/app/oracle/oradata/qxptfh01/system01.dbf (1) Block: 58914 Dba:0x0040e622 ----------------------------------------------------

分享:bbed修改数据文件头推进scn与其他数据文件相同

场景简介: 物理copy表空间数据文件,数据库发生完全检查点,删除该表空间下的数据文件,使该表空间数据文件头的scn与其他数据文件不一致. 场景构造: 1.  创建测试表空间 [email protected]> create tablespace bbed datafile '/u01/app/oracle/oradata/orser/bbed01.dbf' size 10M autoextend on; Tablespace created 2.  物理cp数据文件(最好先做备份) [[em

oracle 误删数据的恢复

误删数据的恢复 oracle恢复删除的数据 分为两种方法:scn和时间戳两种方法恢复. 一.通过scn恢复删除且已提交的数据 1.获得当前数据库的scn号 select current_scn from v$database; (切换到sys用户或system用户查询) 查询到的scn号为:1499223 2.查询当前scn号之前的scn select * from 表名 as of scn 1499220; (确定删除的数据是否存在,如果存在,则恢复数据:如果不是,则继续缩小scn号) 3.恢

通过bbed修复ora-01190错误

1.配置BBET Oracle11g中缺省不提供BBET库文件,如果需要可以将10g中的文件copy到11g相应目录再执行安装: $ORACLE_HOME/rdbms/lib/ssbbded.o $ORACLE_HOME/rdbms/lib/sbbdpt.o $ORACLE_HOME/rdbms/mesg/bbedus.msb 在第一次使用时会发现有默认的口令,从这里可以看出oracle对bbed工具的限制,默认的密码是blockedit SQL> col name for a50 SQL>