by 蔡建良 2019-2-25
經過長時間摸索,參考網上各類文章。今天終於讓我成功恢復了oracle的sys.tab$表,並成功打開了數據庫。
將此過程記錄下來,與大家共享。如有疑問可聯系我QQ: 304125648
sys.tab$表的恢復要點如下:
1) Tab$表刪除后在行記錄頭部會標記0x7c,沒刪除前是0x6c。因此只要將找到所有tab$行記錄將第一個字節改為0x6c就成功一大半的。
此處建議在linux中恢復數據。可采用虛擬機來創建oracle環境。
Oracle VM VirtualBox6.0+Centos7+oracle11g
安裝涉及問題有:
(1) Xshell 5+Xftp 6組合,用來遠程控制linux和傳輸文件。
(2) oracle 11g for linux bbed - Oracle BBED工具安裝
l 將三個文件移到$ORACLE_HOME/rdbms/lib/ 目錄下。
l $ mv bbedus.msb $ORACLE_HOME/rdbms/mesg/
l $ cd $ORACLE_HOME/rdbms/lib
l $ make -f $ORACLE_HOME/rdbms/lib/ins_rdbms.mk BBED=$ORACLE_HOME/bin/bbed $ORACLE_HOME/bin/bbed
l 安裝成功登陸如下:
[oracle@bys3 ~]$ bbed
Password: 默認密碼是:blockedit
l BBED> exit
oracle11g for linuxx64編譯bbed需要的三個文件
刪除tab$記錄的恢復腳本文件
2) 禁用sys.tab$的索引I_TAB1:
//這樣恢復,索引與表存在不一致情況,要禁用sys.tab$的索引I_TAB1.
BBED> assign /x dba 1,523 offset 4910= 0x3c
BBED> sum apply dba 1,523
BBED> verify dba 1,523
3) 由於Oracle數據庫被注入觸發器,因此必須禁用數據庫的觸發器。
所以總結解決辦法如下(處理前最好進行備份):
1、 關閉數據庫 shutdown immediate
2、 啟動數據庫到mount狀態下 startup mount 執行以下語句
alter system set "_system_trig_enabled"=false scope=both;
4) Tab$表恢復后將SYSTEM01.dbf文件復制到原來的數據目錄覆蓋原有文件。
5) 重建控制文件。
6) Open數據庫。
具體可參考:
https://www.cnblogs.com/lfree/p/10368150.html
https://www.cnblogs.com/lfree/p/10368158.html
https://www.cnblogs.com/lfree/p/10368167.html