在 Linux + Oracle 环境下,“误删”通常分为几种情况,恢复方式不同。下面按最常见场景给你一个清晰的处理思路。
✅ 最推荐:使用闪回(Flashback)
FLASHBACK TABLE 表名 TO TIMESTAMP
TO_TIMESTAMP('2026-01-15 10:00:00','YYYY-MM-DD HH24:MI:SS');
⚠ 需要:
ALTER TABLE 表名 ENABLE ROW MOVEMENT;
SELECT * FROM 表名
AS OF TIMESTAMP
TO_TIMESTAMP('2026-01-15 10:00:00','YYYY-MM-DD HH24:MI:SS');
然后重新 INSERT。
FLASHBACK TABLE 表名 TO BEFORE DROP;
查看回收站:
SELECT * FROM user_recyclebin;
⚠ 不要重启数据库!不要覆盖磁盘!
如果数据库仍在运行:
ls -l /proc/$(pgrep ora_dbw0)/fd | grep deleted
找到被删的 .dbf:
cp /proc/xxx/fd/yyy /u01/oradata/xxx.dbf
然后:
ALTER DATABASE DATAFILE '/u01/oradata/xxx.dbf' OFFLINE;
ALTER DATABASE DATAFILE '/u01/oradata/xxx.dbf' ONLINE;
✅ 只能用备份恢复
rman target /
RESTORE TABLESPACE 表空间名;
RECOVER TABLESPACE 表空间名;
如果是普通文件:
ext4:可用 extundeletexfs:基本不可逆(除非有备份)extundelete /dev/sdb1 --restore-all
✅ 开启闪回
ALTER DATABASE FLASHBACK ON;
✅ 定期 RMAN 备份
✅ 禁止 rm -rf 生产环境
✅ 使用回收站 / 逻辑删除
为了给你最准确方案,请补充:
我可以按你的实际情况一步步带你恢复。