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;
归档模式:同上,正常操作不会报错