在 Linux 上恢复 Oracle 数据库,要分场景来看。下面按最常见情况给你一套清晰、可操作的恢复思路。如果你能补充具体场景(如:误删数据、服务器崩溃、RMAN 备份、是否归档模式等),我可以给你更精确的命令。
在动手前,先确认:
-- 数据库是否处于归档模式
archive log list;
-- 当前数据库状态
select name, open_mode from v$database;
✅ 归档模式:恢复能力强
❌ 非归档模式:只能恢复到最后一次全备
export ORACLE_SID=orcl
sqlplus / as sysdba
shutdown immediate;
startup mount;
rman target /
restore database;
recover database;
alter database open;
✅ 适用于:
run {
set until time "to_date('2025-01-01 10:00:00','yyyy-mm-dd hh24:mi:ss')";
restore database;
recover database;
}
alter database open resetlogs;
⚠️ resetlogs 会生成新的日志序列
shutdown immediate;
cp -r /backup/oradata /u01/app/oracle/oradata
cp -r /backup/fast_recovery_area /u01/app/oracle/
startup
❌ 只能恢复到冷备时间点
flashback table scott.emp to before drop;
或:
flashback table scott.emp to timestamp
to_timestamp('2025-01-01 10:00:00','yyyy-mm-dd hh24:mi:ss');
rman target /
RECOVER TABLE scott.emp
UNTIL TIME '2025-01-01 10:00:00'
AUXILIARY DESTINATION '/u01/aux';
startup nomount;
restore controlfile from '/backup/cntrl.bkp';
alter database mount;
recover database;
alter database open resetlogs;
recover database until cancel;
alter database open resetlogs;
⚠️ 有数据丢失风险
| 问题 | 原因 |
|---|---|
| RMAN 找不到备份 | 备份不在控制文件记录中 |
| ORA-01190 | SCN 不一致 |
| ORA-12514 | 实例未启动 |
| 磁盘满 | 快速恢复区满 |
你可以直接告诉我:
我可以给你 一步一步的命令级恢复方案,甚至帮你判断 会不会丢数据。