Linux下誤刪資料檔案從檔案控制程式碼恢復資料檔案
Linux作業系統中,如果檔案從作業系統級別被rm掉,之前開啟檔案的程式仍然持有相應的檔案控制程式碼,所指向的檔案仍然可以讀寫,並且該檔案的檔案描述符仍然可以從/proc目錄讀取。
但是,此時如果關閉資料庫,則此控制程式碼會消失,除了掃描磁碟進行檔案恢復外就沒有其他辦法了。因此在資料庫出現問題的時候,如果不確認情況的複雜程度,千萬不要隨便關閉資料庫。重啟資料庫往往是沒有意義的,甚至是致命的。
原文連結:
http://www.eygle.com/archives/2011/12/oracle_linux_rm_rf.html
以下是我的操作過程。刪除檔案之後,資料庫alert日誌裡出現了警告資訊:
WARNING: inbound connection timed out (ORA-3136)
Fri Dec 25 19:16:26 2015
Errors in file /u01/app/oracle/diag/rdbms/dup01/dup01/trace/dup01_m000_2493.trc:
ORA-01116: error in opening database file 4
ORA-01110: data file 4: '/u01/app/oracle/oradata/test01/users01.dbf'
ORA-27041: unable to open file
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3
[oracle@db02 test01]$ ls -l
total 1765152
-rw-r-----. 1 oracle oinstall 10076160 Dec 25 19:14 control01.ctl
-rw-r-----. 1 oracle oinstall 328343552 Dec 26 2015 example01.dbf
-rw-r-----. 1 oracle oinstall 566239232 Dec 25 19:12 sysaux01.dbf
-rw-r-----. 1 oracle oinstall 786440192 Dec 25 19:11 system01.dbf
-rw-r-----. 1 oracle oinstall 30416896 Dec 26 2015 temp01.dbf
-rw-r-----. 1 oracle oinstall 110108672 Dec 25 19:11 undotbs01.dbf
-rw-r-----. 1 oracle oinstall 5251072 Dec 26 2015 users01.dbf
[oracle@db02 test01]$ rm users01.dbf
[oracle@db02 test01]$ ls -l
total 1760024
-rw-r-----. 1 oracle oinstall 10076160 Dec 25 19:16 control01.ctl
-rw-r-----. 1 oracle oinstall 328343552 Dec 26 2015 example01.dbf
-rw-r-----. 1 oracle oinstall 566239232 Dec 25 19:12 sysaux01.dbf
-rw-r-----. 1 oracle oinstall 786440192 Dec 25 19:15 system01.dbf
-rw-r-----. 1 oracle oinstall 30416896 Dec 26 2015 temp01.dbf
-rw-r-----. 1 oracle oinstall 110108672 Dec 25 19:11 undotbs01.dbf
[oracle@db02 test01]$ ps -ef|grep dbw0|grep -v grep
oracle 2220 1 0 19:05 ? 00:00:00 ora_dbw0_test01
oracle 2269 1 0 19:06 ? 00:00:00 ora_dbw0_dup01
[oracle@db02 test01]$ cd /proc/2269/fd
[oracle@db02 fd]$ ls -l
total 0
lr-x------. 1 oracle oinstall 64 Dec 25 19:18 0 -> /dev/null
l-wx------. 1 oracle oinstall 64 Dec 25 19:18 1 -> /dev/null
lrwx------. 1 oracle oinstall 64 Dec 25 19:18 10 -> /u01/app/oracle/product/11.2.0/dbhome_1/dbs/lkDUP01
l-wx------. 1 oracle oinstall 64 Dec 25 19:18 11 -> /u01/app/oracle/diag/rdbms/dup01/dup01/trace/dup01_dbw0_2269.trc
l-wx------. 1 oracle oinstall 64 Dec 25 19:18 12 -> /u01/app/oracle/diag/rdbms/dup01/dup01/trace/dup01_dbw0_2269.trm
lr-x------. 1 oracle oinstall 64 Dec 25 19:18 13 -> /u01/app/oracle/product/11.2.0/dbhome_1/rdbms/mesg/oraus.msb
l-wx------. 1 oracle oinstall 64 Dec 25 19:18 2 -> /dev/null
lrwx------. 1 oracle oinstall 64 Dec 25 19:18 256 -> /u01/app/oracle/oradata/test01/control01.ctl
lrwx------. 1 oracle oinstall 64 Dec 25 19:18 257 -> /u01/app/oracle/fast_recovery_area/test01/control02.ctl
lrwx------. 1 oracle oinstall 64 Dec 25 19:18 258 -> /u01/app/oracle/oradata/test01/system01.dbf
lrwx------. 1 oracle oinstall 64 Dec 25 19:18 259 -> /u01/app/oracle/oradata/test01/sysaux01.dbf
lrwx------. 1 oracle oinstall 64 Dec 25 19:18 260 -> /u01/app/oracle/oradata/test01/undotbs01.dbf
lrwx------. 1 oracle oinstall 64 Dec 25 19:18 261 -> /u01/app/oracle/oradata/test01/users01.dbf (deleted)
lrwx------. 1 oracle oinstall 64 Dec 25 19:18 262 -> /u01/app/oracle/oradata/test01/example01.dbf
lrwx------. 1 oracle oinstall 64 Dec 25 19:18 263 -> /u01/app/oracle/oradata/test01/temp01.dbf
lr-x------. 1 oracle oinstall 64 Dec 25 19:18 3 -> /dev/null
lr-x------. 1 oracle oinstall 64 Dec 25 19:18 4 -> /dev/null
lr-x------. 1 oracle oinstall 64 Dec 25 19:18 5 -> /dev/null
lr-x------. 1 oracle oinstall 64 Dec 25 19:18 6 -> /u01/app/oracle/product/11.2.0/dbhome_1/rdbms/mesg/oraus.msb
lr-x------. 1 oracle oinstall 64 Dec 25 19:18 7 -> /proc/2269/fd
lr-x------. 1 oracle oinstall 64 Dec 25 19:18 8 -> /dev/zero
lrwx------. 1 oracle oinstall 64 Dec 25 19:18 9 -> /u01/app/oracle/product/11.2.0/dbhome_1/dbs/hc_dup01.dat
[oracle@db02 fd]$ cp 261 /u01/app/oracle/oradata/test01/users01.dbf
[oracle@db02 fd]$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.4.0 Production on Fri Dec 25 19:20:27 2015
Copyright (c) 1982, 2013, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> select name from v$datafile;
NAME
--------------------------------------------------------------------------------
/u01/app/oracle/oradata/test01/system01.dbf
/u01/app/oracle/oradata/test01/sysaux01.dbf
/u01/app/oracle/oradata/test01/undotbs01.dbf
/u01/app/oracle/oradata/test01/users01.dbf
/u01/app/oracle/oradata/test01/example01.dbf
SQL> desc v$datafile;
Name Null? Type
----------------------------------------- -------- ----------------------------
FILE# NUMBER
CREATION_CHANGE# NUMBER
CREATION_TIME DATE
TS# NUMBER
RFILE# NUMBER
STATUS VARCHAR2(7)
ENABLED VARCHAR2(10)
CHECKPOINT_CHANGE# NUMBER
CHECKPOINT_TIME DATE
UNRECOVERABLE_CHANGE# NUMBER
UNRECOVERABLE_TIME DATE
LAST_CHANGE# NUMBER
LAST_TIME DATE
OFFLINE_CHANGE# NUMBER
ONLINE_CHANGE# NUMBER
ONLINE_TIME DATE
BYTES NUMBER
BLOCKS NUMBER
CREATE_BYTES NUMBER
BLOCK_SIZE NUMBER
NAME VARCHAR2(513)
PLUGGED_IN NUMBER
BLOCK1_OFFSET NUMBER
AUX_NAME VARCHAR2(513)
FIRST_NONLOGGED_SCN NUMBER
FIRST_NONLOGGED_TIME DATE
FOREIGN_DBID NUMBER
FOREIGN_CREATION_CHANGE# NUMBER
FOREIGN_CREATION_TIME DATE
PLUGGED_READONLY VARCHAR2(3)
PLUGIN_CHANGE# NUMBER
PLUGIN_RESETLOGS_CHANGE# NUMBER
PLUGIN_RESETLOGS_TIME DATE
SQL> select file#,name from v$datafile;
FILE#
----------
NAME
--------------------------------------------------------------------------------
1
/u01/app/oracle/oradata/test01/system01.dbf
2
/u01/app/oracle/oradata/test01/sysaux01.dbf
3
/u01/app/oracle/oradata/test01/undotbs01.dbf
FILE#
----------
NAME
--------------------------------------------------------------------------------
4
/u01/app/oracle/oradata/test01/users01.dbf
5
/u01/app/oracle/oradata/test01/example01.dbf
SQL> alter database datafile 4 offline;
Database altered.
SQL> recover datafile 4;
Media recovery complete.
SQL> alter database datafile 4 online;
Database altered.
SQL>
但是,此時如果關閉資料庫,則此控制程式碼會消失,除了掃描磁碟進行檔案恢復外就沒有其他辦法了。因此在資料庫出現問題的時候,如果不確認情況的複雜程度,千萬不要隨便關閉資料庫。重啟資料庫往往是沒有意義的,甚至是致命的。
原文連結:
http://www.eygle.com/archives/2011/12/oracle_linux_rm_rf.html
以下是我的操作過程。刪除檔案之後,資料庫alert日誌裡出現了警告資訊:
WARNING: inbound connection timed out (ORA-3136)
Fri Dec 25 19:16:26 2015
Errors in file /u01/app/oracle/diag/rdbms/dup01/dup01/trace/dup01_m000_2493.trc:
ORA-01116: error in opening database file 4
ORA-01110: data file 4: '/u01/app/oracle/oradata/test01/users01.dbf'
ORA-27041: unable to open file
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3
[oracle@db02 test01]$ ls -l
total 1765152
-rw-r-----. 1 oracle oinstall 10076160 Dec 25 19:14 control01.ctl
-rw-r-----. 1 oracle oinstall 328343552 Dec 26 2015 example01.dbf
-rw-r-----. 1 oracle oinstall 566239232 Dec 25 19:12 sysaux01.dbf
-rw-r-----. 1 oracle oinstall 786440192 Dec 25 19:11 system01.dbf
-rw-r-----. 1 oracle oinstall 30416896 Dec 26 2015 temp01.dbf
-rw-r-----. 1 oracle oinstall 110108672 Dec 25 19:11 undotbs01.dbf
-rw-r-----. 1 oracle oinstall 5251072 Dec 26 2015 users01.dbf
[oracle@db02 test01]$ rm users01.dbf
[oracle@db02 test01]$ ls -l
total 1760024
-rw-r-----. 1 oracle oinstall 10076160 Dec 25 19:16 control01.ctl
-rw-r-----. 1 oracle oinstall 328343552 Dec 26 2015 example01.dbf
-rw-r-----. 1 oracle oinstall 566239232 Dec 25 19:12 sysaux01.dbf
-rw-r-----. 1 oracle oinstall 786440192 Dec 25 19:15 system01.dbf
-rw-r-----. 1 oracle oinstall 30416896 Dec 26 2015 temp01.dbf
-rw-r-----. 1 oracle oinstall 110108672 Dec 25 19:11 undotbs01.dbf
[oracle@db02 test01]$ ps -ef|grep dbw0|grep -v grep
oracle 2220 1 0 19:05 ? 00:00:00 ora_dbw0_test01
oracle 2269 1 0 19:06 ? 00:00:00 ora_dbw0_dup01
[oracle@db02 test01]$ cd /proc/2269/fd
[oracle@db02 fd]$ ls -l
total 0
lr-x------. 1 oracle oinstall 64 Dec 25 19:18 0 -> /dev/null
l-wx------. 1 oracle oinstall 64 Dec 25 19:18 1 -> /dev/null
lrwx------. 1 oracle oinstall 64 Dec 25 19:18 10 -> /u01/app/oracle/product/11.2.0/dbhome_1/dbs/lkDUP01
l-wx------. 1 oracle oinstall 64 Dec 25 19:18 11 -> /u01/app/oracle/diag/rdbms/dup01/dup01/trace/dup01_dbw0_2269.trc
l-wx------. 1 oracle oinstall 64 Dec 25 19:18 12 -> /u01/app/oracle/diag/rdbms/dup01/dup01/trace/dup01_dbw0_2269.trm
lr-x------. 1 oracle oinstall 64 Dec 25 19:18 13 -> /u01/app/oracle/product/11.2.0/dbhome_1/rdbms/mesg/oraus.msb
l-wx------. 1 oracle oinstall 64 Dec 25 19:18 2 -> /dev/null
lrwx------. 1 oracle oinstall 64 Dec 25 19:18 256 -> /u01/app/oracle/oradata/test01/control01.ctl
lrwx------. 1 oracle oinstall 64 Dec 25 19:18 257 -> /u01/app/oracle/fast_recovery_area/test01/control02.ctl
lrwx------. 1 oracle oinstall 64 Dec 25 19:18 258 -> /u01/app/oracle/oradata/test01/system01.dbf
lrwx------. 1 oracle oinstall 64 Dec 25 19:18 259 -> /u01/app/oracle/oradata/test01/sysaux01.dbf
lrwx------. 1 oracle oinstall 64 Dec 25 19:18 260 -> /u01/app/oracle/oradata/test01/undotbs01.dbf
lrwx------. 1 oracle oinstall 64 Dec 25 19:18 261 -> /u01/app/oracle/oradata/test01/users01.dbf (deleted)
lrwx------. 1 oracle oinstall 64 Dec 25 19:18 262 -> /u01/app/oracle/oradata/test01/example01.dbf
lrwx------. 1 oracle oinstall 64 Dec 25 19:18 263 -> /u01/app/oracle/oradata/test01/temp01.dbf
lr-x------. 1 oracle oinstall 64 Dec 25 19:18 3 -> /dev/null
lr-x------. 1 oracle oinstall 64 Dec 25 19:18 4 -> /dev/null
lr-x------. 1 oracle oinstall 64 Dec 25 19:18 5 -> /dev/null
lr-x------. 1 oracle oinstall 64 Dec 25 19:18 6 -> /u01/app/oracle/product/11.2.0/dbhome_1/rdbms/mesg/oraus.msb
lr-x------. 1 oracle oinstall 64 Dec 25 19:18 7 -> /proc/2269/fd
lr-x------. 1 oracle oinstall 64 Dec 25 19:18 8 -> /dev/zero
lrwx------. 1 oracle oinstall 64 Dec 25 19:18 9 -> /u01/app/oracle/product/11.2.0/dbhome_1/dbs/hc_dup01.dat
[oracle@db02 fd]$ cp 261 /u01/app/oracle/oradata/test01/users01.dbf
[oracle@db02 fd]$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.4.0 Production on Fri Dec 25 19:20:27 2015
Copyright (c) 1982, 2013, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> select name from v$datafile;
NAME
--------------------------------------------------------------------------------
/u01/app/oracle/oradata/test01/system01.dbf
/u01/app/oracle/oradata/test01/sysaux01.dbf
/u01/app/oracle/oradata/test01/undotbs01.dbf
/u01/app/oracle/oradata/test01/users01.dbf
/u01/app/oracle/oradata/test01/example01.dbf
SQL> desc v$datafile;
Name Null? Type
----------------------------------------- -------- ----------------------------
FILE# NUMBER
CREATION_CHANGE# NUMBER
CREATION_TIME DATE
TS# NUMBER
RFILE# NUMBER
STATUS VARCHAR2(7)
ENABLED VARCHAR2(10)
CHECKPOINT_CHANGE# NUMBER
CHECKPOINT_TIME DATE
UNRECOVERABLE_CHANGE# NUMBER
UNRECOVERABLE_TIME DATE
LAST_CHANGE# NUMBER
LAST_TIME DATE
OFFLINE_CHANGE# NUMBER
ONLINE_CHANGE# NUMBER
ONLINE_TIME DATE
BYTES NUMBER
BLOCKS NUMBER
CREATE_BYTES NUMBER
BLOCK_SIZE NUMBER
NAME VARCHAR2(513)
PLUGGED_IN NUMBER
BLOCK1_OFFSET NUMBER
AUX_NAME VARCHAR2(513)
FIRST_NONLOGGED_SCN NUMBER
FIRST_NONLOGGED_TIME DATE
FOREIGN_DBID NUMBER
FOREIGN_CREATION_CHANGE# NUMBER
FOREIGN_CREATION_TIME DATE
PLUGGED_READONLY VARCHAR2(3)
PLUGIN_CHANGE# NUMBER
PLUGIN_RESETLOGS_CHANGE# NUMBER
PLUGIN_RESETLOGS_TIME DATE
SQL> select file#,name from v$datafile;
FILE#
----------
NAME
--------------------------------------------------------------------------------
1
/u01/app/oracle/oradata/test01/system01.dbf
2
/u01/app/oracle/oradata/test01/sysaux01.dbf
3
/u01/app/oracle/oradata/test01/undotbs01.dbf
FILE#
----------
NAME
--------------------------------------------------------------------------------
4
/u01/app/oracle/oradata/test01/users01.dbf
5
/u01/app/oracle/oradata/test01/example01.dbf
SQL> alter database datafile 4 offline;
Database altered.
SQL> recover datafile 4;
Media recovery complete.
SQL> alter database datafile 4 online;
Database altered.
SQL>
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8520577/viewspace-1962499/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 透過控制程式碼檔案恢復linux下誤刪除的資料檔案Linux
- 資料檔案誤刪--但有資料檔案的copy恢復
- 誤刪除資料檔案、控制檔案的非RMAN恢復方法
- 通過檔案控制程式碼恢復刪除的資料檔案
- linux下恢復誤刪除的資料檔案Linux
- 通過控制程式碼恢復Linux下誤刪除的資料庫資料檔案Linux資料庫
- linux下恢復誤刪除oracle的資料檔案LinuxOracle
- 使用檔案描述符恢復誤刪除的資料檔案
- Oracle恢復誤刪除的資料檔案Oracle
- 引數檔案控制檔案和資料檔案丟失的恢復
- 控制檔案恢復—從trace檔案中恢復
- Oracle資料恢復 - Linux / Unix 誤刪除的檔案恢復(轉)Oracle資料恢復Linux
- linux下 恢復被rm意外刪除資料檔案Linux
- RMAN恢復表空間,資料檔案,歸檔檔案,控制檔案等介紹
- linux中誤刪除oracle資料檔案的恢復操作LinuxOracle
- RMAN恢復案例:無恢復目錄,丟失全部資料檔案、控制檔案、日誌檔案恢復
- 同時丟失控制檔案與資料檔案的恢復
- 歸檔模式下,線上刪除資料檔案的完全恢復模式
- 伺服器儲存檔案誤刪資料恢復伺服器資料恢復
- RM 刪除資料檔案恢復操作
- 【/proc/檔案淺析】另類辦法恢復資料檔案和控制檔案
- 備份與恢復--重建控制檔案後資料檔案損壞的恢復
- 在歸檔下恢復系統資料檔案
- 誤刪資料檔案在沒有歸檔的情況下恢復實驗
- 【伺服器資料恢復】Zfs檔案系統下誤刪除怎麼恢復資料伺服器資料恢復
- linux中誤刪除oracle資料檔案的恢復操作(轉)LinuxOracle
- dbms_backup_restore包恢復控制檔案,資料檔案,歸檔檔案的測試案例REST
- 恢復rm -f物理刪除資料檔案
- 恢復被rm意外刪除資料檔案
- 歸檔模式有備份丟失控制檔案和資料檔案後恢復模式
- 歸檔模式下資料檔案丟失的恢復模式
- 無備份丟失部分資料檔案和控制檔案恢復 [轉]
- 恢復之重建資料檔案
- eclipse 恢復誤刪檔案Eclipse
- lsof恢復誤刪的檔案
- MySQL資料災難挽救之ibdata檔案誤刪恢復MySql
- oracle11g 資料檔案誤刪恢復(無備份)Oracle
- 恢復測試:擁有當時的全部歸檔,控制檔案,恢復丟失的資料檔案。