在进行任何恢复操作前,请务必完成以下关键步骤:
startup mount);若需恢复整个实例,需启动至NOMOUNT状态(startup nomount);ORACLE_HOME、ORACLE_SID等环境变量设置正确,且具备SYSDBA权限(通过sqlplus / as sysdba登录)。RMAN是Oracle官方提供的专业备份恢复工具,支持全量/增量备份、不完全恢复、块级恢复等功能,适用于大多数故障场景。
适用于数据库完全损坏(如数据文件、控制文件均丢失)的场景,步骤如下:
# 启动RMAN并连接目标数据库
rman target /
# 执行全库恢复(自动恢复数据文件、控制文件、归档日志)
run {
allocate channel ch1 type disk; # 分配磁盘通道
restore database; # 恢复数据库文件
recover database; # 应用归档日志和重做日志
alter database open resetlogs; # 重置联机重做日志(必须步骤)
release channel ch1; # 释放通道
}
exit;
说明:resetlogs会清空当前重做日志,创建新的日志序列,因此恢复后数据库会丢失恢复点之后的数据。
适用于误删除数据、误更新等需要回退到特定时间点的场景,步骤如下:
# 启动RMAN并连接目标数据库
rman target /
# 执行不完全恢复(以时间点为例)
run {
allocate channel ch1 type disk;
restore database; # 恢复数据库文件
recover database until time "to_date('2025-10-20 18:00:00', 'yyyy-mm-dd hh24:mi:ss')"; # 恢复到指定时间
alter database open resetlogs; # 重置联机重做日志
release channel ch1;
}
exit;
说明:不完全恢复后,数据库会丢失恢复点之后的所有数据,需谨慎选择时间点。
适用于单个数据文件丢失或损坏的场景,步骤如下:
# 启动RMAN并连接目标数据库
rman target /
# 执行数据文件恢复(以USERS表空间为例)
run {
allocate channel ch1 type disk;
restore tablespace users; # 恢复USERS表空间数据文件
recover tablespace users; # 应用归档日志
alter database datafile '/u01/app/oracle/oradata/ORCL/users01.dbf' online; # 将数据文件上线
release channel ch1;
}
exit;
说明:需替换users为实际表空间名,/u01/app/oracle/oradata/ORCL/users01.dbf为实际数据文件路径。
Flashback是Oracle提供的“时间旅行”功能,适用于误删除表、误更新数据等场景,无需恢复备份,快速恢复到指定时间点。
-- 启用Flashback功能(需提前开启)
ALTER TABLESPACE users FLASHBACK ON;
-- 查询误删除时间点之前的表数据
SELECT * FROM employees AS OF TIMESTAMP TO_TIMESTAMP('2025-10-20 17:30:00', 'yyyy-mm-dd hh24:mi:ss');
-- 恢复表数据(将误删除表重命名后恢复)
FLASHBACK TABLE employees TO TIMESTAMP TO_TIMESTAMP('2025-10-20 17:30:00', 'yyyy-mm-dd hh24:mi:ss');
-- 检查Flashback日志是否存在
SELECT * FROM v$flashback_database_log;
-- 执行数据库闪回(以时间点为例)
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
FLASHBACK DATABASE TO TIMESTAMP TO_TIMESTAMP('2025-10-20 18:00:00', 'yyyy-mm-dd hh24:mi:ss');
ALTER DATABASE OPEN;
说明:需提前开启Flashback功能(ALTER DATABASE FLASHBACK ON)并配置足够的闪回恢复区空间。
适用于逻辑备份(如expdp导出的DMP文件)的场景,可用于跨数据库迁移、数据修复等。
# 使用expdp导出数据库对象(如SCOTT用户)
expdp system/password@ORCL directory=DATA_PUMP_DIR dumpfile=scott_backup.dmp logfile=expdp_scott.log schemas=scott
# 使用impdp导入备份文件(完全恢复)
impdp system/password@ORCL directory=DATA_PUMP_DIR dumpfile=scott_backup.dmp logfile=impdp_scott.log schemas=scott full=y;
# 使用impdp导入备份文件(不完全恢复,仅恢复指定表)
impdp system/password@ORCL directory=DATA_PUMP_DIR dumpfile=scott_backup.dmp logfile=impdp_scott.log tables=employees;
说明:directory需替换为Oracle创建的逻辑目录(如DATA_PUMP_DIR),dumpfile为导出的DMP文件名。
V$RECOVERY_PROGRESS视图监控恢复进度,及时处理卡顿问题;alert.log)和跟踪日志进行分析。