Skip to content

Oracle 备份实施与验证

备份实施概述

Oracle数据库备份实施是将备份策略转化为实际操作的过程,包括备份工具配置、备份作业创建、备份执行和监控等步骤。备份验证则是确保备份文件可用、完整且能够用于恢复的重要环节。

RMAN备份配置

RMAN基本配置

1. 连接到RMAN

sql
# 连接到目标数据库
rman target /

# 连接到目标数据库和恢复目录
rman target / catalog rman/rman@rcat

2. 配置RMAN参数

sql
# 配置备份保留策略
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS;

# 配置备份位置
CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT '/backup/rman/%d_%t_%s_%p.bak';

# 配置并行度
CONFIGURE DEVICE TYPE DISK PARALLELISM 4;

# 配置备份压缩
CONFIGURE COMPRESSION ALGORITHM 'MEDIUM';

# 配置控制文件自动备份
CONFIGURE CONTROLFILE AUTOBACKUP ON;
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/backup/rman/controlfile_%F.bak';

# 配置归档日志备份位置
CONFIGURE ARCHIVELOG DELETION POLICY TO BACKED UP 2 TIMES TO DISK;

19c与21c RMAN配置差异

配置项19c21c
压缩算法支持BASIC、LOW、MEDIUM、HIGH新增ZSTD压缩算法,压缩率更高
并行度上限816
备份验证基本验证增强验证,支持更多备份类型
加密选项支持透明加密增强加密算法,支持更多加密模式

备份执行

全量备份

sql
# 全量备份数据库和归档日志
BACKUP DATABASE PLUS ARCHIVELOG;

# 全量备份数据库、归档日志并删除已备份的归档日志
BACKUP DATABASE PLUS ARCHIVELOG DELETE INPUT;

# 压缩全量备份
BACKUP AS COMPRESSED BACKUPSET DATABASE PLUS ARCHIVELOG;

增量备份

sql
# 差异增量备份(级别0)
BLOCKRECOVER DATAFILE 1 BLOCK 1234;

# 差异增量备份(级别1)
BACKUP INCREMENTAL LEVEL 1 DATABASE PLUS ARCHIVELOG;

# 累积增量备份(级别1)
BACKUP INCREMENTAL LEVEL 1 CUMULATIVE DATABASE PLUS ARCHIVELOG;

归档日志备份

sql
# 备份所有归档日志
BACKUP ARCHIVELOG ALL;

# 备份特定范围的归档日志
BACKUP ARCHIVELOG FROM TIME 'SYSDATE-1' UNTIL TIME 'SYSDATE';

# 备份归档日志并删除已备份的归档日志
BACKUP ARCHIVELOG ALL DELETE INPUT;

控制文件备份

sql
# 手动备份控制文件
BACKUP CURRENT CONTROLFILE;

# 备份控制文件和服务器参数文件
BACKUP CURRENT CONTROLFILE PLUS SPFILE;

表空间备份

sql
# 备份特定表空间
BACKUP TABLESPACE users, sysaux;

# 备份所有表空间
BACKUP TABLESPACE ALL;

备份监控

查看备份状态

sql
# 查看所有备份集
LIST BACKUP;

# 查看数据库备份集
LIST BACKUP OF DATABASE;

# 查看归档日志备份集
LIST BACKUP OF ARCHIVELOG ALL;

# 查看控制文件备份
LIST BACKUP OF CONTROLFILE;

查看备份详细信息

sql
# 查看备份集详情
REPORT SCHEMA;

# 查看过期备份
REPORT OBSOLETE;

# 查看需要备份的文件
REPORT NEED BACKUP;

# 查看备份集摘要
LIST BACKUP SUMMARY;

监控备份作业

使用Enterprise Manager

  • 通过OEM控制台监控备份作业的进度和状态
  • 配置备份作业的告警通知
  • 查看备份作业的历史记录和统计信息

使用SQL查询

sql
# 查看RMAN备份作业状态
SELECT SID, SERIAL#, CONTEXT, SOFAR, TOTALWORK, ROUND(SOFAR/TOTALWORK*100,2) "% COMPLETE"
FROM V$SESSION_LONGOPS
WHERE OPNAME LIKE 'RMAN%'
AND OPNAME NOT LIKE '%aggregate%'
AND TOTALWORK != 0
AND SOFAR != TOTALWORK;

