Oracle RMAN 备份恢复全集

Oracle RMAN 备份恢复全集

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


1. 概述

RMAN 是 Oracle 官方备份恢复工具[1]:

功能

  • 全备/增量
  • 压缩/加密
  • 验证
  • 恢复
  • 恢复目录

详细见:Oracle RMAN 备份恢复


2. 备份类型

2.1 完全备份

RMAN> BACKUP DATABASE;
RMAN> BACKUP DATABASE PLUS ARCHIVELOG;

2.2 增量备份

-- Level 0
RMAN> BACKUP INCREMENTAL LEVEL 0 DATABASE;

-- Level 1 差异
RMAN> BACKUP INCREMENTAL LEVEL 1 DATABASE;

-- Level 1 累积
RMAN> BACKUP INCREMENTAL LEVEL 1 CUMULATIVE DATABASE;

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

2.3 部分备份

-- 表空间
RMAN> BACKUP TABLESPACE users;

-- 数据文件
RMAN> BACKUP DATAFILE 1, 2;

-- 归档日志
RMAN> BACKUP ARCHIVELOG ALL;
RMAN> BACKUP ARCHIVELOG FROM TIME 'SYSDATE-1';

-- 控制文件
RMAN> BACKUP CURRENT CONTROLFILE;

-- SPFILE
RMAN> BACKUP SPFILE;

3. 镜像副本

RMAN> BACKUP AS COPY DATABASE;
RMAN> BACKUP AS COPY TABLESPACE users;
RMAN> BACKUP AS COPY DATAFILE 1 FORMAT '/u01/backup/system01.bak';

4. 压缩备份

RMAN> CONFIGURE COMPRESSION ALGORITHM 'MEDIUM';

RMAN> BACKUP AS COMPRESSED BACKUPSET DATABASE;
RMAN> BACKUP AS COMPRESSED BACKUPSET TABLESPACE users;

详细见:Oracle RMAN 压缩与加密


5. 加密备份

5.1 透明加密

RMAN> CONFIGURE ENCRYPTION FOR DATABASE ON;

-- Wallet
RMAN> SET ENCRYPTION ON IDENTIFIED BY ****** ONLY;

5.2 密码加密

RMAN> SET ENCRYPTION ON IDENTIFIED BY ****** ONLY;
RMAN> BACKUP DATABASE;

-- 恢复
RMAN> SET DECRYPTION ON IDENTIFIED BY ******

6. 并行备份

RMAN> CONFIGURE DEVICE TYPE DISK PARALLELISM 4;

RMAN> CONFIGURE CHANNEL 1 DEVICE TYPE DISK FORMAT '/u01/backup/%U';
RMAN> CONFIGURE CHANNEL 2 DEVICE TYPE DISK FORMAT '/u02/backup/%U';
RMAN> CONFIGURE CHANNEL 3 DEVICE TYPE DISK FORMAT '/u03/backup/%U';
RMAN> CONFIGURE CHANNEL 4 DEVICE TYPE DISK FORMAT '/u04/backup/%U';

7. 配置

7.1 保留策略

RMAN> CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS;
RMAN> CONFIGURE RETENTION POLICY TO REDUNDANCY 2;

7.2 控制文件自动备份

RMAN> CONFIGURE CONTROLFILE AUTOBACKUP ON;
RMAN> CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/u01/backup/%F';

7.3 优化

RMAN> CONFIGURE BACKUP OPTIMIZATION ON;

7.4 默认设备

RMAN> CONFIGURE DEFAULT DEVICE TYPE TO DISK;
RMAN> CONFIGURE DEFAULT DEVICE TYPE TO SBT;

8. 完全恢复

8.1 数据库

RMAN> SHUTDOWN IMMEDIATE;
RMAN> STARTUP MOUNT;
RMAN> RESTORE DATABASE;
RMAN> RECOVER DATABASE;
RMAN> ALTER DATABASE OPEN;

8.2 表空间

RMAN> SQL 'ALTER TABLESPACE users OFFLINE';
RMAN> RESTORE TABLESPACE users;
RMAN> RECOVER TABLESPACE users;
RMAN> SQL 'ALTER TABLESPACE users ONLINE';

8.3 数据文件

RMAN> SQL 'ALTER DATABASE DATAFILE 5 OFFLINE';
RMAN> RESTORE DATAFILE 5;
RMAN> RECOVER DATAFILE 5;
RMAN> SQL 'ALTER DATABASE DATAFILE 5 ONLINE';

8.4 控制文件

RMAN> SHUTDOWN IMMEDIATE;
RMAN> STARTUP NOMOUNT;
RMAN> RESTORE CONTROLFILE FROM AUTOBACKUP;
RMAN> ALTER DATABASE MOUNT;
RMAN> RECOVER DATABASE;
RMAN> ALTER DATABASE OPEN RESETLOGS;

