oracle bbed恢复删除数据实例
2013-11-11 00:00
357 查看
恢复己删除数据
一、创建模拟环境
二、bbed恢复删除数据
三、核对结果
说明:
1)如果数据未删除:row flag的值为 32+8+4=44或者0x2c
2)如果数据被删除:row flag的值为 32+16+8+4=60或者0x3c
找回被删除数据
创建模拟表数据
删除表数据
关闭数据库
启动数据库验证
一、创建模拟环境
SQL> create table hr.xifenfei (id number,name varchar2(20)) tablespace xff; Table created. SQL> insert into hr.xifenfei values(1,'xifenfei'); 1 row created. SQL> insert into hr.xifenfei values(2,'xff'); 1 row created. SQL> commit; Commit complete. SQL> select * from hr.xifenfei; ID NAME ———- ——————– 1 xifenfei 2 xff SQL> select rowid, 2 dbms_rowid.rowid_relative_fno(rowid)rel_fno, 3 dbms_rowid.rowid_block_number(rowid)blockno, 4 dbms_rowid.rowid_row_number(rowid) rowno 5 from hr.xifenfei; ROWID REL_FNO BLOCKNO ROWNO —————— ———- ———- ———- AAAHy3AACAAAAISAAA 2 530 0 AAAHy3AACAAAAISAAB 2 530 1 查询file#,block,后面恢复要用 SQL> delete from hr.xifenfei where id=2; 1 row deleted. SQL> commit; Commit complete. SQL> select * from hr.xifenfei; ID NAME ———- ——————– 1 xifenfei SQL> shutdown immediate; Database closed. Database dismounted. ORACLE instance shut down.
二、bbed恢复删除数据
[oracle@localhost ~]$ bbed parfile=/tmp/parfile.cnf Password: BBED: Release 2.0.0.0.0 – Limited Production on Mon Aug 22 01:52:52 2011 Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved. ************* !!! For Oracle Internal Use only !!! *************** BBED> show all FILE# 2 BLOCK# 1 OFFSET 0 DBA 0×00800001 (8388609 2,1) FILENAME /opt/oracle/oradata/xifenfei/xff01.dbf BIFILE bifile.bbd LISTFILE /tmp/list BLOCKSIZE 8192 MODE Edit EDIT Unrecoverable IBASE Dec OBASE Dec WIDTH 80 COUNT 512 LOGFILE log.bbd SPOOL No BBED> set dba 2,530 DBA 0×00800212 (8389138 2,530) BBED> find /c xff File: /opt/oracle/oradata/xifenfei/xff01.dbf (2) Block: 530 Offsets: 8170 to 8191 Dba:0×00800212 ———————————————————————— 7866662c 000202c1 02087869 66656e66 65690106 80e2 <32 bytes per line> BBED> dump /v File: /opt/oracle/oradata/xifenfei/xff01.dbf (2) Block: 530 Offsets: 8170 to 8191 Dba:0×00800212 ——————————————————- 7866662c 000202c1 02087869 66656e66 l xff,……xifenf 65690106 80e2 l ei…. <16 bytes per line> BBED> dump /v offset 8160 File: /opt/oracle/oradata/xifenfei/xff01.dbf (2) Block: 530 Offsets: 8160 to 8191 Dba:0×00800212 ——————————————————- 0000003c 020202c1 03037866 662c0002 l …<......xff,.. 02c10208 78696665 6e666569 010680e2 l ....xifenfei.... <16 bytes per line> BBED> dump /v offset 8164 File: /opt/oracle/oradata/xifenfei/xff01.dbf (2) Block: 530 Offsets: 8164 to 8191 Dba:0×00800212 ——————————————————- 020202c1 03037866 662c0002 02c10208 l ……xff,…… 78696665 6e666569 010680e2 l xifenfei…. <16 bytes per line> BBED> dump /v offset 8162 File: /opt/oracle/oradata/xifenfei/xff01.dbf (2) Block: 530 Offsets: 8162 to 8191 Dba:0×00800212 ——————————————————- 003c0202 02c10303 7866662c 000202c1 l .<......xff,.... 02087869 66656e66 65690106 80e2 l ..xifenfei.... <16 bytes per line> BBED> dump /v offset 8163 File: /opt/oracle/oradata/xifenfei/xff01.dbf (2) Block: 530 Offsets: 8163 to 8191 Dba:0×00800212 ——————————————————- 3c020202 c1030378 66662c00 0202c102 l <......xff,..... 08786966 656e6665 69010680 e2 l .xifenfei.... <16 bytes per line> 通过尝试,推断出来3c的offset BBED> modify /x 2c Warning: contents of previous BIFILE will be lost. Proceed? (Y/N) y File: /opt/oracle/oradata/xifenfei/xff01.dbf (2) Block: 530 Offsets: 8163 to 8191 Dba:0×00800212 ———————————————————————— 2c020202 c1030378 66662c00 0202c102 08786966 656e6665 69010680 e2 <32 bytes per line> 修改3c为2c BBED> sum apply Check value for File 2, Block 530: current = 0xb1b9, required = 0xb1b9
三、核对结果
SQL> startup ORACLE instance started. Total System Global Area 236000356 bytes Fixed Size 451684 bytes Variable Size 201326592 bytes Database Buffers 33554432 bytes Redo Buffers 667648 bytes Database mounted. Database opened. SQL> select * from hr.xifenfei; ID NAME ———- ——————– 1 xifenfei 2 xff
说明:
1)如果数据未删除:row flag的值为 32+8+4=44或者0x2c
2)如果数据被删除:row flag的值为 32+16+8+4=60或者0x3c
找回被删除数据
创建模拟表数据
SQL> create table t_xifenfei(id number,name varchar2(10)); Table created. SQL> insert into t_xifenfei values(1,'xifenfei'); 1 row created. SQL> insert into t_xifenfei values(2,'XIFENFEI'); 1 row created. SQL> commit; Commit complete. dump数据块 SQL> alter system flush BUFFER_CACHE; System altered. SQL> select rowid,id,name, 2 dbms_rowid.rowid_relative_fno(rowid)rel_fno, 3 dbms_rowid.rowid_block_number(rowid)blockno, 4 dbms_rowid.rowid_row_number(rowid) rowno 5 from chf.t_xifenfei; ROWID ID NAME REL_FNO BLOCKNO ROWNO ------------------ ---------- ---------- ---------- ---------- ---------- AAASdmAAEAAAACvAAA 1 xifenfei 4 175 0 AAASdmAAEAAAACvAAB 2 XIFENFEI 4 175 1 SQL> alter system dump datafile 4 block 175; System altered. dump文件内容 block_row_dump: tab 0, row 0, @0x1f89 tl: 15 fb: --H-FL-- lb: 0x1 cc: 2 col 0: [ 2] c1 02 col 1: [ 8] 78 69 66 65 6e 66 65 69 tab 0, row 1, @0x1f7a tl: 15 fb: --H-FL-- lb: 0x1 cc: 2 col 0: [ 2] c1 03 col 1: [ 8] 58 49 46 45 4e 46 45 49 end_of_block_dump 2012-05-01 05:09:29.287714 : kjbmbassert [0xaf.4] End dump data blocks tsn: 4 file#: 4 minblk 175 maxblk 175
删除表数据
SQL> delete from t_xifenfei; 2 rows deleted. SQL> commit; Commit complete. SQL> alter system flush BUFFER_CACHE; System altered. SQL> alter system dump datafile 4 block 175; System altered. dump文件内容 block_row_dump: tab 0, row 0, @0x1f89 tl: 2 fb: --HDFL-- lb: 0x2 tab 0, row 1, @0x1f7a tl: 2 fb: --HDFL-- lb: 0x2 end_of_block_dump 2012-05-01 05:13:35.214357 : kjbmbassert [0xaf.4] End dump data blocks tsn: 4 file#: 4 minblk 175 maxblk 175 通过对比这两次的dump文件发现 1.数据内容被删除,并不是真正删除,而是给其增加了一个标识位(fd:---D----) 2.fb:--H-FL--(head of row piece+first data piece+last data piece ) 其有8个选项每个选项的值分别对应bitmask即32+8+4=44 or 0x2c 3.如果一个row被delete了,那么row flag就会更新,bitmask里的deleted被设置为16. 此时row flag为:32+16+8+4 = 60 or 0x3c. 4.如果我们要找回来被删除的数据,只需要把3c改为2c即可
关闭数据库
SQL> select * from chf.t_xifenfei; no rows selected SQL> select name from v$datafile where file#=4; NAME ------------------------------------------------ /tmp/user01.dbf SQL> shutdown immediate; Database closed. Database dismounted. ORACLE instance shut down. bbed修改数据 BBED> set filename '/tmp/user01.dbf' FILENAME /tmp/user01.dbf BBED> set block 175 BLOCK# 175 BBED> set blocksize 8192 BLOCKSIZE 8192 BBED> set mode edit MODE Edit BBED> map File: /tmp/user01.dbf (0) Block: 175 Dba:0x00000000 ------------------------------------------------------------ KTB Data Block (Table/Cluster) struct kcbh, 20 bytes @0 struct ktbbh, 72 bytes @20 struct kdbh, 14 bytes @100 struct kdbt[1], 4 bytes @114 sb2 kdbr[2] @118 ub1 freespace[8036] @122 ub1 rowdata[30] @8158 ub4 tailchk @8188 BBED> p *kdbr[0] rowdata[15] ----------- ub1 rowdata[15] @8173 0x3c BBED> p *kdbr[1] rowdata[0] ---------- ub1 rowdata[0] @8158 0x3c BBED> m /x 2c offset 8158 File: /tmp/user01.dbf (0) Block: 175 Offsets: 8158 to 8191 Dba:0x00000000 ------------------------------------------------------------------------ 2c630202 c1030858 4946454e 46454932 630202c1 02087869 66656e66 65690106 b47e <32 bytes per line> BBED> m /x 2c offset 8173 File: /tmp/user01.dbf (0) Block: 175 Offsets: 8173 to 8191 Dba:0x00000000 ------------------------------------------------------------------------ 2c630202 c1020878 6966656e 66656901 06b47e <32 bytes per line> BBED> sum apply Check value for File 0, Block 175: current = 0x4d13, required = 0x4d13
启动数据库验证
SQL> startup ORACLE instance started. Total System Global Area 535662592 bytes Fixed Size 1346140 bytes Variable Size 411043236 bytes Database Buffers 117440512 bytes Redo Buffers 5832704 bytes Database mounted. Database opened. SQL> select * from chf.t_xifenfei; ID NAME ---------- ---------- 1 xifenfei 2 XIFENFEI
相关文章推荐
- oracle bbed恢复删除数据实例
- oracle bbed恢复删除数据实例
- Oracle用delete命令删除数据恢复
- SQL Server数据库删除数据集中重复数据实例讲解
- 从binlog恢复数据及Mysqlbinlog文件删除
- Linux误删除数据的恢复方法
- 实战 SQL Server 2008 数据库误删除数据的恢复
- 数据结构之队列的基本操作入队出队初始化删除-c++代码实现及运行实例结果
- 人工误删除InnoDB ibdata数据文件与ib_logile重做日志文件如何恢复详细过程
- 恢复sql 2005误删除的数据
- 手工WINHEX数据恢复NTFS卷中误删除的文件
- 如何恢复oracle误删除、更新、插入的数据
- 如何恢复由重复数据删除技术删除的数据
- sql 表重建后数据恢复实例
- oracle 复制表,更新数据,删除表,删除数据以及恢复数据
- 【转载】linux中误删除oracle数据文件的恢复操作
- oracle误删除数据的恢复方法
- SQL SERVER 数据日志太大,磁盘没有空间,直接删除数据库日志后,显示 恢复挂起。
- mysql不小心删除数据的恢复办法
- 无归档,无备份,rm误删除所有数据文件恢复(四)