外观
Oracle 备份实施与验证
备份实施概述
Oracle数据库备份实施是将备份策略转化为实际操作的过程,包括备份工具配置、备份作业创建、备份执行和监控等步骤。备份验证则是确保备份文件可用、完整且能够用于恢复的重要环节。
RMAN备份配置
RMAN基本配置
1. 连接到RMAN
sql
# 连接到目标数据库
rman target /
# 连接到目标数据库和恢复目录
rman target / catalog rman/rman@rcat2. 配置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配置差异
| 配置项 | 19c | 21c |
|---|---|---|
| 压缩算法 | 支持BASIC、LOW、MEDIUM、HIGH | 新增ZSTD压缩算法,压缩率更高 |
| 并行度上限 | 8 | 16 |
| 备份验证 | 基本验证 | 增强验证,支持更多备份类型 |
| 加密选项 | 支持透明加密 | 增强加密算法,支持更多加密模式 |
备份执行
全量备份
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;备份恢复演练
演练准备
- 准备测试环境,与生产环境配置相同
- 准备备份文件,包括全量备份、增量备份和归档日志
- 制定详细的演练计划和步骤
- 准备回滚方案
演练步骤
- 模拟数据库故障
- 执行恢复操作
- 验证恢复结果
- 记录恢复时间和过程
- 分析演练结果,优化备份策略
演练频率
- 核心业务数据库:每季度一次
- 重要业务数据库:每半年一次
- 一般业务数据库:每年一次
备份自动化
使用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控制台创建备份作业
- 配置备份作业的调度规则
- 配置备份作业的告警通知
- 监控备份作业的执行情况
最佳实践
备份实施最佳实践
- 使用RMAN进行备份:RMAN是Oracle推荐的备份工具,功能强大,自动化程度高
- 启用控制文件自动备份:确保控制文件的安全性,便于恢复
- 配置合理的备份保留策略:避免备份文件过多占用存储空间
- 使用压缩备份:减少备份文件大小,节省存储空间和备份时间
- 使用并行备份:提高备份速度,减少备份窗口
- 备份到多个位置:提高备份的安全性,防止单点故障
- 定期清理过期备份:释放存储空间,保持备份环境的整洁
备份验证最佳实践
- 定期验证备份集:确保备份文件的完整性和可用性
- 执行恢复测试:验证备份的可恢复性,熟悉恢复过程
- 记录恢复时间:了解实际的RTO,优化备份策略
- 分析恢复测试结果:找出备份策略的不足,进行优化
- 培训备份恢复人员:确保运维人员能够熟练执行恢复操作
19c与21c备份实施差异
| 特性 | 19c | 21c |
|---|---|---|
| 备份速度 | 较快 | 更快,支持更高的并行度 |
| 压缩率 | 中等 | 更高,支持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备份体系,确保数据的安全性和业务的连续性。