8.5 SPFILE

RMAN> STARTUP NOMOUNT FORCE;
RMAN> RESTORE SPFILE FROM AUTOBACKUP;
RMAN> STARTUP FORCE;

9. 不完全恢复

9.1 基于时间

RMAN> SHUTDOWN IMMEDIATE;
RMAN> STARTUP MOUNT;
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;

9.2 基于 SCN

RMAN> RUN {
  SET UNTIL SCN 1234567;
  RESTORE DATABASE;
  RECOVER DATABASE;
}
RMAN> ALTER DATABASE OPEN RESETLOGS;

9.3 基于 Sequence

RMAN> RUN {
  SET UNTIL SEQUENCE 100 THREAD 1;
  RESTORE DATABASE;
  RECOVER DATABASE;
}

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


10. 块恢复

RMAN> RECOVER DATAFILE 5 BLOCK 100, 101;
RMAN> RECOVER CORRUPTION LIST;

详细见:Oracle DBMS_REPAIR 修复损坏块


11. 表级恢复(12c+)

RMAN> RECOVER TABLE scott.employees 
  UNTIL TIME "..." 
  AUXILIARY DESTINATION '/u01/aux'
  REMAP TABLE scott.employees:employees_recovered;

12. 验证

12.1 BACKUP VALIDATE

RMAN> BACKUP VALIDATE DATABASE;
RMAN> BACKUP VALIDATE CHECK LOGICAL DATABASE;
RMAN> BACKUP VALIDATE DATABASE ARCHIVELOG ALL;

12.2 RESTORE VALIDATE

RMAN> RESTORE DATABASE VALIDATE;
RMAN> RESTORE ARCHIVELOG ALL VALIDATE;
RMAN> RESTORE CONTROLFILE VALIDATE;

12.3 损坏

SELECT * FROM v$database_block_corruption;

13. 维护

13.1 CROSSCHECK

RMAN> CROSSCHECK BACKUP;
RMAN> CROSSCHECK ARCHIVELOG ALL;
RMAN> CROSSCHECK COPY;

13.2 DELETE

RMAN> DELETE EXPIRED BACKUP;
RMAN> DELETE EXPIRED ARCHIVELOG ALL;
RMAN> DELETE OBSOLETE;
RMAN> DELETE ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-7';

13.3 LIST

RMAN> LIST BACKUP SUMMARY;
RMAN> LIST BACKUP BY COMPLETION TIME;
RMAN> LIST ARCHIVELOG ALL;
RMAN> LIST COPY;
RMAN> LIST INCARNATION;

13.4 REPORT

RMAN> REPORT NEED BACKUP;
RMAN> REPORT OBSOLETE;
RMAN> REPORT SCHEMA;
RMAN> REPORT UNRECOVERABLE;

14. 恢复目录

14.1 创建

CREATE TABLESPACE rcat DATAFILE '...' SIZE 100M;
CREATE USER rcat IDENTIFIED BY ****** DEFAULT TABLESPACE rcat;
GRANT CONNECT, RESOURCE, RECOVERY_CATALOG_OWNER TO rcat;

14.2 注册

rman catalog rcat/pwd@rcat
RMAN> CREATE CATALOG;

rman target / catalog rcat/pwd@rcat
RMAN> REGISTER DATABASE;
RMAN> RESYNC CATALOG;

14.3 优势

- 集中管理
- 长期历史
- 脚本存储
- 多库管理

15. 监控

15.1 v$rman_configuration

SELECT name, value FROM v$rman_configuration;

15.2 v$session_longops

SELECT 
  sid, opname, sofar, totalwork,
  ROUND(sofar/totalwork*100, 2) AS pct,
  time_remaining
FROM v$session_longops
WHERE opname LIKE 'RMAN%';

15.3 v$backup_set

SELECT 
  bs_key, bs_type, completion_time, 
  bytes/1024/1024 AS mb, compressed
FROM v$backup_set
ORDER BY completion_time DESC;

16. 常见坑与排错

16.1 ORA-19809

- FRA 满
- DELETE OBSOLETE
- 增大 FRA

16.2 ORA-19625

- 文件不存在
- CROSSCHECK
- DELETE EXPIRED

16.3 ORA-19870

- 备份损坏
- 验证
- 重新备份

17. 最佳实践

  1. FRA:自动管理
  2. 增量 + 压缩:节省
  3. 并行:性能
  4. 加密:安全
  5. 保留策略:自动化
  6. 控制文件自动备份:保护
  7. 验证:可靠
  8. 恢复目录:多库
  9. 定期演练:可行
  10. 文档化:流程

18. 参考资料

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