oracle学习笔记:linux下恢复误删oracle的数据文件

场景描述:操作系统级别的删除数据文件,而且数据库没有崩溃,仍处于open状态。

原理:在linux操作系统中,如果文件从操作系统级别被删除掉,之前打开该文件的进程仍然持有相应的文件句柄,所指向的文件仍然可以读写,并且该文件的文件描述符可以从/proc目录中获得。如果关闭数据库,则句柄就会丢失。

非归档模式

1、恢复系统表空间(SYSTEM)数据文件

(1)模拟删除

rm /oracle/app/oradata/HXDB/system01.dbf

(2)查找dbwr进程号

ps -ef|grep dbw

(3)根据进程号查找文件

cd /proc/2860/fd

cp 258 /oracle/app/oradata/HXDB/system01.dbf

(4)恢复数据文件

alter database datafile 1 offline;

recover datafile 1;

alter database datafile 1 online;

注意:由于system表空间无法离线,上述操作会报错ORA-01541: system tablespace cannot be brought offline; shut down if necessary,解决办法可关闭数据库,启动数据库到mount状态并恢复数据文件,打开数据库。

(5)启动数据库到mount 状态

shutdown immediate;

startup mount;

recover datafile 1;

alter database open;

2、普通表空间

rm /oradata/HXDB/datafile/users01.dbf

cd /proc/4276/fd

cp 261 /oradata/HXDB/datafile/users01.dbf

alter database datafile 4 offline;

注意:此时报错,ORA-01145: offline immediate disallowed unless media recovery enabled

alter database datafile 4 offline drop;

recover datafile 4;

alter database datafile 4 online;

归档模式:同上,正常操作不会报错

猜你喜欢

转载自www.cnblogs.com/myheart-new/p/11936656.html