Oracle 备份恢复规划

Oracle 备份恢复规划

适用版本:Oracle Database 10g / 11g / 12c / 19c / 23ai 文档版本:v1.0 / 2026-07


1. 概述

备份恢复规划是数据保护基础[1]:

详细见:Oracle 备份策略与最佳实践


2. RPO / RTO

2.1 RPO(Recovery Point Objective)

- 数据丢失容忍
- 业务关键:0
- 一般:1 小时
- 历史:1 天

2.2 RTO(Recovery Time Objective)

- 恢复时间目标
- 业务关键:分钟
- 一般:1 小时
- 历史:1 天

2.3 业务分级

等级RPORTO备份
关键0分钟RAC + DG + RMAN
重要1 小时1 小时RAC + RMAN
一般1 天4 小时RMAN
历史1 周1 天Data Pump

3. 备份类型

3.1 物理

- RMAN
- 数据块级别
- 完整

3.2 逻辑

- Data Pump
- 表/行级别
- 灵活

3.3 增量

- RMAN Incremental
- Block Change Tracking
- 快

3.4 在线

- 数据库运行
- 归档日志
- 一致

4. RMAN 配置

4.1 持久化

RMAN> CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS;
RMAN> CONFIGURE CONTROLFILE AUTOBACKUP ON;
RMAN> CONFIGURE BACKUP OPTIMIZATION ON;
RMAN> CONFIGURE DEVICE TYPE DISK PARALLELISM 4;
RMAN> CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT '/u01/backup/%U';
RMAN> CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/u01/backup/%F';
RMAN> CONFIGURE ENCRYPTION FOR DATABASE ON;
RMAN> CONFIGURE COMPRESSION ALGORITHM 'HIGH';

4.2 备份策略

-- 全量(每周日)
RMAN> BACKUP DATABASE PLUS ARCHIVELOG;

-- 增量(每天)
RMAN> BACKUP INCREMENTAL LEVEL 1 DATABASE;

-- 增量更新
RMAN> BACKUP INCREMENTAL LEVEL 1 FOR RECOVER OF COPY WITH TAG 'incr_update' DATABASE;
RMAN> RECOVER COPY OF DATABASE WITH TAG 'incr_update';

详细见:Oracle RMAN 增量备份策略

4.3 验证

RMAN> BACKUP VALIDATE CHECK LOGICAL DATABASE;
RMAN> RESTORE DATABASE VALIDATE;

5. 归档

5.1 启用

ARCHIVE LOG LIST;

SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE OPEN;

5.2 目的地

ALTER SYSTEM SET log_archive_dest_1 = 'location=use_db_recovery_file_dest';
ALTER SYSTEM SET log_archive_dest_2 = 'location=/u02/archive';

5.3 FRA

ALTER SYSTEM SET db_recovery_file_dest = '/u01/app/oracle/fast_recovery_area';
ALTER SYSTEM SET db_recovery_file_dest_size = 100G;

详细见:Oracle 归档日志管理详解


6. 备份脚本

6.1 全量

#!/bin/bash
# full_backup.sh
source /home/oracle/.bash_profile

rman target / << EOF
CROSSCHECK BACKUP;
CROSSCHECK ARCHIVELOG ALL;
DELETE NOPROMPT EXPIRED BACKUP;
DELETE NOPROMPT EXPIRED ARCHIVELOG ALL;

BACKUP DATABASE PLUS ARCHIVELOG DELETE INPUT;
BACKUP CURRENT CONTROLFILE;
BACKUP SPFILE;

DELETE NOPROMPT OBSOLETE;
EOF

6.2 增量

#!/bin/bash
# incr_backup.sh
source /home/oracle/.bash_profile

rman target / << EOF
BACKUP INCREMENTAL LEVEL 1 DATABASE PLUS ARCHIVELOG DELETE INPUT;
BACKUP CURRENT CONTROLFILE;
BACKUP SPFILE;
DELETE NOPROMPT OBSOLETE;
EOF

6.3 cron

# 周日 2:00 全量
0 2 * * 0 /home/oracle/scripts/full_backup.sh >> /home/oracle/logs/full.log 2>&1

