ITPub博客

首页 > 数据库 > Oracle > Linux下误删数据文件从文件句柄恢复数据文件

Linux下误删数据文件从文件句柄恢复数据文件

原创 Oracle 作者:abstractcyj 时间:2015-12-25 19:32:28 0 删除 编辑
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/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
曾从事java方向开发多年。近年已经转入数据库方向。主要擅长SQL优化,Oracle数据库问题诊断,Oracle备份与恢复等。服务于医药物流,医院等行业

注册时间:2010-01-26

  • 博文量
    602
  • 访问量
    1091610