实验过程如下: 1、创建表guo_test1 gyj@prod create table guoyjoe_t1(id int,name varchar2(10));table created.gyj@prod insert into guoyjoe_t1 values(1,guoyjoe);1 row created.gyj@prod insert into guoyjoe_t1 values(1,tom);1 row created.gyj@prod
实验过程如下:
1、创建表guo_test1
gyj@prod> create table guoyjoe_t1(id int,name varchar2(10));table created.gyj@prod> insert into guoyjoe_t1 values(1,'guoyjoe');1 row created.gyj@prod> insert into guoyjoe_t1 values(1,'tom');1 row created.gyj@prod> commit;commit complete.
gyj@prod> select name,dbms_rowid.rowid_relative_fno(rowid) file#,dbms_rowid.rowid_block_number(rowid) block#,dbms_rowid.rowid_row_number(rowid) row# from guoyjoe_t1;name file# block# row#---------- ---------- ---------- ----------guoyjoe 5 20877 0tom 5 20877 1
3、刷数据缓存
gyj@prod> alter system flush buffer_cache;system altered.
4、利用bbed找到这行记录(修改前的值:guoyjoe)
bbed> bbed> set file 5 block 20877 file# 5 block# 20877
5、发生update语句,把原来的值guoyjoe修改成oracledba
gyj@prod> update guoyjoe_t1 set name='oracledba' where name='guoyjoe';1 row updated.gyj@prod> commit;commit complete
6、刷数据缓存
gyj@prod> alter system flush buffer_cache;system altered.
7、利用bbed找到这行被修改后的记录(修改后的值上:oracledba)
bbed> set file 5 block 20877 file# 5 block# 20877
8、对比修改前与修改后的数据
bbed> d /v offset 8174 count 16 file: /u01/app/oracle/oradata/prod/tp01.dbf (5) block: 20877 offsets: 8174 to 8189 dba:0x0140518d------------------------------------------------------- 2c000202 c1020767 756f794a 6f650106 l ,...á..guoyjoe..bbed> d /v offset 8148 count 16 file: /u01/app/oracle/oradata/prod/tp01.dbf (5) block: 20877 offsets: 8148 to 8163 dba:0x0140518d------------------------------------------------------- 2c010202 c102096f 7261636c 65646261 l ,...á..oracledba
9、开始恢复
10、恢复成功(oracledba--->guoyjoe)
gyj@prod> alter system flush buffer_cache;system altered.gyj@prod> select name,dbms_rowid.rowid_relative_fno(rowid) file#,dbms_rowid.rowid_block_number(rowid) block#,dbms_rowid.rowid_row_number(rowid) row# from guoyjoe_t1 where id=1;name file# block# row#---------- ---------- ---------- ----------guoyjoe 5 20877 0tom 5 20877 1
实际上用bbed恢复update前的值不难,主要是要了解内部原理和块格式