设为首页 收藏本站
查看: 739|回复: 0

[经验分享] oracle bbed恢复删除数据实例

[复制链接]

尚未签到

发表于 2018-9-13 12:29:31 | 显示全部楼层 |阅读模式
  恢复己删除数据
  一、创建模拟环境
  代码如下:
  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>  —————— ———- ———- ———-
  AAAHy3AACAAAAISAAA 2 530 0
  AAAHy3AACAAAAISAAB 2 530 1
  查询file#,block,后面恢复要用

  SQL> delete from hr.xifenfei where>  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:>  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
  
  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….
  
  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 … 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….
  
  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 . 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  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
  
  修改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>
  Variable>  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>>
  System>  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          >  ------------------ ---------- ---------- ---------- ---------- ----------
  AAASdmAAEAAAACvAAA     1 xifenfei      4    175     0
  AAASdmAAEAAAACvAAB     2 XIFENFEI      4    175     1

  SQL>>
  System>  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>>
  System>
  SQL>>
  System>  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即可
  unity3d教程http://www.unitymanual.com
  关闭数据库
  代码如下:
  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
  
  BBED> m /x 2c offset 8173
  File: /tmp/user01.dbf (0)
  Block: 175       Offsets: 8173 to 8191      Dba:0x00000000
  ------------------------------------------------------------------------
  2c630202 c1020878 6966656e 66656901 06b47e
  
  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>
  Variable>  Database Buffers     117440512 bytes
  Redo Buffers        5832704 bytes
  Database mounted.
  Database opened.
  SQL> select * from chf.t_xifenfei;

  >  ---------- ----------
  1 xifenfei
  2 XIFENFEI


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-578126-1-1.html 上篇帖子: oracle体系结构小结 下篇帖子: oracle查看表空间使用率的sql
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表