誤刪資料檔案在沒有歸檔的情況下恢復實驗
平臺: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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- linux下恢復誤刪除oracle的資料檔案LinuxOracle
- 測試在丟失歸檔日誌的情況下,跳過部分歸檔日誌進行資料恢復資料恢復
- eclipse 恢復誤刪檔案Eclipse
- oracle dg 歸檔日誌恢復情況Oracle
- 【BBED】丟失歸檔檔案情況下的恢復
- 【伺服器資料恢復】Zfs檔案系統下誤刪除怎麼恢復資料伺服器資料恢復
- 伺服器儲存檔案誤刪資料恢復伺服器資料恢復
- 電腦檔案誤刪除了怎麼恢復找回?誤刪電腦資料恢復方法教程資料恢復
- git恢復誤刪未提交的檔案Git
- 被誤刪的檔案快速恢復方法
- 如何有效恢復誤刪的HDFS檔案
- MySQL資料災難挽救之ibdata檔案誤刪恢復MySql
- 恢復ext4檔案系統被誤刪的檔案
- 【北亞資料恢復】zfs檔案系統的伺服器誤刪除的資料恢復資料恢復伺服器
- linux系統下檔案誤刪除該如何恢復?Linux
- 電腦誤刪檔案怎麼恢復?
- 【伺服器資料恢復】linux ext3檔案系統下誤刪除mysql資料庫的資料恢復案例伺服器資料恢復LinuxMySql資料庫
- 如何恢復誤刪的檔案?2021最新教程
- win10中mdf檔案被誤刪如何恢復_win10系統mdf檔案被誤刪的恢復方法Win10
- 【分散式儲存資料恢復】hbase和hive資料庫底層檔案誤刪的資料恢復案例分散式資料恢復Hive資料庫
- win10誤刪檔案怎麼恢復Win10
- 電腦照片誤刪了怎麼恢復?電腦誤刪檔案照片恢復教程
- 【虛擬機器資料恢復】誤刪除VMware虛擬機器vmdk檔案的資料恢復案例虛擬機資料恢復
- Oracle-無備份情況下,如何手動恢復控制檔案Oracle
- Git恢復刪除的檔案Git
- 硬碟顯示沒有初始化未分配是什麼情況?快速恢復沒有初始化硬碟的檔案硬碟
- 對歸檔模式下CLEAR 未歸檔日誌後恢復資料庫的一點看法模式資料庫
- 檔案刪除如何恢復?推薦幾款超實用的資料恢復軟體資料恢復
- 電腦裡刪除的檔案怎麼恢復,資料恢復方法大全資料恢復
- 恢復EXT3下被刪除的檔案
- u盤東西誤刪怎麼恢復 恢復u盤檔案的方法
- 行動硬碟刪除的檔案能恢復嗎,怎麼恢復硬碟刪除的檔案硬碟
- 從備份片中恢復某個指定得歸檔或者資料檔案
- 電腦誤刪除檔案怎麼恢復檔案,不小心刪除了電腦的檔案怎麼辦
- Linux下用rm刪除的檔案的恢復方法Linux
- PSD檔案誤刪了怎麼恢復?教你三招
- 【儲存資料恢復】WAFL檔案系統下raid資料恢復案例資料恢復AI
- 【北亞資料恢復】分散式儲存hbase和hive資料庫底層檔案被誤刪除的資料恢復案例資料恢復分散式Hive資料庫
- 360粉碎檔案可以恢復嗎,如何恢復360強力刪除的檔案