CentOS 上基于 SQL*Plus 的 Oracle 备份恢复策略
一、策略总览与适用场景
- 逻辑导出导入(Data Pump):使用 expdp/impdp,通过 SQL*Plus 创建目录对象与用户/表空间,适合跨版本迁移、按用户/表/模式选择性恢复、开发测试环境快速搭建。
- 物理备份恢复(RMAN):用 RMAN 做联机热备与归档日志备份,SQL*Plus 负责启停、挂载、打开与参数/目录对象准备,适合生产环境的高可用与时间点恢复。
- 冷备份:停机复制 数据文件/控制文件/联机日志,SQL*Plus 负责关库/起库,适合可短时停机的维护窗口。
- 闪回技术:在满足条件时用于快速回退误删,SQL*Plus 执行闪回与打开重置日志。
- 建议组合:生产库以 RMAN 全备+增量+归档 为主,按周/日保留;每周做一次 Data Pump 逻辑备份 便于迁移与选择性恢复。
二、前置准备与目录规范
- 操作系统与权限:以 oracle 用户操作,备份目录属主设为 oracle:oinstall,权限 0755/0775。
- 目录对象:在 SQL*Plus 中创建 Oracle 目录对象并授权(示例目录 /oracle/backup):
- create or replace directory backupdir as ‘/oracle/backup’;
- grant read, write on directory backupdir to system;
- 归档与 FRA:确认已开启归档,检查 DB_RECOVERY_FILE_DEST 与空间;必要时设置 db_recovery_file_dest_size。
- 环境校验:确保 ORACLE_HOME、ORACLE_SID、PATH 正确,且 expdp/impdp 在 $ORACLE_HOME/bin。
三、备份策略与示例
- Data Pump 逻辑备份(SQL*Plus + OS 命令)
- 全库备份(OS 执行):
- expdp system/口令 DIRECTORY=backupdir DUMPFILE=full_$(date +%F).dmp LOGFILE=full_$(date +%F).log FULL=y PARALLEL=2
- 按模式备份:
- expdp system/口令 DIRECTORY=backupdir DUMPFILE=schema_$(date +%F).dmp LOGFILE=schema_$(date +%F).log SCHEMAS=HR,OE
- 自动化(示例脚本 + crontab 每天 22:00 执行):
- 00 22 * * * /opt/scripts/expdp_full.sh
- RMAN 物理热备(SQL*Plus 启停与目录准备,RMAN 执行备份)
- 全库+归档:
- rman target /
- BACKUP DATABASE PLUS ARCHIVELOG;
- BACKUP CURRENT CONTROLFILE;
- 增量策略:每周日 LEVEL 0,其余每日 LEVEL 1(示例)。
四、恢复策略与示例
- Data Pump 恢复(跨库/同库迁移、按用户/表恢复)
- 全库导入:
- impdp system/口令 DIRECTORY=backupdir DUMPFILE=full_2025-11-21.dmp LOGFILE=impdp_full.log FULL=y
- 按模式导入并映射:
- impdp system/口令 DIRECTORY=backupdir DUMPFILE=schema_2025-11-21.dmp LOGFILE=impdp_schema.log REMAP_SCHEMA=HR:HR_NEW
- 表已存在处理:
- impdp … TABLE_EXISTS_ACTION=TRUNCATE|REPLACE|SKIP
- 结构变更场景:若目标结构已变更,先 drop user … cascade 再导入,或仅导入受影响对象。
- RMAN 恢复(实例/数据文件损坏、时间点恢复)
- 数据文件损坏:
- rman target /
- SQL ‘ALTER DATABASE DATAFILE 4 OFFLINE’;
- RESTORE DATAFILE 4;
- RECOVER DATAFILE 4;
- SQL ‘ALTER DATABASE DATAFILE 4 ONLINE’;
- 整库恢复(丢失全部数据文件,具备备份与归档):
- rman target /
- STARTUP NOMOUNT;
- RESTORE DATABASE;
- RECOVER DATABASE;
- ALTER DATABASE OPEN RESETLOGS;
- 冷备份恢复(停机窗口)
- 用 SQL*Plus 正常关机:SHUTDOWN IMMEDIATE;
- OS 层将备份的 .dbf/.ctl/.log 覆盖回原目录;
- STARTUP 打开数据库。
- 闪回数据库(误删后快速回退)
- 前提:已启用 归档 与 闪回区,且 db_flashback_retention_target 足够;
- SQL*Plus:
- SHUTDOWN IMMEDIATE;
- STARTUP MOUNT;
- FLASHBACK DATABASE TO TIMESTAMP (SYSTIMESTAMP - INTERVAL ‘1’ HOUR);
- ALTER DATABASE OPEN RESETLOGS。
五、RAC、调度与校验要点
- RAC 与 Data Pump:在任意节点执行导入,使用 VIP/scan 与服务名;如遇到元数据争用,可加 CLUSTER=NO;对象已存在时按需要设置 TABLE_EXISTS_ACTION。
- 自动化与保留:用 crontab 调度备份脚本,定期清理 N 天前 的 dump 与日志;脚本中显式设置 ORACLE_HOME、PATH,避免 “command not found”。
- 异机恢复要点:目标端仅装 Oracle 软件,从源端拷贝 备份集、pfile、密码文件 orapwSID,按 pfile 创建必要目录(如 audit_file_dest、control_files、FRA),再 RMAN 还原与恢复。
- 恢复验证与监控:导入/恢复后核对 日志文件、对象数量与关键业务数据;定期做 恢复演练 与 备份可用性校验,并监控 FRA 使用率 与 归档空间。