# 查看RMAN备份历史
SELECT RECID, STAMP, STATUS, TYPE, COMPLETION_TIME, ELAPSED_SECONDS, BYTES/1024/1024 "SIZE (MB)"
FROM V$BACKUP_SET
ORDER BY COMPLETION_TIME DESC;

备份验证

备份集验证

sql
# 验证备份集的完整性
VALIDATE BACKUPSET 123;

# 验证所有备份集
VALIDATE BACKUP DATABASE ARCHIVELOG ALL;

# 验证备份集的可恢复性
RESTORE DATABASE VALIDATE;
RESTORE ARCHIVELOG ALL VALIDATE;

恢复测试

表级恢复测试

sql
# 创建测试表
CREATE TABLE test_backup (id NUMBER, name VARCHAR2(100));
INSERT INTO test_backup VALUES (1, 'test data');
COMMIT;

# 备份表
EXPDP system/password@orcl DIRECTORY=dpump_dir DUMPFILE=test_backup.dmp TABLES=test_backup;

# 删除测试表
DROP TABLE test_backup;

# 恢复测试表
IMPDP system/password@orcl DIRECTORY=dpump_dir DUMPFILE=test_backup.dmp TABLES=test_backup;

# 验证恢复结果
SELECT * FROM test_backup;

数据库恢复测试

sql
# 关闭数据库
SHUTDOWN IMMEDIATE;

# 启动到挂载模式
STARTUP MOUNT;

# 恢复数据库
RESTORE DATABASE;
RECOVER DATABASE;

# 打开数据库
ALTER DATABASE OPEN;

# 验证数据库完整性
SELECT COUNT(*) FROM dba_tables;

备份恢复演练

演练准备

  • 准备测试环境,与生产环境配置相同
  • 准备备份文件,包括全量备份、增量备份和归档日志
  • 制定详细的演练计划和步骤
  • 准备回滚方案

演练步骤

  1. 模拟数据库故障
  2. 执行恢复操作
  3. 验证恢复结果
  4. 记录恢复时间和过程
  5. 分析演练结果,优化备份策略

演练频率

  • 核心业务数据库:每季度一次
  • 重要业务数据库:每半年一次
  • 一般业务数据库:每年一次

备份自动化

使用Crontab调度RMAN备份

创建RMAN备份脚本/home/oracle/rman_backup.sh

bash
#!/bin/bash

# 设置环境变量
export ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1
export ORACLE_SID=orcl
export PATH=$ORACLE_HOME/bin:$PATH

# 日志文件
LOG_FILE=/home/oracle/rman_backup_$(date +%Y%m%d).log

echo "=========================================" >> $LOG_FILE
echo "RMAN Backup started at $(date)" >> $LOG_FILE
echo "=========================================" >> $LOG_FILE

# 执行全量备份
rman target / << EOF >> $LOG_FILE
RUN {
  ALLOCATE CHANNEL c1 DEVICE TYPE DISK;
  ALLOCATE CHANNEL c2 DEVICE TYPE DISK;
  BACKUP DATABASE PLUS ARCHIVELOG DELETE INPUT;
  RELEASE CHANNEL c1;
  RELEASE CHANNEL c2;
}
EOF

echo "=========================================" >> $LOG_FILE
echo "RMAN Backup completed at $(date)" >> $LOG_FILE
echo "=========================================" >> $LOG_FILE

配置Crontab调度:

bash
# 每天凌晨2:00执行全量备份
0 2 * * * /home/oracle/rman_backup.sh

# 每小时执行归档日志备份
0 * * * * /home/oracle/rman_arch_backup.sh

使用Enterprise Manager自动化

  • 通过OEM控制台创建备份作业
  • 配置备份作业的调度规则
  • 配置备份作业的告警通知
  • 监控备份作业的执行情况

最佳实践

备份实施最佳实践

  1. 使用RMAN进行备份:RMAN是Oracle推荐的备份工具,功能强大,自动化程度高
  2. 启用控制文件自动备份:确保控制文件的安全性,便于恢复
  3. 配置合理的备份保留策略:避免备份文件过多占用存储空间
  4. 使用压缩备份:减少备份文件大小,节省存储空间和备份时间
  5. 使用并行备份:提高备份速度,减少备份窗口
  6. 备份到多个位置:提高备份的安全性,防止单点故障
  7. 定期清理过期备份:释放存储空间,保持备份环境的整洁

