数据库可能面临硬件故障、人为错误、恶意攻击、自然灾害等多种潜在风险,那么今天这个故障就是由于业务人员加错数据文件的位置,然后直接从物理层面rm -f了,导致了生产的故障!
以下是针对Oracle数据库物理删除数据文件后的快速修复处理方案,结合实战场景与核心操作步骤
1.紧急处理
禁止重启数据库:若数据文件被删除但数据库仍处于OPEN状态,立即停止所有可能触发数据写入的操作(如DDL、DML),避免数据块覆写。
确认文件状态:
SELECT file#, name, status FROM
v$datafile WHERE name = '[被删除文件路径]';
若状态为ONLINE,
文件句柄可能仍存在于内存中,可通过进程恢复。
2.快速恢复流程
场景1:数据库未关闭,文件句柄存活
1.定位进程文件描述符
查找DBWR进程(如ora_dbw0_[SID])的PID:
ps -ef | grep dbw0
进入进程文件目录,
查找被删除文件的描述符编号(如/proc/3318/fd):
ls -l /proc/[PID]/fd | grep [被删除文件名]
复制文件描述符到原路径:
cp /proc/[PID]/fd/[描述符编号] /原路径/文件名.dbf
2.恢复文件权限
chown oracle:oinstall /原路径/文件名.dbf
3.数据库层面修复
ALTER DATABASE DATAFILE '[文件路径]' OFFLINE;
RECOVER DATAFILE '[文件路径]';
ALTER DATABASE DATAFILE '[文件路径]' ONLINE;
场景2:数据库关闭关文件句柄丢失
1.RMAN全量恢复
RMAN> STARTUP MOUNT;
RMAN> RESTORE DATAFILE [文件编号];
RMAN> RECOVER DATAFILE [文件编号];
RMAN> ALTER DATABASE OPEN;
2.增量备份恢复
RMAN> RECOVER DATAFILE [文件编号]
UNTIL TIME 'YYYY-MM-DD HH24:MI:SS';
场景3 无备份的极端情况
尝试从归档日志重建数据文件,需ALTER DATABASE CREATE DATAFILE命令配合完整归档链。
3.正确的操作步骤
当我们加错数据文件的位置时,一般会导致备份的失败,所以从alert日志中看到有如下报错
ERROR at line 1:ORA-01157: cannot identify/lock data file 34 - see DBWR trace file
大多数发生在ASM磁盘的文件给加到了本地,正确的操作步骤如下:
sql>alter database datafile 34 offline;
rman> backup as copy
datafile 34 format '+data';
rman> switch datafile 34 to copy;
sql>recover datafile 34;
sql>alter database datafile 34 online;
4.典型报错
ORA-01157: cannot identify/lock data file
检查文件权限与路径是否正确,使用chown修正所有权。
ORA-27041: unable to open file
确认文件是否被彻底删除,尝试从备份或/proc恢复
总结
通过上述方案,可在10分钟内恢复90%以上的物理删除事故,结合预防措施可将风险降低95%以上。建议定期进行“删除数据文件”灾难演练,确保团队熟悉应急流程。