误删数据文件且数据库仍在运行(Linux 句柄恢复)
- 条件:文件被 rm 但进程仍持有句柄、尚未重启数据库/OS。
- 步骤:
- 查 DBWn PID:ps -ef | grep dbw0;进入 /proc/$PID/fd,ls -l 找到被删文件(含 delete 标记)。
- 从句柄拷贝回原路径:cp /proc/$PID/fd/ /u01/app/oradata/xxx.dbf。
- SQL> alter database datafile ‘/u01/…dbf’ offline;
- SQL> recover datafile ‘/u01/…dbf’;
- SQL> alter database datafile ‘/u01/…dbf’ online;
- 如为非归档模式,可尝试将同目录下的备份数据文件拷回并按上述步骤恢复;但一旦 redo 被覆盖,恢复将受限或失败。
- 要点:句柄方式依赖进程未退出;一旦重启句柄消失,只能走磁盘/备份恢复。