备份验证最佳实践

  1. 定期验证备份集:确保备份文件的完整性和可用性
  2. 执行恢复测试:验证备份的可恢复性,熟悉恢复过程
  3. 记录恢复时间:了解实际的RTO,优化备份策略
  4. 分析恢复测试结果:找出备份策略的不足,进行优化
  5. 培训备份恢复人员:确保运维人员能够熟练执行恢复操作

19c与21c备份实施差异

特性19c21c
备份速度较快更快,支持更高的并行度
压缩率中等更高,支持ZSTD压缩算法
备份验证基本验证增强验证,支持更多备份类型
自动化程度较高更高,支持更多自动化配置选项

常见问题(FAQ)

1. RMAN备份速度慢如何优化?

问题:RMAN备份速度慢,影响业务运行。 解决方案

  • 增加RMAN通道数,提高并行度
  • 使用更快的存储设备,如SSD
  • 启用备份压缩,减少数据传输量
  • 优化备份窗口,避免业务高峰
  • 检查数据库负载,确保备份过程中数据库负载正常

2. 备份文件损坏如何处理?

问题:RMAN备份文件损坏,无法用于恢复。 解决方案

  • 检查备份文件的校验和,确认损坏
  • 从其他备份位置获取可用的备份文件
  • 检查备份存储设备的健康状况
  • 重新执行备份,替换损坏的备份文件
  • 考虑使用备份验证功能,提前发现损坏的备份文件

3. 控制文件丢失如何恢复?

问题:数据库控制文件丢失,无法启动数据库。 解决方案

  • 使用RMAN自动备份的控制文件恢复
sql
STARTUP NOMOUNT;
RESTORE CONTROLFILE FROM '/backup/rman/controlfile_<timestamp>.bak';
ALTER DATABASE MOUNT;
RECOVER DATABASE;
ALTER DATABASE OPEN RESETLOGS;
  • 如果没有控制文件备份,使用trace文件重建控制文件

4. 归档日志丢失如何恢复?

问题:归档日志丢失,无法完成数据库恢复。 解决方案

  • 如果是当前归档日志丢失,尝试使用闪回数据库功能
  • 如果是历史归档日志丢失,考虑不完全恢复
sql
RECOVER DATABASE UNTIL TIME '2023-01-01 00:00:00';
ALTER DATABASE OPEN RESETLOGS;
  • 优化归档日志备份策略,确保归档日志的安全性

5. RMAN备份失败,提示空间不足如何处理?

问题:RMAN备份过程中提示备份存储空间不足。 解决方案

  • 清理过期备份,释放存储空间
  • 扩展备份存储的容量
  • 调整备份策略,减少备份文件大小
  • 使用压缩备份,减少备份文件占用空间
  • 考虑使用分级存储,将不常用的备份迁移到低成本存储

6. 如何从备份中恢复特定表?

问题:需要从RMAN备份中恢复特定表,而不是整个数据库。 解决方案

  • 使用RMAN的表恢复功能(12c及以上版本)
sql
RMAN> RECOVER TABLE scott.emp OF PLUGGABLE DATABASE pdb1
       UNTIL TIME '2023-01-01 12:00:00'
       AUXILIARY DESTINATION '/tmp/auxiliary'
       REMAP TABLE scott.emp:emp_restored;
  • 使用数据泵导出/导入功能
  • 从备份中恢复到测试环境,然后导出需要的表

总结

Oracle备份实施与验证是确保数据安全和业务连续性的关键环节。通过合理配置RMAN、执行备份作业、监控备份状态和定期验证备份,可以提高数据库的可用性和可靠性。

在实施备份策略时,需要考虑19c和21c版本的差异,选择合适的备份方法和配置选项。同时,定期执行恢复测试和演练,确保备份的可恢复性,熟悉恢复过程,以便在数据库故障时能够快速恢复。

通过遵循最佳实践和解决常见问题,可以建立一个完善的Oracle备份体系,确保数据的安全性和业务的连续性。