# 周一-六 2:00 增量
0 2 * * 1-6 /home/oracle/scripts/incr_backup.sh >> /home/oracle/logs/incr.log 2>&1

7. 备份目的地

7.1 本地

- /u01/backup
- 快速恢复

7.2 远程

- NFS / SMB
- 跨服务器
- 灾备

7.3 云

- OCI Object Storage
- S3
- Azure Blob

7.4 磁带

- SBT
- MML
- 长期

8. 恢复

8.1 完全恢复

RMAN> RESTORE DATABASE;
RMAN> RECOVER DATABASE;
RMAN> ALTER DATABASE OPEN;

8.2 不完全恢复

RMAN> RUN {
  SET UNTIL TIME "TO_DATE('2026-07-21 15:00:00', 'YYYY-MM-DD HH24:MI:SS')";
  RESTORE DATABASE;
  RECOVER DATABASE;
}
RMAN> ALTER DATABASE OPEN RESETLOGS;

详细见:Oracle 数据库 PITR 时间点恢复

8.3 表级

RMAN> RECOVER TABLE scott.employees 
  UNTIL TIME "SYSDATE-1" 
  AUXILIARY DESTINATION '/u01/aux';

详细见:Oracle 恢复实战案例


9. 灾备

9.1 Data Guard

- 主备同步
- 零数据丢失
- Switchover / Failover

详细见:Oracle Data Guard 部署详解

9.2 备份异地

- 备份传输到异地
- 跨机房
- 跨城市

9.3 演练

- 定期演练
- 流程验证
- 团队能力

10. 监控

10.1 备份状态

SELECT session_key, input_type, status, 
       TO_CHAR(start_time, 'YYYY-MM-DD HH24:MI') AS start_time,
       elapsed_seconds/60 AS minutes,
       output_bytes/1024/1024/1024 AS gb
FROM v$rman_backup_job_details
ORDER BY start_time DESC FETCH FIRST 10 ROWS ONLY;

10.2 失败

SELECT session_key, status, output_bytes, errors
FROM v$rman_backup_job_details
WHERE status != 'COMPLETED';

10.3 FRA

SELECT name, 
       space_limit/1024/1024/1024 AS limit_gb,
       space_used/1024/1024/1024 AS used_gb
FROM v$recovery_file_dest;

11. 验证

11.1 备份验证

RMAN> BACKUP VALIDATE CHECK LOGICAL DATABASE;
RMAN> RESTORE DATABASE VALIDATE;

11.2 恢复测试

- 测试环境
- 完整恢复
- 业务验证

11.3 数据完整性

-- 行数
SELECT 'EMPLOYEES', COUNT(*) FROM employees;

-- 校验和
SELECT SUM(DBMS_CRYPTO.HASH(utl_raw.cast_to_raw(...), 4)) FROM ...

12. 安全

12.1 加密

RMAN> CONFIGURE ENCRYPTION FOR DATABASE ON;
RMAN> CONFIGURE ENCRYPTION ALGORITHM 'AES256';
RMAN> SET ENCRYPTION ON IDENTIFIED BY ****** ONLY;

12.2 TDE

ALTER SYSTEM SET encryption key IDENTIFIED BY ******

详细见:Oracle 安全深度解析

12.3 访问

- 备份目录权限
- 加密
- 异地

13. 常见坑与排错

13.1 ORA-19809

- FRA 满
- 清理
- 增大

13.2 ORA-00257

- 归档满
- 清理
- 增大

13.3 备份失败

- 日志
- 空间
- 网络

14. 最佳实践

  1. RPO/RTO 明确:业务
  2. 归档模式:生产
  3. RMAN 持久化:标准化
  4. 增量 + 全量:性能
  5. 多目的地:冗余
  6. 异地备份:灾备
  7. 加密:安全
  8. 定期验证:可靠
  9. 演练:能力
  10. 监控告警:及时

15. 参考资料

[1] Oracle Database Backup and Recovery User’s Guide 19c https://docs.oracle.com/en/database/oracle/oracle-database/19/bradv/