使用bbed直接修改oracle資料檔案恢複被delete掉的資料

來源:互聯網
上載者:User

今天簡單寫篇有關oracle BBED 與oracle 資料檔案block 格式結合起來運用的文章。以更瞭解資料庫的內部的某些東西。一條記錄被delete以

後,如何通過直接修改oracle 的資料檔案,而直接將資料恢複的方法。當然不管表被delete 也好,drop 也好,teuncate也好,有很多的恢複

方法。在此只是研究其中的一種。以起到拋磚引玉的作用。(如轉載請註明出處www.sosdb.com)

以下通過具體的實驗來詳細解釋整個過程:

1.create tablespace sosdbcom datafile '/ora/sosdbcom.dbf' size 5M;

2.create table sosdb(sos01 varchar2(15),sos02 number(4)) tablespace sosdbcom;

3.insert into sosdb values('www.sosdb.com',86)

insert into sosdb select * from sosdb.com;

insert into sosdb select * from sosdb.com;

commit;

4.select * from sosdb;

SOS01 SOS02

--------------- ----------

www.sosdb.com 86

www.sosdb.com 86

www.sosdb.com 86

www.sosdb.com 86

現在我們刪除一條,就選擇第一條吧。

5。delete from sosdb where roenum<2;

commit;

現在看看

SQL> select * from sosdb;

SOS01 SOS02

--------------- ----------

www.sosdb.com 86

www.sosdb.com 86

www.sosdb.com 86

SQL>

好了,剩下的工作就如何通過修改oracle datafile 的block
,直接將被刪除的這條記錄恢複出來的工作了。

這裡需要用到bbed ,至於bbed的使用方法見:


http://www.sosdb.com/jdul/dispbbs.asp?boardID=1&ID=237&page=1

寫一個bbed 參數檔案 par.bbd

blocksize=8192

listfile=a.txt

mode=edit

寫一個a.txt

15 /ora/sosdbcom.dbf 5251072

開啟bbed:

[oracle@mail ora]$./bbed parfile=par.bbd

dump file 14 block 10 count 8192

把這個block dump出來看看,會發現最後的一部份內容是:

00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

00000000 00000000 00000000 2c00020d 7777772e 736f7364 622e636f 6d02c157

2c00020d 7777772e 736f7364 622e636f 6d02c157 2c00020d 7777772e 736f7364

622e636f 6d02c157 3c02020d 7777772e 736f7364 622e636f 6d02c157 01064cd4

分析會發現每個row 的標誌為 2c00,但一條為3c02 ,其實這個就是被刪除的那條記錄的標誌。我們只

要把這個標誌修改過來,然後再修改一下資料檔案的某些標誌就可以了。

修改方法如下:

bbed> modify /x 2c file 14 block 10 offset 8168

bbed> modify /x 00 file 14 block 10 offset 8169

修改完之後block的狀態是corrupt的。用sum命令使之有效。

bbed> sum file 14 block 10 apply

現在重新啟動oracle資料庫並查詢表sosdb:

SQL> conn / as sysdba

Connected to an idle instance.

SQL> startup

ORACLE instance started.

Total System Global Area 236000356 bytes

Fixed Size 451684 bytes

Variable Size 201326592 bytes

Database Buffers 33554432 bytes

Redo Buffers 667648 bytes

Database mounted.

Database opened.

SQL> select * from sosdb;

SOS01 SOS02

--------------- ----------

www.sosdb.com 86

www.sosdb.com 86

www.sosdb.com 86

www.sosdb.com 86

OK,到此,刪除的記錄恢複成功。

在這裡只是講個簡單的例子,其實很多時候我們都可以採用此類的方法來做些其他的工作,尤其是恢複工作。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.