誤刪資料檔案在沒有歸檔的情況下恢復實驗
平臺:redhat 6.4
資料庫:11.2.0.3
該實驗模擬用rm -rf操作誤刪資料檔案,不使用備份的情況下完全恢復。
我們現在建立一個表
SQL> create table tt as select * from dba_objects where rownum<=1000;
Table created.
SQL> select count(*) from tt;
COUNT(*)
----------
1000
刪除這張表所在的使用者資料檔案
[orcl@gitiracb orcl]$ rm -rf users01.dbf
我們先找到這個檔案上的程式
[orcl@gitiracb orcl]$ lsof | grep /home/orcl/app/oradata/orcl/users01.dbf
oracle 26852 orcl 259u REG 8,2 51126272 4462850 /home/orcl/app/oradata/orcl/users01.dbf (deleted)
oracle 26854 orcl 264u REG 8,2 51126272 4462850 /home/orcl/app/oradata/orcl/users01.dbf (deleted)
oracle 26858 orcl 259u REG 8,2 51126272 4462850 /home/orcl/app/oradata/orcl/users01.dbf (deleted)
可以看到這個資料檔案上有三個程式分別是dbwn,lgwr,smon程式
[orcl@gitiracb orcl]$ ps -ef|grep 26852
orcl 26852 1 0 16:32 ? 00:00:03 ora_dbw1_orcl
orcl 29251 19572 0 17:19 pts/0 00:00:00 grep 26852
[orcl@gitiracb orcl]$ ps -ef|grep 26854
orcl 26854 1 0 16:32 ? 00:00:00 ora_lgwr_orcl
orcl 29274 19572 0 17:20 pts/0 00:00:00 grep 26854
[orcl@gitiracb orcl]$ ps -ef|grep 26858
orcl 26858 1 0 16:32 ? 00:00:00 ora_smon_orcl
orcl 29283 19572 0 17:20 pts/0 00:00:00 grep 26858
我們再根據其中的隨便一個程式找到其刪除檔案的控制程式碼
[orcl@gitiracb orcl]$ ls -l /proc/26852/fd
total 0
lr-x------ 1 orcl dba 64 Jun 2 16:35 0 -> /dev/null
l-wx------ 1 orcl dba 64 Jun 2 16:35 1 -> /dev/null
lr-x------ 1 orcl dba 64 Jun 2 16:35 10 -> /dev/zero
lr-x------ 1 orcl dba 64 Jun 2 16:35 11 -> /dev/zero
lrwx------ 1 orcl dba 64 Jun 2 16:35 12 -> /home/orcl/app/product/11.2.0/dbhome_1/dbs/hc_orcl.dat
lr-x------ 1 orcl dba 64 Jun 2 16:35 13 -> /home/orcl/app/product/11.2.0/dbhome_1/rdbms/mesg/oraus.msb
lr-x------ 1 orcl dba 64 Jun 2 16:35 14 -> /proc/26852/fd
lr-x------ 1 orcl dba 64 Jun 2 16:35 15 -> /dev/zero
lrwx------ 1 orcl dba 64 Jun 2 16:35 16 -> /home/orcl/app/product/11.2.0/dbhome_1/dbs/hc_orcl.dat
lrwx------ 1 orcl dba 64 Jun 2 16:35 17 -> /home/orcl/app/product/11.2.0/dbhome_1/dbs/lkORCL
lr-x------ 1 orcl dba 64 Jun 2 16:36 18 -> /home/orcl/app/product/11.2.0/dbhome_1/rdbms/mesg/oraus.msb
l-wx------ 1 orcl dba 64 Jun 2 16:35 2 -> /dev/null
lrwx------ 1 orcl dba 64 Jun 2 16:36 257 -> /home/orcl/app/oradata/orcl/system01.dbf
lrwx------ 1 orcl dba 64 Jun 2 16:36 258 -> /home/orcl/app/oradata/orcl/sysaux01.dbf
lrwx------ 1 orcl dba 64 Jun 2 16:35 259 -> /home/orcl/app/oradata/orcl/users01.dbf (deleted)
lrwx------ 1 orcl dba 64 Jun 2 16:35 260 -> /home/orcl/app/oradata/orcl/example01.dbf
lrwx------ 1 orcl dba 64 Jun 2 16:41 261 -> /home/orcl/app/oradata/orcl/undotbs01.dbf
lr-x------ 1 orcl dba 64 Jun 2 16:35 3 -> /dev/null
lr-x------ 1 orcl dba 64 Jun 2 16:35 4 -> /dev/null
lrwx------ 1 orcl dba 64 Jun 2 16:35 5 -> /home/orcl/app/product/11.2.0/dbhome_1/dbs/hc_orcl.dat
lr-x------ 1 orcl dba 64 Jun 2 16:35 6 -> /dev/null
lr-x------ 1 orcl dba 64 Jun 2 16:35 7 -> /dev/null
lr-x------ 1 orcl dba 64 Jun 2 16:35 8 -> /dev/null
lr-x------ 1 orcl dba 64 Jun 2 16:35 9 -> /dev/null
我們看到紅色標明的就是剛剛刪除資料檔案的控制程式碼資訊,將這個259檔案複製到原來的位置
[orcl@gitiracb orcl]$ cp /proc/26852/fd/259 /home/orcl/app/oradata/orcl/users01.dbf
再到資料庫中恢復這個檔案
SQL> alter database datafile '/home/orcl/app/oradata/orcl/users01.dbf' offline;
Database altered.
SQL> recover datafile '/home/orcl/app/oradata/orcl/users01.dbf';
Media recovery complete.
SQL> alter database datafile '/home/orcl/app/oradata/orcl/users01.dbf' online;
Database altered.
再看看alter檔案資訊
alter database datafile '/home/orcl/app/oradata/orcl/users01.dbf' offline
Completed: alter database datafile '/home/orcl/app/oradata/orcl/users01.dbf' offline
Tue Jun 02 17:09:54 2015
ALTER DATABASE RECOVER datafile '/home/orcl/app/oradata/orcl/users01.dbf'
Media Recovery Start
Serial Media Recovery started
Recovery of Online Redo Log: Thread 1 Group 1 Seq 67 Reading mem 0
Mem# 0: /home/orcl/app/oradata/orcl/redo01.log
Media Recovery Complete (orcl)
Completed: ALTER DATABASE RECOVER datafile '/home/orcl/app/oradata/orcl/users01.dbf'
alter database datafile '/home/orcl/app/oradata/orcl/users01.dbf' online
Completed: alter database datafile '/home/orcl/app/oradata/orcl/users01.dbf' online\
SQL> select count(*) from tt;
COUNT(*)
----------
1000
恢復完成
注:因為找控制程式碼資訊依賴於資料檔案上的程式,如果資料檔案上的程式全部被kill,例如資料庫關閉了,無法完成上述任務。
因為需要recover操作,如果redo log 也同時被刪除無法完成上述任務。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29989552/viewspace-1682538/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 資料庫在沒有備份的情況下的資料檔案損壞的恢復資料庫
- Oracle控制檔案在缺失歸檔日誌的情況下的恢復Oracle
- 歸檔模式,恢復沒有備份的資料檔案模式
- 在歸檔下恢復系統資料檔案
- 歸檔模式下,線上刪除資料檔案的完全恢復模式
- 【DATAGUARD】物理dg在主庫丟失歸檔檔案的情況下的恢復(七)
- 資料檔案誤刪--但有資料檔案的copy恢復
- 【故障處理】DG環境主庫丟失歸檔情況下資料檔案的恢復
- linux下恢復誤刪除的資料檔案Linux
- 非歸檔模式下恢復利用offline drop命令誤刪除的資料檔案模式
- 全備份情況下,刪除控制檔案及恢復
- REDO檔案丟失的恢復__沒有任何備份的情況
- 沒有自動備份的情況下控制檔案全部丟失的恢復
- 測試在丟失歸檔日誌的情況下,跳過部分歸檔日誌進行資料恢復資料恢復
- Oracle恢復誤刪除的資料檔案Oracle
- linux下恢復誤刪除oracle的資料檔案LinuxOracle
- 歸檔模式下資料檔案丟失的恢復模式
- 恢復案例:歸檔模式下丟失全部資料檔案的恢復模式
- Linux下誤刪資料檔案從檔案控制程式碼恢復資料檔案Linux
- oracle dg 歸檔日誌恢復情況Oracle
- windows重灌/資料庫物理檔案完好的情況下恢復資料庫Windows資料庫
- rman恢復--歸檔模式有備份,丟失資料檔案的恢復模式
- 【BBED】丟失歸檔檔案情況下的恢復
- 誤刪除資料檔案、控制檔案的非RMAN恢復方法
- 使用檔案描述符恢復誤刪除的資料檔案
- lsof恢復誤刪的檔案
- 無備份恢復(歸檔模式)已刪除資料檔案模式
- 沒有備份的資料檔案恢復(五)
- 非歸檔庫誤刪表空間後的資料恢復資料恢復
- 恢復測試:擁有當時的全部歸檔,控制檔案,恢復丟失的資料檔案。
- 歸檔模式下丟失普通資料檔案並恢復模式
- 【恢復】非歸檔模式下因誤刪除資料檔案導致資料庫無法OPEN的故障處理模式資料庫
- 沒備份,歸檔日誌存在,丟失資料檔案的恢復
- 利用歸檔來做資料檔案的恢復
- 在歸檔模式下丟失日誌檔案的恢復模式
- Oracle資料恢復 - Linux / Unix 誤刪除的檔案恢復(轉)Oracle資料恢復Linux
- RMAN資料庫恢復 之歸檔模式有(無)備份-丟失資料檔案的恢復資料庫模式
- 歸檔模式有備份丟失資料檔案後恢復模式