故障現象:
用戶在導出數據庫的時候,把數據文件全部給誤刪了,數據庫崩潰,一個數據文件不剩,用戶當場急哭!
處理過程:
收到故障電話後,馬上讓用戶停止一切對該目錄的操作,等候救援來到!
來到現場後,登陸系統,發現分區目錄如下:
誤刪原因:
用戶起先導出的數據是存放在/根目錄下,報錯exp-00002,根目錄空間被佔滿,於是用戶新建了/test目錄,再讓人
掛載了一個分區給/test目錄,(注意:這裏的分區:VGOraData-lvdata01,已經掛載給了三個目錄,這是極大的隱患)
這樣,同一個分區掛給了三個目錄,也就是說這三個目錄的內容是一樣的,其中/test/目錄是用戶爲了導數據存放的目錄,
在用戶導出數據過程中失敗的時候,想要刪除導出的文件,用戶以爲/test目錄和/oradata目錄裏的文件應該是不一樣的,
所以他在/test目錄直接執行了“ rm -fr * ” 命令,三個目錄裏的文件同時全部被刪!
數據恢復過程:
一、umount "VGOraData-lvdata01" 這個分區掛載的所有目錄;
二、安裝extundelete工具:
工具包下載: https://pan.baidu.com/s/1gNlNUMJ-6ocYDauyKCbTXQ 提取碼: riwd
1、安裝依賴包
yum install -y e2fsprogs-*
2、解壓工具包
tar jxf extundelete-0.2.4.tar.bz2
3、指定安裝目錄、編譯、編譯安裝
cd extundelete-0.2.4
./configure
make
make install
三、掛載一個新的分區:
掛載另一個空間足夠的分區到新的目錄上,如果有外置存儲並空間夠的話,可以從存儲新劃分一個lun過來,這樣速度會快點,
這裏因爲存儲空間不夠,所以用的是外接的1T移動硬盤,分區並格式化後,掛載到新的/dtata目錄下。
四、恢復命令:
extundelete /dev/mapper/VGOraData-lvdata01 --restore-all
注:要把數據恢復到哪個目錄下,需要進到該目錄裏,再執行以下恢復命令,這裏是恢復到/dtata裏面。
恢復整個分區的內容,如下圖:
漫長的等待過程...... (300G的數據用了一個晚上)
五、 恢復的時候,會在當前目錄(這裏是/dtata)創建一個目錄:RECOVERED_FILES,恢復的數據都在這個目錄裏面,
恢復完成後,基本上該分區的數據都已恢復,恢復後的目錄和文件結構與原有的保持一致。
對照控制文件裏的目錄,丟失了一個數據文件:sysaux01.dbf,還好,沒有業務數據在裏面。
六、把RECOVERED_FILES目錄的所有內容移動到上層/dtata目錄下,把移動硬盤的分區重新掛給/oradata和/oralog,
嘗試啓動數據庫,報錯如下:
找不到sysaux01.dbf,無法打開數據庫,只到mount狀態。
沒有備份,無法恢復!
七、在mount狀態,先offline sysaux01.dbf:
alter database datafile '/oradata/orcl/sysaux01.dbf' offline drop;
再打開數據庫,成功!
八、導出數據庫中所有表,搭建新的oracle數據庫服務器,把表導回去,結束!