当前位置: 首页 > Linux, Oracle, oracle 10g, oracle 11g > 正文

UNIX/LINUX平台ORACLE误删除数据文件恢复测试

年前公司同事恢复了一个客户在HP UNIX平台误删除数据文件的案例,由于年底较忙,今天有时间做了个模拟测试。

SQL> select name from v$datafile;

NAME
---------------------------------------------
/u01/app/oracle/oradata/stream/system01.dbf
/u01/app/oracle/oradata/stream/undotbs01.dbf
/u01/app/oracle/oradata/stream/sysaux01.dbf
/u01/app/oracle/oradata/stream/user01.dbf
/u01/app/oracle/oradata/stream/stream01.dbf

在操作系统上删除USER01.DBF文件。

SQL> !rm -rf /u01/app/oracle/oradata/stream/user01.dbf

此时如果查询这个文件内的小表,还是可以查询,但是如果在这个数据文件对应的表空间建表就会报错。

SQL> conn scott/tiger
Connected.
SQL> select count(*) from emp;

  COUNT(*)
----------
	14
SQL> create table test as select * from emp;
create table test as select * from emp
                                   *
ERROR at line 1:
ORA-01116: error in opening database file 4
ORA-01110: data file 4: '/u01/app/oracle/oradata/stream/user01.dbf'
ORA-27041: unable to open file
Linux Error: 2: No such file or directory
Additional information: 3

此时不要关闭数据库实例,否则这种方法将无法恢复数据库,查看DBWN在操作系统的进程号。

[oracle@dbserver1 stream]$ ps -ef | grep dbw
oracle    2261     1  0 14:57 ?        00:00:11 ora_dbw0_stream

进入2261进程的目录,查看删除操作对应的信息,由于数据文件被DBWN进程使用,而且DBWN进程一直在启动状态,此时在DBWN进程对应的目录下面可以查看到被删除的数据文件信息,如果DBWN进程关闭,这种方式就无法查到。

[oracle@dbserver1 stream]$ cd /proc/2261/fd
[oracle@dbserver1 fd]$ ls -lrt
总用量 0
l-wx------. 1 oracle oinstall 64  2月 14 17:10 5 -> /u01/app/oracle/admin
/stream/udump/stream_ora_2253.trc
lrwx------. 1 oracle oinstall 64  2月 14 17:10 9 -> /u01/app/oracle/product
/10.2.0/db_1/dbs/hc_stream.dat
l-wx------. 1 oracle oinstall 64  2月 14 17:10 8 -> /u01/app/oracle/admin
/stream/bdump/alert_stream.log
lrwx------. 1 oracle oinstall 64  2月 14 17:10 7 -> /u01/app/oracle/product
/10.2.0/db_1/dbs/lkinststream (deleted)
l-wx------. 1 oracle oinstall 64  2月 14 17:10 6 -> /u01/app/oracle/admin
/stream/bdump/alert_stream.log
lr-x------. 1 oracle oinstall 64  2月 14 17:10 25 -
> /u01/app/oracle/product/10.2.0/db_1/rdbms/mesg/oraus.msb
lrwx------. 1 oracle oinstall 64  2月 14 17:10 24 -> /u01/app/oracle/oradata
/stream/temp01.dbf
lrwx------. 1 oracle oinstall 64  2月 14 17:10 23 -> /u01/app/oracle/oradata
/stream/stream01.dbf
lrwx------. 1 oracle oinstall 64  2月 14 17:10 22 -> /u01/app/oracle/oradata
/stream/user01.dbf (deleted)
......
lr-x------. 1 oracle oinstall 64  2月 14 17:10 12 -> /dev/zero
lr-x------. 1 oracle oinstall 64  2月 14 17:10 11 -> /dev/zero
lrwx------. 1 oracle oinstall 64  2月 14 17:10 10 -> /u01/app/oracle/admin/
stream/adump/ora_2253.aud

此时可以直接将被删除的数据文件拷贝回去,如下:

[oracle@dbserver1 fd]$ cp 22 /u01/app/oracle/oradata/stream/user01.dbf

关闭数据库,重启后提示需要对误删除的数据文件做恢复操作。

SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORACLE instance started.
Total System Global Area  285212672 bytes
Fixed Size		    1218992 bytes
Variable Size		  100664912 bytes
Database Buffers	  180355072 bytes
Redo Buffers		    2973696 bytes
Database mounted.
ORA-01113: file 4 needs media recovery
ORA-01110: data file 4: '/u01/app/oracle/oradata/stream/user01.dbf'

对误删除的数据文件做恢复后,数据库可以打开。

SQL> recover database;
Media recovery complete.
SQL> alter database open;
Database altered.

在数据库实例没有关闭的情况下,误删除数据文件可以通过这种方法很简单的恢复回来。

本文固定链接: http://www.dbdream.com.cn/2012/02/unixlinux%e5%b9%b3%e5%8f%b0oracle%e8%af%af%e5%88%a0%e9%99%a4%e6%95%b0%e6%8d%ae%e6%96%87%e4%bb%b6%e6%81%a2%e5%a4%8d%e6%b5%8b%e8%af%95/ | 信春哥,系统稳,闭眼上线不回滚!

该日志由 dbdream 于2012年02月21日发表在 Linux, Oracle, oracle 10g, oracle 11g 分类下, 你可以发表评论,并在保留原文地址及作者的情况下引用到你的网站或博客。
原创文章转载请注明: UNIX/LINUX平台ORACLE误删除数据文件恢复测试 | 信春哥,系统稳,闭眼上线不回滚!
关键字: ,

UNIX/LINUX平台ORACLE误删除数据文件恢复测试:等您坐沙发呢!

发表评论

快捷键:Ctrl+Enter