oracle实验:用bbed恢复误删记录的全过程,以上是完好的行,accounting所在行显示为2c,那么,到sqlplus,将其删除:
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
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:
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
以上是完好的行,,accounting所在行显示为2c,那么,到sqlplus,将其删除: