手机版
你好,游客 登录 注册 搜索
背景:
阅读新闻

Oracle实验:用BBED恢复误删记录的全过程

[日期:2012-06-14] 来源:Linux社区  作者:linwaterbin [字体: ]

1 准备测试环境:
SQL> create table c as select * from dept;

Table created.

SQL> select * from c;

    DEPTNO DNAME          LOC
---------- -------------- -------------
        10 ACCOUNTING     NEW YORK
        20 RESEARCH       DALLAS
        30 SALES          CHICAGO
        40 OPERATIONS     BOSTON

SQL> select rowid,c.* from c;

ROWID                  DEPTNO DNAME          LOC
------------------ ---------- -------------- -------------
AAAM5/AAEAAAEmEAAA         10 ACCOUNTING     NEW YORK
AAAM5/AAEAAAEmEAAB         20 RESEARCH       DALLAS
AAAM5/AAEAAAEmEAAC         30 SALES          CHICAGO
AAAM5/AAEAAAEmEAAD         40 OPERATIONS     BOSTON

SQL> select get_rowid('AAAM5/AAEAAAEmEAAA') row_id from dual;

ROW_ID
--------------------------------------------------------------------------------
Object# is      :52863
Relative_fno is :4
Block number is :18820
Row number is   :0

ps:
get_rowid 这个函数是用来获得row_id的详信息,实现如下:
create or replace function get_rowid
(l_rowid in varchar2)
return varchar2
is
ls_my_rowid varchar2(200);
rowid_type number;
object_number number;
relative_fno number;
block_number number;
row_number number;
begin
 dbms_rowid.rowid_info(l_rowid,rowid_type,object_number,relative_fno,block_number,row_number);
 ls_my_rowid := 'Object# is      :'||to_char(object_number)||chr(10)||
  'Relative_fno is :'||to_char(relative_fno)||chr(10)||
  'Block number is :'||to_char(block_number)||chr(10)||
  'Row number is   :'||to_char(row_number);
 return ls_my_rowid;
end;

 

2

登入bbed
[Oracle@localhost ~]$ bbed parfile=bbed.par
Password:

BBED: Release 2.0.0.0.0 - Limited Production on Thu Jun 14 13:09:44 2012

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

************* !!! For Oracle Internal Use only !!! ***************

 

BBED> set dba 4,18820
        DBA             0x01004984 (16796036 4,18820)

BBED> find /c ACCOUNTING TOP
 File: /u01/app/oracle/oradata/ORCL/datafile/o1_mf_users_7wvsw7hg_.dbf (4)
 Block: 18820            Offsets: 8169 to 8191           Dba:0x01004984
------------------------------------------------------------------------
 4143434f 554e5449 4e47084e 45572059 4f524b02 06483a

 <32 bytes per line>

BBED> dump /v dba 4,18820 offset 8169 count 23
 File: /u01/app/oracle/oradata/ORCL/datafile/o1_mf_users_7wvsw7hg_.dbf (4)
 Block: 18820   Offsets: 8169 to 8191  Dba:0x01004984
-------------------------------------------------------
 4143434f 554e5449 4e47084e 45572059 l ACCOUNTING.NEW Y
 4f524b02 06483a                     l ORK..H:

 <16 bytes per line>

 

BBED> p *kdbr[0]  --*kdbr[n],其中n是row number
rowdata[66]
-----------
ub1 rowdata[66]                             @8162     0x2c

BBED> dump /v dba 4,18820 offset 8162 count 23
 File: /u01/app/oracle/oradata/ORCL/datafile/o1_mf_users_7wvsw7hg_.dbf (4)
 Block: 18820   Offsets: 8162 to 8184  Dba:0x01004984
-------------------------------------------------------
 2c000302 c10b0a41 43434f55 4e54494e l ,...�..ACCOUNTIN
 47084e45 572059                     l G.NEW Y

 <16 bytes per line>

 以上是完好的行,accounting所在行显示为2c,那么,到sqlplus,将其删除:

linux
相关资讯       BBED 
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数

       

评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款