通过文件句柄恢复数据文件
1.删除数据文件
[hrmsoraclone@hrmodbt01 HRMCLONE]$ rm -f paapp.dbf
2.查询dbwr进程pid
[hrmsoraclone@hrmodbt01 HRMCLONE]$ ps -ef|grep dbw|grep -v grep
506 3985 1 0 Jul17 ? 00:00:02 ora_dbw0_HRMCLONE
3.dbwr进程会打开所有访问数据文件的句柄。
[hrmsoraclone@hrmodbt01 HRMCLONE]$ cd /proc/3985/fd
[hrmsoraclone@hrmodbt01 fd]$ ls -l
total 0
lr-x------ 1 hrmsoraclone dba 64 Jul 19 14:55 0 -> /dev/null
lr-x------ 1 hrmsoraclone dba 64 Jul 19 14:55 1 -> /dev/null
lr-x------ 1 hrmsoraclone dba 64 Jul 19 14:55 10 -> /dev/zero
lrwx------ 1 hrmsoraclone dba 64 Jul 19 14:55 100 -> /uhrms/hrmclone/hrmclonedata/HRMCLONE/paapp.dbf (deleted)
lrwx------ 1 hrmsoraclone dba 64 Jul 19 14:55 101 -> /uhrms/hrmclone/hrmclonedata/HRMCLONE/palarge.dbf
lrwx------ 1 hrmsoraclone dba 64 Jul 19 14:55 102 -> /uhrms/hrmclone/hrmclonedata/HRMCLONE/pcapp.dbf
4.通过copy文件句柄方式恢复数据文件到原位置
[hrmsoraclone@hrmodbt01 fd]$ cp /proc/3985/fd/100 /uhrms/hrmclone/hrmclonedata/HRMCLONE/paapp.dbf
5.查看文件的文件号
sys@HRMCLONE(10.70.38.162)> select file#, name from v$datafile where name like '%paapp%';
FILE# NAME
----- ------------------------------------------------------------
83 /uhrms/hrmclone/hrmclonedata/HRMCLONE/paapp.dbf
6.数据文件恢复
sys@HRMCLONE(10.70.38.162)> alter database datafile 83 offline;
Database altered.
Elapsed: 00:00:00.02
sys@HRMCLONE(10.70.38.162)> recover datafile 83;
Media recovery complete.
sys@HRMCLONE(10.70.38.162)> alter database datafile 83 online;
Database altered.
Elapsed: 00:00:00.01
7.测试是否可以正常访问
create table test tablespace paapp as select * from test2;
select * from paapp;
8.数据文件被某个进程使用着,那么这个进程就会一直持有这个数据文件的句柄,所指向的数据文件依然可以读写,可以从proc->pid->fd目录中找到被删除的数据文件句柄(deleted)copy到原位置来恢复数据文件。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/23757700/viewspace-766707/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/23757700/viewspace-766707/