温馨提示×

linux oracle怎样恢复误删

小樊
53
2026-09-10 10:23:20
栏目: 云计算

Linux + Oracle 环境下,“误删”可能指多种情况,恢复方式差别很大。下面按常见场景分别说明,你可以对号入座。


一、误删 Oracle 数据(DELETE / TRUNCATE / DROP TABLE)

1️⃣ DELETE 后未提交(或刚提交)

最佳方案:闪回(Flashback)

-- 查看过去某时间点的数据
SELECT * FROM table_name
AS OF TIMESTAMP TO_TIMESTAMP('2024-01-01 10:00:00','YYYY-MM-DD HH24:MI:SS');

-- 恢复
INSERT INTO table_name
SELECT * FROM table_name
AS OF TIMESTAMP TO_TIMESTAMP('2024-01-01 10:00:00','YYYY-MM-DD HH24:MI:SS');

⚠️ 条件:

  • 未超出 undo_retention
  • 未做 DDL

2️⃣ TRUNCATE TABLE(误清空)

闪回表(Flashback Table)

FLASHBACK TABLE table_name TO TIMESTAMP
TO_TIMESTAMP('2024-01-01 10:00:00','YYYY-MM-DD HH24:MI:SS');

⚠️ 需要:

ALTER TABLE table_name ENABLE ROW MOVEMENT;

3️⃣ DROP TABLE(误删表)

回收站恢复

-- 查看回收站
SELECT * FROM user_recyclebin;

-- 恢复
FLASHBACK TABLE table_name TO BEFORE DROP;

4️⃣ 闪回不可用(时间太久 / 被覆盖)

使用 RMAN 恢复

rman target /
RUN {
  SET UNTIL TIME "TO_DATE('2024-01-01 10:00:00','YYYY-MM-DD HH24:MI:SS')";
  RESTORE DATABASE;
  RECOVER DATABASE;
}

⚠️ 通常需要:

  • 有备份
  • 可恢复到测试库再导出数据

二、误删 Oracle 数据文件(.dbf)

1️⃣ 数据库已关闭

✅ 从 RMAN 恢复

RESTORE DATAFILE '/u01/oradata/orcl/users01.dbf';
RECOVER DATAFILE '/u01/oradata/orcl/users01.dbf';

2️⃣ 数据库还在运行(文件被 rm)

Linux 进程未释放,可抢救

ls -l /proc/$ORACLE_PID/fd | grep deleted

复制文件:

cp /proc/$PID/fd/xxx /u01/oradata/orcl/users01.dbf

然后:

ALTER DATABASE DATAFILE '/u01/oradata/orcl/users01.dbf' ONLINE;

三、误删控制文件(controlfile)

✅ 从备份恢复:

RESTORE CONTROLFILE FROM '/backup/ctl.bak';
RECOVER DATABASE;

或如果有镜像:

ALTER DATABASE MOUNT;
ALTER DATABASE RECOVER;

四、误删整个 Oracle 用户 / Schema

✅ 只能:

  • RMAN 全库恢复
  • 或 impdp 导入之前的逻辑备份
impdp system/pwd DIRECTORY=dp_dir DUMPFILE=schema.dmp

五、误删 Linux 文件(非 Oracle 专属)

1️⃣ rm 删错普通文件

  • 停止写入!
  • 使用工具:
    • extundelete
    • testdisk
    • photorec
extundelete /dev/sdb1 --restore-all

六、预防建议(非常重要)

✅ 开启闪回

ALTER DATABASE FLASHBACK ON;

✅ 定期 RMAN 备份

BACKUP DATABASE PLUS ARCHIVELOG;

✅ 逻辑备份

expdp system/pwd FULL=y DIRECTORY=dp_dir DUMPFILE=full.dmp

✅ Linux 使用别名防误删

alias rm='rm -i'

✅ 总结速查表

误删内容 恢复方式
DELETE 闪回查询
TRUNCATE FLASHBACK TABLE
DROP TABLE 回收站
数据文件 RMAN / proc fd
控制文件 RMAN
无备份 很难恢复

如果你能告诉我:

  • Oracle 版本
  • 是否开启归档 / 闪回
  • 误删的是表、数据还是文件

我可以给你精确到命令级别的恢复方案。

0