Oracle 檔案意外刪除恢復(Linux)
實驗一:
透過作業系統命令,意外刪除資料檔案(資料庫open狀態); 1 建立測試資料 2 意外刪除資料檔案 3 檢查 dbwr 的程式 PID 4 查詢被誤刪除檔案控制程式碼 5 複製該控制程式碼檔名回原位置
實驗二:
透過作業系統命令,意外刪除資料檔案(資料庫無法啟動狀態); 1 意外刪除資料檔案 2 資料庫例項被重啟,並且無法open 3 extundelete工具嘗試找回
實驗一:
1 建立測試資料
SQL> create tablespace test datafile '/u01/app/oracle/oradata/PROD2/test01a.dbf' size 2M autoextend on; SQL> create user chen identified by a default tablespace test; SQL> grant connect,resource,dba to chen; SQL> create table chen.t1 as select level as id from dual connect by level<=10;
2 意外刪除資料檔案
SQL> host rm -rf /u01/app/oracle/oradata/PROD2/test01a.dbf SQL> conn chen/a SQL> create table chen.t3 as select level as id from dual connect by level<=10; create table chen.t3 as select level as id from dual connect by level<=10 * ERROR at line 1: ORA-01116: error in opening database file 6 ORA-01110: data file 6: '/u01/app/oracle/oradata/PROD2/test01a.dbf' ORA-27041: unable to open file Linux Error: 2: No such file or directory Additional information: 3
[oracle@edbjr2p1 ~]$ cd /u01/app/oracle/diag/rdbms/prod2/PROD2/trace/ [oracle@edbjr2p1 trace]$ tail -f alert_PROD2.log Tue Nov 14 14:50:55 2017 Checker run found 1 new persistent data failures Tue Nov 14 14:57:08 2017 Errors in file /u01/app/oracle/diag/rdbms/prod2/PROD2/trace/PROD2_m000_4867.trc: ORA-01116: error in opening database file 6 ORA-01110: data file 6: '/u01/app/oracle/oradata/PROD2/test01a.dbf' ORA-27041: unable to open file Linux Error: 2: No such file or directory Additional information: 3
3 檢查dbwr程式 PID
[root@edbjr2p1 ~]# ps -ef|grep dbw0|grep -v grep oracle 4579 1 0 14:34 ? 00:00:00 ora_dbw0_PROD2
4 查詢被誤刪除檔案控制程式碼
dbwr 會開啟所有資料檔案的控制程式碼。
在 proc 目錄中可以查到,目錄名是程式 PID,fd 表示檔案描述符。
[root@edbjr2p1 4579]# cd /proc/4579/fd/ [root@edbjr2p1 fd]# ls -l ...... lrwx------ 1 oracle oinstall 64 Nov 14 15:00 264 -> /u01/app/oracle/oradata/PROD2/test01a.dbf (deleted)
5 複製該控制程式碼檔名回原位置
[root@edbjr2p1 fd]# cp 264 /u01/app/oracle/oradata/PROD2/test01a.dbf [root@edbjr2p1 fd]# chown oracle.oinstall /u01/app/oracle/oradata/PROD2/test01a.dbf
不用recover資料檔案,直接可以使用;
SQL> create table chen.t3 as select level as id from dual connect by level<=10; Table created. SQL> alter system checkpoint; System altered. SQL> select file#,CHECKPOINT_CHANGE#,status from v$datafile; FILE# CHECKPOINT_CHANGE# STATUS ---------- ------------------ ------- 1 1009869 SYSTEM 2 1009869 ONLINE 3 1009869 ONLINE 4 1009869 ONLINE 5 1009869 ONLINE 6 1009869 ONLINE 6 rows selected.
實驗二:
官網下載地址:
安裝extundelete
[root@edbjr2p1 oracle]# ll -rht extundelete-0.2.4.tar.bz2 -rw-r--r-- 1 oracle oinstall 106K Nov 14 15:40 extundelete-0.2.4.tar.bz2 [root@edbjr2p1 oracle]# yum -y install e2fsprogs-libs e2fsprogs e2fsprogs-devel [root@edbjr2p1 oracle]# rpm -q e2fsprogs-libs e2fsprogs e2fsprogs-devel [root@edbjr2p1 oracle]# tar jxvf extundelete-0.2.4.tar.bz2 [root@edbjr2p1 extundelete-0.2.4]# pwd /home/oracle/extundelete-0.2.4 [root@edbjr2p1 extundelete-0.2.4]# ./configure && make && make install Configuring extundelete 0.2.4 Writing generated files to disk make -s all-recursive Making all in src Making install in src /usr/bin/install -c extundelete '/usr/local/bin'
[root@edbjr2p1 ~]# extundelete --help
在資料刪除之後,首先要解除安裝被刪除資料所在的磁碟或是分割槽,
如果是系統根分割槽遭到誤刪除, 就需要進入單使用者模式下,將根分割槽以只讀的方式掛載。
原因:
因為檔案刪除之後,僅僅是將檔案的inode節點中的扇區指標清零,實際上檔案還存在磁碟上面
如果磁碟以讀寫方式掛載,這些刪除的資料塊可能會被系統從新分配出去,這些資料塊被覆蓋之後,
這些 資料就真的丟失了,所以以只讀的方式掛載,儘可能避免資料被覆蓋。
[root@edbjr2p1 ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/sda3 15G 5.4G 8.4G 40% / /dev/sda2 30G 7.6G 21G 27% /u01 /dev/sda1 99M 29M 65M 31% /boot tmpfs 1.5G 536M 987M 36% /dev/shm [root@edbjr2p1 ~]# df -i Filesystem Inodes IUsed IFree IUse% Mounted on /dev/sda3 3932160 164322 3767838 5% / /dev/sda2 8102656 40214 8062442 1% /u01 /dev/sda1 26104 56 26048 1% /boot tmpfs 221920 227 221693 1% /dev/shm [root@edbjr2p1 ~]# umount /u01 umount: /u01: device is busy umount: /u01: device is busy [root@edbjr2p1 ~]# fuser -m -v -i -k /u01 [root@edbjr2p1 ~]# umount /u01
使用extundelete恢復單個檔案測試
[root@edbjr2p1 /]# cat 000.sh 00000000000000000000000000 11111111111111111111111111 22222222222222222222222222
刪除檔案
[root@edbjr2p1 /]# rm -rf 000.sh
檢視磁碟掛載資訊
[root@edbjr2p1 /]# df -h Filesystem Size Used Avail Use% Mounted on /dev/sda3 15G 5.4G 8.4G 40% / /dev/sda1 99M 29M 65M 31% /boot tmpfs 1.5G 540M 982M 36% /dev/shm /dev/sda2 30G 7.6G 21G 27% /u01
恢復
[root@edbjr2p1 /]# extundelete /dev/sda3 --inode 2 ...... Loading filesystem metadata ... 120 groups loaded. Group: 0 Contents of inode 2: 000 98309 Deleted 000.sh 98309 Deleted 000~ 98307 Deleted
恢復指定檔案
[root@edbjr2p1 /]# extundelete /dev/sda3 --restore-file 000.sh ...... Loading filesystem metadata ... 120 groups loaded. Loading journal descriptors ... 30791 descriptors loaded. Successfully restored file 000.sh
檢視檔案
[root@edbjr2p1 /]# cd RECOVERED_FILES/ [root@edbjr2p1 RECOVERED_FILES]# cat 000.sh 00000000000000000000000000 11111111111111111111111111 22222222222222222222222222
使用extundelete恢復整個目錄
[root@edbjr2p1 /]# mkdir abccc [root@edbjr2p1 /]# touch /abccc/chen.sh [root@edbjr2p1 /]# echo 66666666666666666 > /abccc/chen.sh
刪除目錄
[root@edbjr2p1 /]# rm -rf abccc/
恢復
[root@edbjr2p1 /]# extundelete /dev/sda3 --inode 2 NOTICE: Extended attributes are not restored. WARNING: EXT3_FEATURE_INCOMPAT_RECOVER is set. The partition should be unmounted to undelete any files without further data loss. If the partition is not currently mounted, this message indicates ...... abccc 2588673 Deleted
恢復目錄檔案
[root@edbjr2p1 /]# extundelete /dev/sda3 --restore-directory /abccc ...... Loading filesystem metadata ... 120 groups loaded. Loading journal descriptors ... 30318 descriptors loaded. Searching for recoverable inodes in directory /abccc ... 805 recoverable inodes found. Looking through the directory structure for deleted files ... 805 recoverable inodes still lost. No files were undeleted.
同理可以恢復被誤刪除的資料檔案等。
###chenjuchao 2023-03-25###
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29785807/viewspace-2941647/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- linux下恢復誤刪除oracle的資料檔案LinuxOracle
- Git恢復刪除的檔案Git
- 行動硬碟刪除的檔案能恢復嗎,怎麼恢復硬碟刪除的檔案硬碟
- Linux下用rm刪除的檔案的恢復方法Linux
- linux系統下檔案誤刪除該如何恢復?Linux
- Linux下面誤刪除檔案使用extundelete工具恢復介紹Linuxdelete
- sd卡刪除的檔案如何恢復SD卡
- Shift + Delete刪除的檔案如何恢復?delete
- 360粉碎檔案可以恢復嗎,如何恢復360強力刪除的檔案
- oracle使用小記、刪除恢復Oracle
- 如何使用 testdisk 恢復已刪除的檔案
- rm -rf 刪除檔案還能恢復嗎?
- Linux 恢復rm -rf命令所刪除的達夢資料檔案Linux
- linux-ext4格式檔案誤刪除,該如何恢復?Linux
- 隨身碟被刪除的檔案如何恢復?
- 恢復EXT3下被刪除的檔案
- 回收站刪除的檔案怎麼恢復?
- 被360防毒刪除的檔案怎麼恢復防毒
- Linux系統中檔案被刪除後的恢復方法(ext4)Linux
- 電腦裡刪除的檔案怎麼恢復,資料恢復方法大全資料恢復
- eclipse 恢復誤刪檔案Eclipse
- win10 shift delete刪除的檔案如何恢復Win10delete
- 【北亞資料恢復】誤刪除oracle表和誤刪除oracle表資料的資料恢復方法資料恢復Oracle
- Linux批量刪除檔案Linux
- Linux刪除檔案命令Linux
- U盤的東西刪除了怎麼恢復,怎麼恢復U盤刪除的檔案
- win10推送檔案被刪除怎麼恢復_win10推送檔案已被刪除如何找回Win10
- 不小心刪除,Mac電腦如何批次恢復檔案Mac
- 回收站刪除的檔案恢復,保姆級教學
- sd卡中的資料夾刪除了怎麼恢復,SD卡刪除的檔案如何恢復SD卡
- linux 模糊批量刪除檔案Linux
- 如何恢復被刪除的 GitLab 專案?Gitlab
- win10怎麼找回shift delete刪除的檔案_win10按shiftdelete刪除的檔案如何恢復Win10delete
- 虛擬機器vmdk檔案刪除後如何恢復資料虛擬機
- win10 回收站刪除的檔案怎麼恢復Win10
- NetApp FAS2240-4儲存刪除檔案資料恢復APP資料恢復
- 刪除的PSD檔案在哪可以恢復?一定要看看
- 【資料庫資料恢復】LINUX環境下ORACLE資料庫誤刪除的資料恢復資料庫資料恢復LinuxOracle