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下 恢復被rm意外刪除資料檔案Linux
- 恢復被rm意外刪除資料檔案
- Linux環境利用恢復被rm意外刪除資料檔案Linux
- Oracle資料庫意外刪除資料檔案的恢復(轉載)Oracle資料庫
- lsof恢復oracle誤刪除檔案Oracle
- Oracle資料恢復 - Linux / Unix 誤刪除的檔案恢復(轉)Oracle資料恢復Linux
- 恢復刪除的檔案
- 刪除檔案的恢復
- linux下恢復誤刪除oracle的資料檔案LinuxOracle
- 怎樣恢復回收站已刪除檔案,檔案刪除恢復教程
- linux/uninx恢復刪除的檔案<轉>Linux
- Oracle恢復誤刪除的資料檔案Oracle
- linux中誤刪除oracle資料檔案的恢復操作LinuxOracle
- Git恢復刪除的檔案Git
- 行動硬碟刪除的檔案能恢復嗎,怎樣恢復刪除的檔案硬碟
- Linux下使用lsof恢復刪除的檔案Linux
- OS 刪除oracle資料檔案恢復過程Oracle
- linux中誤刪除oracle資料檔案的恢復操作(轉)LinuxOracle
- 行動硬碟刪除的檔案能恢復嗎,怎麼恢復硬碟刪除的檔案硬碟
- ORA-27041: unable to open file--恢復被rm意外刪除資料檔案
- 電腦刪除檔案恢復技巧
- Redo log檔案被刪除恢復
- linux下恢復誤刪除的資料檔案Linux
- Linux教程-使用mc恢復被刪除檔案(轉)Linux
- sd卡刪除的檔案如何恢復SD卡
- Shift + Delete刪除的檔案如何恢復?delete
- 使用lsof恢復誤刪除的檔案
- 一個恢復刪除檔案的工具
- RM 刪除資料檔案恢復操作
- eclipse中恢復刪除的檔案Eclipse
- Linux下用rm刪除的檔案的恢復方法Linux
- linux系統下檔案誤刪除該如何恢復?Linux
- 360粉碎檔案可以恢復嗎,如何恢復360強力刪除的檔案
- Linux下面誤刪除檔案使用extundelete工具恢復介紹Linuxdelete
- rm -rf 刪除檔案還能恢復嗎?
- 如何使用 testdisk 恢復已刪除的檔案
- 恢復rm -f物理刪除資料檔案
- solaris下使用lsof恢復刪除的檔案