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,将其删除:
3
登入sqlplus
SQL> delete c where deptno=10;
1 row deleted.
SQL> commit;
Commit complete.
SQL> select * from c where deptno=10;
no rows selected
SQL> shutdown immediate
ORA-01031: insufficient privileges
SQL> conn sys/s as sysdba
Connected.
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
删除完毕,并关闭数据库,再去bbed:
4
登入bbed
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
-------------------------------------------------------
3c020302 c10b0a41 43434f55 4e54494e l <...�..ACCOUNTIN
47084e45 572059 l G.NEW Y
<16 bytes per line>
发现没?accounting所在行变成了以3c打头了。把3c改成2c:
BBED> modify /x 2c offset 8162
Warning: contents of previous BIFILE will be lost. Proceed? (Y/N) y
File: /u01/app/oracle/oradata/ORCL/datafile/o1_mf_users_7wvsw7hg_.dbf (4)
Block: 18820 Offsets: 8162 to 8184 Dba:0x01004984
------------------------------------------------------------------------
2c020302 c10b0a41 43434f55 4e54494e 47084e45 572059
<32 bytes per line>
BBED> sum dba 4,18820
Check value for File 4, Block 18820:
current = 0xec39, required = 0xec29
BBED> sum dba 4,18820 apply
Check value for File 4, Block 18820:
current = 0xec29, required = 0xec29
5
登入数据库,看一下是否恢复了被删的行:
SQL> startup
ORACLE instance started.
Total System Global Area 524288000 bytes
Fixed Size 1220336 bytes
Variable Size 197132560 bytes
Database Buffers 318767104 bytes
Redo Buffers 7168000 bytes
Database mounted.
Database opened.
SQL> conn scott/tiger
Connected.
SQL> select * from c;
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
SQL>
成功恢复。
分享到:
相关推荐
oracle11g之后不集成bbed了,此源码是从oracle10g提取的,可以在oralce10g以后的版本中使用,内附有使用教程,可以通过oracle中dbf的block进行数据恢复
linux64_oracle11gR2_bbed工具需要的文件。
Oracle bbed工具是Block Browser and Editor(块浏览编辑器)的缩写,它是Oracle数据库在安装时一起附带的工具。一般此工具倾向于仅作为Oracle内部使用,且Oracle公司并不公开此工具使用细节。由于bbed可以对Oracle...
Oracle 11g安装bbed所需的文件(Linux环境).rar
介绍oracle的上古神器bbed: 使用BBED帮助理解Oracle数据块结构 如何使用BBED修复损坏的BLOCK 如何使用BBED模拟坏块 Oracle中模拟及修复数据块损坏
Oracle 11g安装bbed所需的文件(AIX环境).rar
LINUX 64位ORACLE 11G安装BBED所需文件
Oracle 特殊恢复工具bbed编译资源包,Linux 环境 32位和64位
Oracle数据库块损坏的恢复——浅析BBED在数据库恢复中的应用.pdf
ORACLE 10g bbed 工具 bbedus.msb 大家不用去装10g了
LINUX 32位ORACLE 11G安装BBED所需文件
所以,如果你想在Windows上使用bbed,你需要很多文件(本下载压缩包已经全包含了): 你需要一个bbed.exe. 你只能从Oracle 9i的安装中得到它。 你需要有一堆的DLL。所有这些DLL在Oracle9i安装中可以得到。 使用BBED...
bbed Oracle数据修复工具,通过bbed能够快速实现数据文件之间的数据块copy,完美解决基表坏块,bootstrap$启动异常等问题
linux 64下安装 oracle11g的bbed所需文件,来自oracle10G
oracle drop table purge无备份bbed恢复.docx
oracle9i下的bbed,也可以在oracle10g中使用,解压到$ORACLE_HOME/bin目录下即可。
bbed就是英文block browse block edit的缩写,用来直接查看和修改数据文件数据的一个工具。
bbed工具(三个包,用于linux服务器)+bbed安装使用方法,详细的案例恢复:oracle非归档数据库offline的数据文件恢复。做完后可掌握bbed及故障恢复。值得推荐。
BBED工具是Oracle内部提供的数据块级别查看和修改工具,文件很小,功能强大
之前找了很多,下载下来在win10上运行不了,总算找到可以运行在win10上的bbed了