在 CentOS 上恢复 Oracle 的可行路径
- 按备份形态选择恢复方式:
- RMAN 物理恢复:有备份集/镜像拷贝、控制文件自动备份、归档日志时使用,适合实例/数据文件/控制文件损坏或丢失。
- Data Pump 逻辑恢复:有 expdp/dmp 导出文件时使用,适合整库/按用户/按表空间迁移或恢复。
- 文件级拷贝冷恢复:有数据文件/控制文件/联机日志/参数文件的一致拷贝时使用,适合停机场景。
- 闪回技术:已启用闪回数据库/闪回表/回收站时,可快速回退到时间点/SCN/删除前状态,避免复杂恢复。
RMAN 物理恢复步骤
- 准备与检查
- 确认备份可用(数据文件、归档日志、控制文件自动备份),安装同版本 Oracle,配置 ORACLE_SID、ORACLE_HOME、环境变量,确保磁盘空间充足。
- 启动到 NOMOUNT 并还原控制文件
- 命令:
- rman target /
- STARTUP NOMOUNT
- RESTORE CONTROLFILE FROM ‘备份控制文件路径’;
- ALTER DATABASE MOUNT;
- 还原与恢复
- 还原数据文件:RESTORE DATABASE;
- 应用归档日志:RECOVER DATABASE;(必要时指定归档路径或 UNTIL 子句)
- 打开数据库
- 正常打开:ALTER DATABASE OPEN;
- 若控制文件/重做日志丢失且无法恢复,使用:ALTER DATABASE OPEN RESETLOGS;(会重置日志序列)
- 补充
- 若只有SPFILE备份:RMAN> RESTORE SPFILE FROM ‘spfile_xxx.bak’; 再 STARTUP NOMOUNT 继续。
- 若需按时间点:RECOVER DATABASE UNTIL TIME ‘2025-12-09 10:00:00’; 或 UNTIL SCN/SEQUENCE。
Data Pump 逻辑恢复步骤
- 准备
- 在 CentOS 创建目录对象并赋权:
- sqlplus / as sysdba
- CREATE OR REPLACE DIRECTORY dir AS ‘/oracledir’;
- GRANT READ, WRITE ON DIRECTORY dir TO system;
- 将 .dmp 文件上传至该目录,并修正属主:chown -R oracle:oinstall /oracledir
- 按场景导入
- 整库导入(结构与数据):
- impdp system/口令 DIRECTORY=dir FULL=Y DUMPFILE=fulldb.dmp LOGFILE=imp_full.log PARALLEL=4
- 按用户导入:
- impdp system/口令 DIRECTORY=dir SCHEMAS=scott LOGFILE=imp_scott.log
- 按表空间导入:
- impdp system/口令 DIRECTORY=dir TABLESPACES=users LOGFILE=imp_tbs.log
- 常用选项
- REMAP_SCHEMA、REMAP_TABLESPACE、TABLE_EXISTS_ACTION=REPLACE/TRUNCATE
- 若导入对象已存在,可先 DROP/CREATE 或使用 REMAP/EXISTS_ACTION 处理
- 注意
- Data Pump 不恢复 SYS 对象、口令文件、参数文件、控制文件、联机日志;仅恢复逻辑对象与数据。
文件级拷贝冷恢复步骤
- 适用前提
- 拥有数据库关闭时的一致拷贝(所有数据文件、控制文件、联机日志、SPFILE/PFILE、口令文件)。
- 操作步骤
- 用备份覆盖目标目录(保持原路径或更新控制文件中的路径),必要时先备份当前受损文件。
- 启动到 NOMOUNT(如有 SPFILE 放在 $ORACLE_HOME/dbs,或使用 PFILE 启动)。
- 如有备份控制文件:STARTUP NOMOUNT → RESTORE CONTROLFILE FROM ‘路径’ → ALTER DATABASE MOUNT。
- 打开数据库:
- 文件一致且日志完好:ALTER DATABASE OPEN;
- 无法恢复重做日志:ALTER DATABASE OPEN RESETLOGS;
- 清理/重建临时表空间数据文件(若存在旧 temp 文件常导致 ORA-01187/01110):
- 启动到 MOUNT,DROP TEMPFILE 后让实例自动重建,或 ALTER TABLESPACE TEMP ADD TEMPFILE ‘新路径’ SIZE …;
- 提示
- 若只有数据文件而无控制文件,可尝试从告警日志中提取 CREATE CONTROLFILE 脚本,修改路径与日志模式后执行重建控制文件,再 MOUNT/OPEN。
误删数据的快速恢复选项
- 回收站恢复(表级)
- 查看:SELECT * FROM RECYCLEBIN WHERE original_name=‘表名’;
- 闪回:FLASHBACK TABLE 表名 TO BEFORE DROP;(可加 RENAME TO 新名)
- 闪回查询/表到时间点
- 查询历史:SELECT * FROM 表名 AS OF TIMESTAMP (SYSDATE - INTERVAL ‘1’ HOUR);
- 回退表:FLASHBACK TABLE 表名 TO TIMESTAMP (SYSDATE - INTERVAL ‘1’ HOUR);(需启用行移动:ALTER TABLE 表名 ENABLE ROW MOVEMENT;)
- 闪回数据库(库级)
- 前提:已配置 DB_RECOVERY_FILE_DEST 与 DB_RECOVERY_FILE_DEST_SIZE,并启用 FLASHBACK ON
- 操作:STARTUP MOUNT → FLASHBACK DATABASE TO TIMESTAMP (SYSDATE - INTERVAL ‘1’ HOUR); → ALTER DATABASE OPEN RESETLOGS;
- 事务级回滚
- 若会话未提交且仍持有事务:ROLLBACK;(无法跨会话/已提交事务)