温馨提示×

linux oracle如何恢复误删

小樊
36
2026-09-19 14:48:49
栏目: 云计算

Linux + Oracle 环境下,“误删”通常分为几种情况,恢复方式不同。下面按最常见场景给你一个清晰的处理思路。


一、误删 Oracle 表数据(DELETE / 误更新)

最推荐:使用闪回(Flashback)

1. 闪回表(表还在,数据被删)

FLASHBACK TABLE 表名 TO TIMESTAMP 
TO_TIMESTAMP('2026-01-15 10:00:00','YYYY-MM-DD HH24:MI:SS');

⚠ 需要:

  • 表启用了行移动
ALTER TABLE 表名 ENABLE ROW MOVEMENT;

2. 闪回查询(找回被删数据)

SELECT * FROM 表名
AS OF TIMESTAMP 
TO_TIMESTAMP('2026-01-15 10:00:00','YYYY-MM-DD HH24:MI:SS');

然后重新 INSERT。


二、误删表(DROP TABLE)

1. 表在回收站

FLASHBACK TABLE 表名 TO BEFORE DROP;

查看回收站:

SELECT * FROM user_recyclebin;

三、误删数据文件(.dbf 文件被 rm)

不要重启数据库!不要覆盖磁盘!

方法 1:从 OS 层面恢复(文件句柄)

如果数据库仍在运行:

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;

四、误删整个表空间 / 控制文件

只能用备份恢复

1. RMAN 恢复

rman target /
RESTORE TABLESPACE 表空间名;
RECOVER TABLESPACE 表空间名;

五、Linux 文件级误删(非 Oracle 文件)

如果是普通文件:

  • ext4:可用 extundelete
  • xfs:基本不可逆(除非有备份)
extundelete /dev/sdb1 --restore-all

六、防止再次发生(强烈建议)

✅ 开启闪回

ALTER DATABASE FLASHBACK ON;

✅ 定期 RMAN 备份
✅ 禁止 rm -rf 生产环境
✅ 使用回收站 / 逻辑删除


七、你可以告诉我

为了给你最准确方案,请补充:

  1. 删的是什么?(数据 / 表 / dbf 文件 / 整个库)
  2. 数据库是否还在运行?
  3. Oracle 版本(11g / 12c / 19c)
  4. 是否有 RMAN 备份?

我可以按你的实际情况一步步带你恢复。

0