檔案描述符恢復rm掉的dbf
Eygle的最近的一本dba手記4上面說到了利用檔案描述符恢復意外刪除的資料檔案,雖然這本書最近還沒有入手,翻閱了一下文件做了一個測試,資料得到完全恢復,記錄如下:
[oracle@server119
admin]$ sqlplus / as sysdba
SQL*Plus: Release
10.2.0.5.0 - Production on Tue Aug 21 15:11:31 2012
Copyright (c) 1982,
2010, Oracle. All Rights Reserved.
Connected to:
Oracle Database 10g
Enterprise Edition Release 10.2.0.5.0 - 64bit Production
With the
Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> create
tablespace rm datafile .dbf'
size 50m;
Tablespace created.
SQL> conn
xiaoyu/xiaoyu
Connected.
SQL> create
table rm01 tablespace rm as select * from dba_Objects;
Table created.
SQL> select
count(*) from rm01;
COUNT(*)
----------
52653
建立測試的資料檔案/db2/oracle10g/oradata/rm01和表rm01
[oracle@server119
~]$ rm -rf /db2/oracle10g/oradata/rm01.dbf
Os上刪除資料檔案。
[oracle@server119
~]$ sqlplus xiaoyu/xiaoyu
SQL*Plus: Release
10.2.0.5.0 - Production on Tue Aug 21 15:29:04 2012
Copyright (c) 1982,
2010, Oracle. All Rights Reserved.
Connected to:
Oracle Database 10g
Enterprise Edition Release 10.2.0.5.0 - 64bit Production
With the
Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> select
count(*) from rm01;
COUNT(*)
----------
52653
這兒系統讀取的是記憶體的資訊,如果重新整理一下cache buffer,也就是標記記憶體的buffer為過期的。
SQL> alter
system flush buffer_cache;
System altered.
SQL> select
count(*) from rm01;
select count(*)
from rm01
*
ERROR at line 1:
ORA-01116: error in
opening database file 574
ORA-01110: data
file 574: '/db2/oracle10g/oradata/rm01.dbf'
ORA-27041: unable
to open file
Linux-x86_64 Error:
2: No such file or directory
Additional
information: 3
存在兩個程式dbwn來對資料檔案進行操作。
[root@server119
fd]# lsof |grep /db2/oracle10g/oradata/rm01.dbf
oracle 2199
oracle 594uW REG 8,17 52436992
12648449 /db2/oracle10g/oradata/rm01.dbf (deleted)
oracle 2201
oracle 19u REG 8,17 52436992
12648449 /db2/oracle10g/oradata/rm01.dbf (deleted)
[root@server119
fd]# ps -ef|grep 2199
oracle 2199
1 0 15:24 ? 00:00:00 ora_dbw0_benguo
root 12226 12798 0 15:47 pts/11 00:00:00 grep 2199
[root@server119
fd]# ps -ef|grep 2201
oracle 2201
1 0 15:24 ? 00:00:00 ora_dbw1_benguo
root 12267 12798 0 15:47 pts/11 00:00:00 grep 2201
關於rm其實只是刪除了檔案的連線inode,檔案中所佔用的block並沒有被刪除,這點到和oracle的truncate和drop原理差不多,可以看出系統的程式並沒有釋放,如果此時我們不關閉資料庫,那麼這個資料檔案是可以完全恢復出來的,而如果關閉資料檔案的連線程式則會釋放,可能引起資料丟失。
[root@server119
fd]# cp -a /proc/2199/fd/594 /db2/oracle10g/oradata/rm01.dbf
cp: 無法建立符號連結 “/db2/oracle10g/oradata/rm01.dbf”: 許可權不夠
[root@server119
fd]# cp /proc/2199/fd/594 /db2/oracle10g/oradata/rm01.dbf
[root@server119
fd]# ls -l /db2/oracle10g/oradata/rm01.dbf
-rw-r----- 1 root
root 52436992 08-21 15:54 /db2/oracle10g/oradata/rm01.dbf
[root@server119
fd]# chown oracle:dba /db2/oracle10g/oradata/rm01.dbf
[root@server119
fd]# stat /db2/oracle10g/oradata/rm01.dbf
File: “/db2/oracle10g/oradata/rm01.dbf”
Size: 52436992 Blocks: 102536 IO Block: 4096 一般檔案
Device:
811h/2065d Inode: 12648450 Links: 1
Access:
(0640/-rw-r-----) Uid: ( 500/
oracle) Gid: ( 501/
dba)
Access: 2012-08-21
15:54:18.000000000 +0800
Modify: 2012-08-21
15:54:18.000000000 +0800
Change: 2012-08-21
15:54:35.000000000 +0800
[root@server119
fd]# su - oracle
[oracle@server119
~]$ sqlplus xiaoyu/xiaoyu
SQL*Plus: Release
10.2.0.5.0 - Production on Tue Aug 21 15:55:34 2012
Copyright (c) 1982,
2010, Oracle. All Rights Reserved.
Connected to:
Oracle Database 10g
Enterprise Edition Release 10.2.0.5.0 - 64bit Production
With the
Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> select
count(*) from rm01;
COUNT(*)
----------
52653
而如果關閉了資料庫後由於程式已經釋放,已經無法利用檔案描述符恢復了。
SQL> startup
force;
ORACLE instance
started.
Total System Global
Area 2.6844E+10 bytes
Fixed Size 2144984 bytes
Variable Size 855639336 bytes
Database
Buffers 2.5971E+10 bytes
Redo Buffers 14630912 bytes
Database mounted.
ORA-01157: cannot
identify/lock data file 574 - see DBWR trace file
ORA-01110: data
file 574: '/db2/oracle10g/oradata/rm01.dbf'
此時lsof列出程式開啟的檔案中並沒有當時意外rm掉的檔案。
[root@server119 ~]#
lsof |grep /db2/oracle10g/oradata/rm01.dbf
資料得到完全恢復,並不存在丟失,os結合oracle可以讓問題得到更輕鬆的解決。暫時還沒有測試asm檔案系統的利用lsof的效果,asm上也僅僅只是因為普通的cp無法使用,應該可以利用oracle的ftp和http功能來上傳資料檔案到asm磁碟。
所以當資料庫出現問題時,如果db是開啟的往往是幸運的,而如果馬上關閉將很可能引起一系列問題,當然有備份則不用過多擔心,在診斷問題時往往需要我們先冷靜,然後才去實際處理,現場往往是寶貴的。
[@more@]
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25362835/viewspace-1059232/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Linux下用rm刪除的檔案的恢復方法Linux
- rm -rf 刪除檔案還能恢復嗎?
- 替換掉的檔案怎麼恢復,兩個方法還原檔案
- Linux下利用檔案描述符恢復的成功失敗實驗Linux
- Linux 恢復rm -rf命令所刪除的達夢資料檔案Linux
- DBF檔案怎麼開啟?DBF檔案的開啟方法教程
- word怎麼恢復儲存前的檔案,word檔案恢復
- 檔案替換後怎麼恢復,恢復被覆蓋的檔案
- 同名檔案替換怎麼恢復,恢復同名檔案
- 剪下的檔案還能恢復嗎,恢復剪貼丟失的檔案
- 剪下後的檔案可以恢復嗎?恢復剪下檔案怎麼辦?
- word自動儲存的檔案怎麼恢復,word檔案恢復
- qq檔案失效怎麼恢復 qq已失效的檔案能不能恢復
- 360粉碎檔案可以恢復嗎,如何恢復360強力刪除的檔案
- 檔案中勒索恢復
- 檔案描述符
- Git恢復刪除的檔案Git
- uninstall 後的檔案如何恢復
- linux rm - rf之後怎麼恢復Linux
- rm 刪除檔案
- 行動硬碟刪除的檔案能恢復嗎,怎麼恢復硬碟刪除的檔案硬碟
- U盤檔案被隱藏怎麼恢復 U盤檔案恢復隱藏的方法
- eclipse 恢復誤刪檔案Eclipse
- 與控制檔案有關的恢復
- linux中的檔案描述符Linux
- Linux檔案描述符Linux
- XFS檔案系統的備份、恢復、修復
- 檔案描述符和檔案系統
- 【RMAN】如果控制檔案損壞那麼如何恢復?恢復控制檔案的方式有哪幾種?
- 隨身碟檔案被隱藏怎麼恢復 隨身碟檔案恢復隱藏的方法
- u盤檔案變成快捷方式怎麼恢復,恢復U盤檔案的五種方法
- git恢復誤刪未提交的檔案Git
- 與控制檔案有關的恢復(二)
- sd卡刪除的檔案如何恢復SD卡
- 被誤刪的檔案快速恢復方法
- Shift + Delete刪除的檔案如何恢復?delete
- 如何有效恢復誤刪的HDFS檔案
- dbf是什麼檔案格式 dbf是用什麼軟體如何開啟
- mysql 透過idb 恢復檔案MySql