一次物理刪除資料檔案的恢復過程
近幾天心情心情很低落,老是失眠,狀態很差。
中午吃晚飯後,運維小組的同事告訴我說有一臺資料庫的磁碟空間滿了。叫我處理一下,我登入到伺服器上一看:
[oracle@cpemsii-cx ~]$ df -h
Filesystem 容量 已用 可用 已用% 掛載點
/dev/cciss/c0d0p3 130G 80G 49G 62% /
/dev/cciss/c0d0p1 981M 25M 906M 3% /boot
none 16G 0 16G 0% /dev/shm
/dev/cciss/c0d1 135G 93G 3.8M 100% /data
頭暈,先把操作日誌記下來,明天再寫。
今天補上。。。
[oracle@cpemsii-cx data]$ ll -rt
總用量 133824236
drwx------ 2 root root 16384 2009-09-18 lost+found
-rw-r----- 1 oracle oinstall 2097160192 11月 30 06:50 audit_indx02.dbf
-rw-r----- 1 oracle oinstall 5242888192 11月 30 06:51 audit_data05.dbf
-rw-r----- 1 oracle oinstall 34358697984 11月 30 06:51 audit_data03.dbf
-rw-r----- 1 oracle oinstall 21044928512 11月 30 07:04 audit_data04.dbf
-rw-r----- 1 oracle oinstall 4294975488 11月 30 11:04 audit_indx03.dbf
-rw-r----- 1 oracle oinstall 30260862976 11月 30 11:07 audit_indx06.dbf
-rw-r----- 1 oracle oinstall 3145736192 11月 30 11:07 audit_indx05.dbf
-rw-r----- 1 oracle oinstall 2097160192 11月 30 11:07 audit_indx04.dbf
-rw-r----- 1 oracle oinstall 34359730176 11月 30 11:07 audit_indx01.dbf
發現這個目錄下都是資料檔案,沒有什麼檔案可以刪除的。
檢視alert日誌:
[oracle@cpemsii-cx bdump]$ tail -f alert_emsaudt.log
Fri Nov 30 04:15:44 2012
Thread 1 cannot allocate new log, sequence 97073
Private strand flush not complete
Current log# 1 seq# 97072 mem# 0: /home/oracle/oradata/emsaudt/redo01.log
Fri Nov 30 04:16:05 2012
Thread 1 advanced to log sequence 97073 (LGWR switch)
Current log# 2 seq# 97073 mem# 0: /home/oracle/oradata/emsaudt/redo02.log
Fri Nov 30 05:02:04 2012
ORA-1653: unable to extend table AUDITCUST.TB_RST_SEAL_NO_CLCT by 128 in tablespace AUDIT_DATA
ORA-1653: unable to extend table AUDITCUST.TB_RST_SEAL_NO_CLCT by 8192 in tablespace AUDIT_DATA
Fri Nov 30 11:04:00 2012
後臺已經在報表空間不足的錯誤,為了不影響業務資料的插入,只能現在/目下的$ORACLE_BASE/oradata目錄下將AUDIT_DATA表空間新增一個資料檔案了。臨時解決插入報錯的問題。
SQL> ALTER TABLESPACE AUDIT_DATA ADD DATAFILE '/home/oracle/oradata/emsaudt/audit_data06.dbf' SIZE 2g ;
Tablespace altered.
再看alert日誌:
Fri Nov 30 11:24:44 2012
ALTER TABLESPACE AUDIT_DATA ADD DATAFILE '/home/oracle/oradata/emsaudt/audit_data06.dbf' SIZE 2g
Fri Nov 30 11:25:16 2012
Completed: ALTER TABLESPACE AUDIT_DATA ADD DATAFILE '/home/oracle/oradata/emsaudt/audit_data06.dbf' SIZE 2g .
看來插入報錯的問題臨時解決了,但是/data目錄空間不足的問題還是沒有解決。
那隻能通過新增儲存空間或者將這個目錄下的一些資料檔案移到根目錄下。擴盤短期是不可能的了,那就移檔案吧。
考慮到時間的因素,就將一個4G左右的索引檔案audit_indx03.dbf移走吧:
SQL> conn /as sysdba
Connected.
SQL>
SQL>
SQL> alter tablespace AUDIT_INDX offline;
Tablespace altered.
SQL> !cp '/data/audit_indx03.dbf' '/home/oracle/oradata/emsaudt/audit_indx03.dbf';
SQL> alter tablespace AUDIT_INDX rename datafile '/data/audit_indx03.dbf' to '/home/oracle/oradata/emsaudt/audit_indx03.dbf';
Tablespace altered.
SQL> alter tablespace AUDIT_INDX online;
Tablespace altered.
移動成功。
但是/data目錄下的空間還沒有釋放出來,因為是cp的,那應該可以通過mv這個檔案,但是mv這個檔案空間也是不能釋放的,因為資料庫dbwr程式還在佔用這個檔案。那隻能將資料重啟釋放這個檔案控制程式碼,以釋放空間。。。想想這個思路應該沒有什麼問題,在徵求應用經理的同意後,我覺得這麼做。
[oracle@cpemsii-cx data]$ ll -rt
總用量 133824236
drwx------ 2 root root 16384 2009-09-18 lost+found
-rw-r----- 1 oracle oinstall 2097160192 11月 30 06:50 audit_indx02.dbf
-rw-r----- 1 oracle oinstall 5242888192 11月 30 06:51 audit_data05.dbf
-rw-r----- 1 oracle oinstall 34358697984 11月 30 06:51 audit_data03.dbf
-rw-r----- 1 oracle oinstall 21044928512 11月 30 07:04 audit_data04.dbf
-rw-r----- 1 oracle oinstall 4294975488 11月 30 11:04 audit_indx03.dbf
-rw-r----- 1 oracle oinstall 30260862976 11月 30 11:07 audit_indx06.dbf
-rw-r----- 1 oracle oinstall 3145736192 11月 30 11:07 audit_indx05.dbf
-rw-r----- 1 oracle oinstall 2097160192 11月 30 11:07 audit_indx04.dbf
-rw-r----- 1 oracle oinstall 34359730176 11月 30 11:07 audit_indx01.dbf[oracle@cpemsii-cx data]$ rm -rf audit_data03.dbf -----就是因為今天情緒低落,狀態不好,將這個檔案刪除錯了,本來應該是刪除udit_indx03.dbf,這就造就了後面的物理恢復!當時本人還不知道。
[oracle@cpemsii-cx data]$ df -h
Filesystem 容量 已用 可用 已用% 掛載點
/dev/cciss/c0d0p3 130G 80G 45G 65% /
/dev/cciss/c0d0p1 981M 25M 906M 3% /boot
none 16G 0 16G 0% /dev/shm
/dev/cciss/c0d1 135G 128G 3.8M 100% /data
[oracle@cpemsii-cx data]$ ll -rt
下面還是按照前面的思路,重啟資料庫!
SQL> shutdown immediate
ORA-01116: error in opening database file 14
ORA-01110: data file 14: '/data/audit_data03.dbf'
ORA-27041: unable to open file
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3
到這我才意識到自己刪錯檔案了,心理緊張了一把,這個庫平時不是太重要,沒有做任何備份!!!
此時我立馬想到了,此時絕對不能關閉資料庫,否則檔案控制程式碼釋放,這個檔案就徹底的沒了!
看了資料庫的總大小,不是很大。因此應該為了穩妥起見,先在另外一臺測試的伺服器上趁現在資料庫是open的將這個資料庫做一個邏輯備份。因為這個資料庫只有一個使用者,而且刪除的資料檔案都是這個使用者下的,因此只要做一個schema級別的邏輯備份就行。以防物理恢復失敗,好用這個邏輯備份來恢復。
想到這就在另一個測試環境上讓這個備份做著。
另一當面我得試試物理恢復了:
查詢資料庫寫程式:[oracle@cpemsii-cx emsaudt]$ ps -ef|grep dbw|grep -v grep
oracle 5409 1 0 2011 ? 23:32:58 ora_dbw0_emsaudt
oracle 5411 1 0 2011 ? 23:28:54 ora_dbw1_emsaudt
發現有兩個程式在寫:
[oracle@cpemsii-cx emsaudt]$ ll /proc/5409/fd/
總用量 42
lr-x------ 1 oracle oinstall 64 11月 30 12:19 0 -> /dev/null
lr-x------ 1 oracle oinstall 64 11月 30 12:19 1 -> /dev/null
lr-x------ 1 oracle oinstall 64 11月 30 12:19 10 -> /dev/zero
lr-x------ 1 oracle oinstall 64 11月 30 12:19 11 -> /dev/zero
lr-x------ 1 oracle oinstall 64 11月 30 12:19 12 -> /home/oracle/product/10.2.0/rdbms/mesg/orazhs.msb
lr-x------ 1 oracle oinstall 64 11月 30 12:19 13 -> /home/oracle/product/10.2.0/rdbms/mesg/oraus.msb
lrwx------ 1 oracle oinstall 64 11月 30 12:19 14 -> /home/oracle/product/10.2.0/dbs/hc_emsaudt.dat
lrwx------ 1 oracle oinstall 64 11月 30 12:19 15 -> /home/oracle/product/10.2.0/dbs/lkEMSAUDT
lrwx------ 1 oracle oinstall 64 11月 30 12:19 16 -> /home/oracle/oradata/emsaudt/control01.ctl
lrwx------ 1 oracle oinstall 64 11月 30 12:19 17 -> /home/oracle/oradata/emsaudt/control02.ctl
lrwx------ 1 oracle oinstall 64 11月 30 12:19 18 -> /home/oracle/oradata/emsaudt/control03.ctl
lrwx------ 1 oracle oinstall 64 11月 30 12:19 19 -> /home/oracle/oradata/emsaudt/system01.dbf
lr-x------ 1 oracle oinstall 64 11月 30 12:19 2 -> /dev/null
lrwx------ 1 oracle oinstall 64 11月 30 12:19 20 -> /home/oracle/oradata/emsaudt/undotbs01.dbf
lrwx------ 1 oracle oinstall 64 11月 30 12:19 21 -> /home/oracle/oradata/emsaudt/sysaux01.dbf
lrwx------ 1 oracle oinstall 64 11月 30 12:19 22 -> /home/oracle/oradata/emsaudt/users01.dbf
lrwx------ 1 oracle oinstall 64 11月 30 12:19 23 -> /home/oracle/oradata/emsaudt/audit_data01.dbf
lrwx------ 1 oracle oinstall 64 11月 30 12:19 24 -> socket:[806445420]
lrwx------ 1 oracle oinstall 64 11月 30 12:19 25 -> /home/oracle/oradata/emsaudt/snpm_data.pdf
lrwx------ 1 oracle oinstall 64 11月 30 12:19 26 -> /home/oracle/oradata/emsaudt/snpm_indx.pdf
lrwx------ 1 oracle oinstall 64 11月 30 12:19 27 -> /home/oracle/oradata/emsaudt/audit_data02.dbf
lrwx------ 1 oracle oinstall 64 11月 30 12:19 28 -> /data/audit_indx02.dbf
lrwx------ 1 oracle oinstall 64 11月 30 12:19 29 -> /data/audit_indx01.dbf
lr-x------ 1 oracle oinstall 64 11月 30 12:19 3 -> /dev/null
lrwx------ 1 oracle oinstall 64 11月 30 12:19 30 -> /home/oracle/oradata/emsaudt/audit_indx03.dbf
lrwx------ 1 oracle oinstall 64 11月 30 12:19 31 -> /data/audit_indx04.dbf
lrwx------ 1 oracle oinstall 64 11月 30 12:19 32 -> /data/audit_data03.dbf (deleted)
lrwx------ 1 oracle oinstall 64 11月 30 12:19 33 -> /data/audit_data04.dbf
lrwx------ 1 oracle oinstall 64 11月 30 12:19 34 -> /data/audit_indx05.dbf
lrwx------ 1 oracle oinstall 64 11月 30 12:19 35 -> /home/oracle/oradata/emsaudt/ems_monitor_dat.dbf
lrwx------ 1 oracle oinstall 64 11月 30 12:19 36 -> /home/oracle/oradata/emsaudt/temp01.dbf
lr-x------ 1 oracle oinstall 64 11月 30 12:19 37 -> /home/oracle/product/10.2.0/rdbms/mesg/orazhs.msb
lr-x------ 1 oracle oinstall 64 11月 30 12:19 38 -> /home/oracle/product/10.2.0/rdbms/mesg/oraus.msb
lrwx------ 1 oracle oinstall 64 11月 30 12:19 39 -> /data/audit_data05.dbf
lr-x------ 1 oracle oinstall 64 11月 30 12:19 4 -> /dev/null
lrwx------ 1 oracle oinstall 64 11月 30 12:19 40 -> /data/audit_indx06.dbf
lrwx------ 1 oracle oinstall 64 11月 30 12:19 41 -> /home/oracle/oradata/emsaudt/audit_data06.dbf
l-wx------ 1 oracle oinstall 64 11月 30 12:19 5 -> /home/oracle/admin/emsaudt/udump/emsaudt_ora_5399.trc
l-wx------ 1 oracle oinstall 64 11月 30 12:19 6 -> /home/oracle/admin/emsaudt/bdump/alert_emsaudt.log
lrwx------ 1 oracle oinstall 64 11月 30 12:19 7 -> /home/oracle/product/10.2.0/dbs/lkinstemsaudt (deleted)
l-wx------ 1 oracle oinstall 64 11月 30 12:19 8 -> /home/oracle/admin/emsaudt/bdump/alert_emsaudt.log
lrwx------ 1 oracle oinstall 64 11月 30 12:19 9 -> /home/oracle/product/10.2.0/dbs/hc_emsaudt.dat
[oracle@cpemsii-cx emsaudt]$ ll /proc/5411/fd/
總用量 30
lr-x------ 1 oracle oinstall 64 11月 30 12:20 0 -> /dev/null
lr-x------ 1 oracle oinstall 64 11月 30 12:20 1 -> /dev/null
lr-x------ 1 oracle oinstall 64 11月 30 12:20 10 -> /dev/zero
lr-x------ 1 oracle oinstall 64 11月 30 12:20 11 -> /dev/zero
lr-x------ 1 oracle oinstall 64 11月 30 12:20 12 -> /home/oracle/product/10.2.0/rdbms/mesg/orazhs.msb
lr-x------ 1 oracle oinstall 64 11月 30 12:20 13 -> /home/oracle/product/10.2.0/rdbms/mesg/oraus.msb
lrwx------ 1 oracle oinstall 64 11月 30 12:20 14 -> /home/oracle/product/10.2.0/dbs/hc_emsaudt.dat
lrwx------ 1 oracle oinstall 64 11月 30 12:20 15 -> /home/oracle/product/10.2.0/dbs/lkEMSAUDT
lr-x------ 1 oracle oinstall 64 11月 30 12:20 16 -> /home/oracle/product/10.2.0/rdbms/mesg/orazhs.msb
lr-x------ 1 oracle oinstall 64 11月 30 12:20 17 -> /home/oracle/product/10.2.0/rdbms/mesg/oraus.msb
lrwx------ 1 oracle oinstall 64 11月 30 12:20 18 -> /home/oracle/oradata/emsaudt/system01.dbf
lrwx------ 1 oracle oinstall 64 11月 30 12:20 19 -> /home/oracle/oradata/emsaudt/undotbs01.dbf
lr-x------ 1 oracle oinstall 64 11月 30 12:20 2 -> /dev/null
lrwx------ 1 oracle oinstall 64 11月 30 12:20 20 -> /home/oracle/oradata/emsaudt/sysaux01.dbf
lrwx------ 1 oracle oinstall 64 11月 30 12:20 21 -> /home/oracle/oradata/emsaudt/audit_data01.dbf
lrwx------ 1 oracle oinstall 64 11月 30 12:20 22 -> /home/oracle/oradata/emsaudt/audit_data02.dbf
lrwx------ 1 oracle oinstall 64 11月 30 12:20 23 -> /home/oracle/oradata/emsaudt/audit_data06.dbf
lrwx------ 1 oracle oinstall 64 11月 30 12:20 24 -> /data/audit_indx06.dbf
lrwx------ 1 oracle oinstall 64 11月 30 12:20 28 -> /data/audit_data03.dbf (deleted)
lrwx------ 1 oracle oinstall 64 11月 30 12:20 29 -> /data/audit_data04.dbf
lr-x------ 1 oracle oinstall 64 11月 30 12:20 3 -> /dev/null
lrwx------ 1 oracle oinstall 64 11月 30 12:20 30 -> /data/audit_indx02.dbf
lrwx------ 1 oracle oinstall 64 11月 30 12:20 31 -> /home/oracle/oradata/emsaudt/temp01.dbf
lrwx------ 1 oracle oinstall 64 11月 30 12:20 32 -> /data/audit_data05.dbf
lr-x------ 1 oracle oinstall 64 11月 30 12:20 4 -> /dev/null
l-wx------ 1 oracle oinstall 64 11月 30 12:20 5 -> /home/oracle/admin/emsaudt/udump/emsaudt_ora_5399.trc
l-wx------ 1 oracle oinstall 64 11月 30 12:20 6 -> /home/oracle/admin/emsaudt/bdump/alert_emsaudt.log
lrwx------ 1 oracle oinstall 64 11月 30 12:20 7 -> /home/oracle/product/10.2.0/dbs/lkinstemsaudt (deleted)
l-wx------ 1 oracle oinstall 64 11月 30 12:20 8 -> /home/oracle/admin/emsaudt/bdump/alert_emsaudt.log
lrwx------ 1 oracle oinstall 64 11月 30 12:20 9 -> /home/oracle/product/10.2.0/dbs/hc_emsaudt.dat
發現刪除的檔案還在這兩個目錄下,看看/目錄下還有49G,而刪除的檔案是32G,可以考慮將這個刪除的檔案物理恢復到$ORACLE_BASE/oradata/emsaudit下。
[oracle@cpemsii-cx fd]$ cp /proc/5409/fd/32 /home/oracle/oradata/emsaudit/audit_data03.dbf
恢復完後發現這個檔案大小是34358697984。和原來的一樣大小。
應該就是這個檔案吧。但是還想到5411目錄下還有一個檔案,當時害怕這個檔案也起作用,當時為了穩妥起見就將5411目錄下的檔案恢復到測試庫上暫時放在,以防後面需要用。
[oracle@cpemsii-cx fd]$ scp /proc/5411/fd/28 oracle@192.xx.xx.xx:/orabak/audit_data03.dbf
恢復完這個檔案也是34358697984這麼大,應該恢復的檔案是一樣的,那就先暫且用本機上恢復的檔案吧。
步驟:
SQL> alter database datafile 14 offline;
alter database datafile 14 offline
*
ERROR at line 1:
ORA-01145: offline immediate disallowed unless media recovery enabled
--由於資料庫未作歸檔,offline資料檔案需要新增drop選項。
SQL> alter database datafile 14 offline drop;
Database altered.
SQL> alter database rename file '/data/audit_data03.dbf' to '/home/oracle/oradata/audit/audit_data03.dbf';
Database altered.
SQL> recover datafile 14;
Media recovery complete.
SQL> alter database datafile 14 online;
Database altered.
資料檔案恢復成功!
切換日誌:
SQL> alter system switch logfile;
System altered.
檢視alert日誌:
Private strand flush not complete
Current log# 2 seq# 97073 mem# 0: /home/oracle/oradata/emsaudt/redo02.log
Fri Nov 30 15:59:07 2012
Thread 1 advanced to log sequence 97074 (LGWR switch)
Current log# 3 seq# 97074 mem# 0: /home/oracle/oradata/emsaudt/redo03.log
資料庫沒有報錯:
在檢視/data空間。發現已經釋放了:
[oracle@cpemsii-cx ~]$ df -h
Filesystem 容量 已用 可用 已用% 掛載點
/dev/cciss/c0d0p3 130G 89G 13G 68% /
/dev/cciss/c0d0p1 981M 25M 906M 3% /boot
none 16G 0 16G 0% /dev/shm
/dev/cciss/c0d1 135G 96G 32G 71% /data
問題暫時解決了,但是長久來看空間還是很少,需要新增物理磁碟來解決。
和領導彙報了此事,領導答應了。
--總結:
在處理這個問題的過程本來不需要做物理恢復的,就是由於本人當時犯的錯誤,好在能及時意識到問題的嚴重性且找到了解決思路。否則這次就麻煩大了,因此對這件事內心還是挺愧疚的,做了5年的DBA沒有出現過誤刪除檔案的事情,這次主要還是心情太複雜,狀態太差,處理問題不細心導致的,以後一定要警鐘長鳴,切忌做到細心,細心,再細心。。。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12129601/viewspace-750353/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- OS 刪除oracle資料檔案恢復過程Oracle
- 恢復rm -f物理刪除資料檔案
- 通過檔案控制程式碼恢復刪除的資料檔案
- Oracle恢復誤刪除的資料檔案Oracle
- RM 刪除資料檔案恢復操作
- 恢復刪除的檔案
- 刪除檔案的恢復
- 【資料庫資料恢復】透過恢復NDF檔案修復資料庫的資料恢復過程資料庫資料恢復
- 恢復被rm意外刪除資料檔案
- Oracle資料恢復 - Linux / Unix 誤刪除的檔案恢復(轉)Oracle資料恢復Linux
- linux下恢復誤刪除的資料檔案Linux
- Git恢復刪除的檔案Git
- 誤刪除資料檔案、控制檔案的非RMAN恢復方法
- 使用檔案描述符恢復誤刪除的資料檔案
- 行動硬碟刪除的檔案能恢復嗎,怎樣恢復刪除的檔案硬碟
- 儲存過程誤刪除的恢復儲存過程
- 歸檔模式下,線上刪除資料檔案的完全恢復模式
- 怎樣恢復回收站已刪除檔案,檔案刪除恢復教程
- Oracle資料庫意外刪除資料檔案的恢復(轉載)Oracle資料庫
- 資料庫的一次資料恢復過程資料庫資料恢復
- 透過控制程式碼檔案恢復linux下誤刪除的資料檔案Linux
- 行動硬碟刪除的檔案能恢復嗎,怎麼恢復硬碟刪除的檔案硬碟
- linux下恢復誤刪除oracle的資料檔案LinuxOracle
- MySQL誤刪物理檔案的恢復(Linux)MySqlLinux
- 一次心驚肉跳的伺服器誤刪檔案的恢復過程伺服器
- 電腦裡刪除的檔案怎麼恢復,資料恢復方法大全資料恢復
- EMC UNITY 400儲存卷刪除資料恢復操作過程Unity資料恢復
- 【資料庫資料恢復】Sql Server資料庫檔案丟失的資料恢復過程資料庫資料恢復SQLServer
- 無備份恢復(歸檔模式)已刪除資料檔案模式
- 【北亞資料恢復】zfs檔案系統的伺服器誤刪除的資料恢復資料恢復伺服器
- sd卡中的資料夾刪除了怎麼恢復,SD卡刪除的檔案如何恢復SD卡
- linux中誤刪除oracle資料檔案的恢復操作LinuxOracle
- 資料檔案誤刪--但有資料檔案的copy恢復
- 一次Oracle資料庫恢復過程Oracle資料庫
- linux下 恢復被rm意外刪除資料檔案Linux
- sd卡刪除的檔案如何恢復SD卡
- Shift + Delete刪除的檔案如何恢復?delete
- 使用lsof恢復誤刪除的檔案