Oracle恢復誤刪除的資料檔案
實驗環境:
CentOS 6.4
Oracle 11.2.0.3.0
1.模擬誤刪除了Oracle的資料檔案
下面是Oracle的資料檔案目錄
刪除所有的檔案.
[oracle@master orcl]$ rm -rf *
[oracle@master orcl]$ ls
[oracle@master orcl]$
這個時候千萬不要關閉資料庫例項
2.恢復資料檔案
首先找到dbwn的程式號(PID),可以看到pid是3030
[oracle@master orcl]$ ps -ef | grep ora_dbw | grep -v grep
oracle 3030 1 0 09:14 ? 00:00:01 ora_dbw0_orcl
進入這個程式的目錄
[root@master fd]# cd /proc/3030/fd
可以看到相關的檔案都已經刪除
現在只需要將刪除的檔案複製回原位置即可.
如cp 256 /home/oracle/app/oracle/oradata/orcl/control01.ctl
但是檔案數量較大,可以使用AWK拼接命令
SQL> shutdown abort;
ORACLE instance shut down.
SQL> startup open;
ORACLE instance started.
Total System Global Area 784998400 bytes
Fixed Size 2232472 bytes
Variable Size 478154600 bytes
Database Buffers 297795584 bytes
Redo Buffers 6815744 bytes
ORA-00214: control file
'/home/oracle/app/oracle/fast_recovery_area/orcl/control02.ctl' version 1946
inconsistent with file '/home/oracle/app/oracle/oradata/orcl/control01.ctl'
version 1939
CentOS 6.4
Oracle 11.2.0.3.0
1.模擬誤刪除了Oracle的資料檔案
下面是Oracle的資料檔案目錄
刪除所有的檔案.
[oracle@master orcl]$ rm -rf *
[oracle@master orcl]$ ls
[oracle@master orcl]$
這個時候千萬不要關閉資料庫例項
2.恢復資料檔案
首先找到dbwn的程式號(PID),可以看到pid是3030
[oracle@master orcl]$ ps -ef | grep ora_dbw | grep -v grep
oracle 3030 1 0 09:14 ? 00:00:01 ora_dbw0_orcl
進入這個程式的目錄
[root@master fd]# cd /proc/3030/fd
如cp 256 /home/oracle/app/oracle/oradata/orcl/control01.ctl
但是檔案數量較大,可以使用AWK拼接命令
[root@master fd]# ll | awk '/deleted/{print "cp "$9" "$11}' > /tmp/test.sh
[root@master fd]# source /tmp/test.sh
3.同理,恢復日誌檔案
[root@master fd]# ps -ef | grep ora_lgwr | grep -v grep
oracle 3032 1 0 09:14 ? 00:00:09 ora_lgwr_orcl
進入lgwr程式的目錄
[root@master fd]# cd /proc/3032/fd
恢復redolog
[root@master fd]# ll | awk '/deleted/{print "cp "$9" "$11}' | grep redo > /tmp/test.sh
[root@master fd]# source /tmp/test.sh
其中/tmp/test.sh的內容如下
cp 258 /home/oracle/app/oracle/oradata/orcl/redo01.log
cp 259 /home/oracle/app/oracle/oradata/orcl/redo02.log
cp 260 /home/oracle/app/oracle/oradata/orcl/redo03.log
4.重啟資料庫例項
重啟資料庫例項,發現控制檔案不一致,用其他控制檔案覆蓋即可(多路複用控制檔案的好處).[root@master fd]# source /tmp/test.sh
3.同理,恢復日誌檔案
[root@master fd]# ps -ef | grep ora_lgwr | grep -v grep
oracle 3032 1 0 09:14 ? 00:00:09 ora_lgwr_orcl
[root@master fd]# cd /proc/3032/fd
恢復redolog
[root@master fd]# ll | awk '/deleted/{print "cp "$9" "$11}' | grep redo > /tmp/test.sh
[root@master fd]# source /tmp/test.sh
其中/tmp/test.sh的內容如下
cp 258 /home/oracle/app/oracle/oradata/orcl/redo01.log
cp 259 /home/oracle/app/oracle/oradata/orcl/redo02.log
cp 260 /home/oracle/app/oracle/oradata/orcl/redo03.log
檔案恢復之後,停止資料庫例項,重新設定檔案的屬主和屬組(一般使用root恢復,需要重新設定為原使用者)
SQL> shutdown abort;
ORACLE instance shut down.
SQL> startup open;
ORACLE instance started.
Total System Global Area 784998400 bytes
Fixed Size 2232472 bytes
Variable Size 478154600 bytes
Database Buffers 297795584 bytes
Redo Buffers 6815744 bytes
ORA-00214: control file
'/home/oracle/app/oracle/fast_recovery_area/orcl/control02.ctl' version 1946
inconsistent with file '/home/oracle/app/oracle/oradata/orcl/control01.ctl'
version 1939
總結:
1.在誤刪除發生的時候,千萬不要停止資料庫例項.只要程式還握有檔案控制程式碼,還是有可能恢復的.
2.直接查詢lgwr的程式比查詢dbwn要好.因為lgwr除了握有資料檔案的控制程式碼還握有日誌檔案的控制程式碼.
3.經過實驗,MySQL資料庫不能使用這種方式恢復.因為MySQL程式不會握有所有檔案的控制程式碼,即使使用這種方式恢復了部分檔案,也不能啟動資料庫例項.
1.在誤刪除發生的時候,千萬不要停止資料庫例項.只要程式還握有檔案控制程式碼,還是有可能恢復的.
2.直接查詢lgwr的程式比查詢dbwn要好.因為lgwr除了握有資料檔案的控制程式碼還握有日誌檔案的控制程式碼.
3.經過實驗,MySQL資料庫不能使用這種方式恢復.因為MySQL程式不會握有所有檔案的控制程式碼,即使使用這種方式恢復了部分檔案,也不能啟動資料庫例項.
參考:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29734436/viewspace-1410310/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle資料恢復 - Linux / Unix 誤刪除的檔案恢復(轉)Oracle資料恢復Linux
- linux下恢復誤刪除oracle的資料檔案LinuxOracle
- lsof恢復oracle誤刪除檔案Oracle
- oracle恢復誤刪除資料Oracle
- linux中誤刪除oracle資料檔案的恢復操作LinuxOracle
- 【北亞資料恢復】誤刪除oracle表和誤刪除oracle表資料的資料恢復方法資料恢復Oracle
- linux下恢復誤刪除的資料檔案Linux
- linux中誤刪除oracle資料檔案的恢復操作(轉)LinuxOracle
- Oracle閃回刪除恢復誤刪資料Oracle
- 誤刪除資料檔案、控制檔案的非RMAN恢復方法
- 使用檔案描述符恢復誤刪除的資料檔案
- Oracle11g資料庫引數檔案誤刪除恢復Oracle資料庫
- OS 刪除oracle資料檔案恢復過程Oracle
- 使用lsof恢復誤刪除的檔案
- 資料檔案誤刪--但有資料檔案的copy恢復
- Oracle資料庫意外刪除資料檔案的恢復(轉載)Oracle資料庫
- 恢復Oracle資料庫誤刪除資料的語句Oracle資料庫
- RM 刪除資料檔案恢復操作
- ZT:使用lsof恢復誤刪除的檔案
- 【北亞資料恢復】zfs檔案系統的伺服器誤刪除的資料恢復資料恢復伺服器
- Oracle恢復誤刪資料Oracle
- 【oracle資料庫資料恢復】誤操作導致的資料庫誤刪除的資料恢復案例Oracle資料庫資料恢復
- 恢復刪除的檔案
- 刪除檔案的恢復
- 【伺服器資料恢復】Zfs檔案系統下誤刪除怎麼恢復資料伺服器資料恢復
- 恢復rm -f物理刪除資料檔案
- 恢復被rm意外刪除資料檔案
- Oracle 檔案意外刪除恢復(Linux)OracleLinux
- oracle11g 資料檔案誤刪恢復(無備份)Oracle
- Git恢復刪除的檔案Git
- 【虛擬機器資料恢復】誤刪除VMware虛擬機器vmdk檔案的資料恢復案例虛擬機資料恢復
- truncate table 誤刪除資料後的恢復
- 【資料庫資料恢復】LINUX環境下ORACLE資料庫誤刪除的資料恢復資料庫資料恢復LinuxOracle
- lsof恢復誤刪的檔案
- 透過控制程式碼檔案恢復linux下誤刪除的資料檔案Linux
- 誤刪除資料了怎麼辦?小編交易誤刪除資料的恢復方法
- 行動硬碟刪除的檔案能恢復嗎,怎樣恢復刪除的檔案硬碟
- Flashback Query恢復誤刪除資料(轉)