檔案描述符恢復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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- debugfs恢復Ext3的檔案系統中被rm、rm -f 掉的檔案
- 基於檔案描述符的恢復
- rm檔案後cp恢復回oracle檔案Oracle
- RM 刪除資料檔案恢復操作
- 使用檔案描述符恢復誤刪除的資料檔案
- rm -rf 刪除檔案還能恢復嗎?
- 恢復rm -f物理刪除資料檔案
- 恢復被rm意外刪除資料檔案
- 只有.dbf資料檔案進行資料庫恢復資料庫
- 恢復案例:無歸檔,掉電,控制檔案全部丟失恢復
- 如何從壞掉的SD卡恢復檔案SD卡
- Linux下用rm刪除的檔案的恢復方法Linux
- 【備份恢復】不使用rman工具就能恢復被rm刪除的資料檔案案例
- 替換掉的檔案怎麼恢復,兩個方法還原檔案
- linux下 恢復被rm意外刪除資料檔案Linux
- 改寫linux rm防止誤刪檔案無法恢復Linux
- DBF刪除和改名的恢復操作
- extundelete恢復rm的資料delete
- Linux下利用檔案描述符恢復的成功失敗實驗Linux
- DBF檔案怎麼開啟?DBF檔案的開啟方法教程
- Linux 恢復rm -rf命令所刪除的達夢資料檔案Linux
- Linux rm掉檔案空間不釋放原因Linux
- 控制檔案恢復—從trace檔案中恢復
- Linux環境利用恢復被rm意外刪除資料檔案Linux
- 修復DBF資料表檔案的簡單方法 (轉)
- CHK檔案的恢復
- rman恢復--丟失控制檔案的恢復
- 檔案替換後怎麼恢復,恢復被覆蓋的檔案
- word怎麼恢復儲存前的檔案,word檔案恢復
- .ora檔案、.dbf檔案和.dat檔案的區別
- 同名檔案替換怎麼恢復,恢復同名檔案
- 剪下的檔案還能恢復嗎,恢復剪貼丟失的檔案
- 恢復SPFILE檔案
- 剪下後的檔案可以恢復嗎?恢復剪下檔案怎麼辦?
- word自動儲存的檔案怎麼恢復,word檔案恢復
- 【恢復】Redo日誌檔案丟失的恢復
- ORA-27041: unable to open file--恢復被rm意外刪除資料檔案
- 【備份與恢復】控制檔案的恢復(不完全恢復)