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>
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/8520577/viewspace-1962499/
,如需转载,请注明出处,否则将追究法律责任。