外观
Oracle 备份集管理
备份集的概念
- 备份集:RMAN创建的基本备份单位,包含一个或多个数据文件的备份
- 备份片:备份集的物理文件,每个备份集由一个或多个备份片组成
- 备份块:备份片中的最小存储单位
- 压缩备份:使用压缩算法减少备份集大小
- 加密备份:对备份集进行加密保护
备份集的类型
- 完全备份:包含整个数据文件的所有块
- 增量备份:只包含自上次备份以来更改的块
- 差异增量备份:包含自上次级别0备份以来更改的块
- 累积增量备份:包含自上次相同或更低级别备份以来更改的块
备份集的优势
- 空间效率:只备份使用的数据块
- 时间效率:增量备份减少备份时间
- 管理简便:RMAN自动管理备份集
- 可靠性高:包含校验和和块损坏检测
- 灵活的恢复选项:支持各种恢复场景
RMAN备份集配置
RMAN参数配置
通道配置
sql
-- 配置默认通道数
CONFIGURE DEVICE TYPE DISK PARALLELISM 2 BACKUP TYPE TO BACKUPSET;
-- 配置通道参数
CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT 'D:\\BACKUP\\%d_%t_%s_%p.bkp';
-- 配置压缩
CONFIGURE DEVICE TYPE DISK BACKUP TYPE TO COMPRESSED BACKUPSET;备份集参数
sql
-- 配置备份集大小限制
CONFIGURE MAXSETSIZE TO 2G;
-- 配置备份片大小限制
CONFIGURE CHANNEL DEVICE TYPE DISK MAXPIECESIZE 1G;
-- 配置备份加密
CONFIGURE ENCRYPTION FOR DATABASE ON;
CONFIGURE ENCRYPTION ALGORITHM 'AES256';备份集存储配置
本地存储
- 文件系统:直接存储在本地文件系统
- ASM存储:存储在ASM磁盘组中,提供更好的性能和可靠性
- 网络文件系统:存储在NFS挂载的文件系统中
远程存储
- 磁带库:使用SBT接口存储到磁带库
- 网络备份设备:使用第三方备份软件
- 云存储:存储到AWS S3、Azure Blob等云存储服务
备份集创建
完全备份
数据库完全备份
sql
-- 备份整个数据库
BACKUP DATABASE PLUS ARCHIVELOG;
-- 备份整个数据库(压缩)
BACKUP AS COMPRESSED BACKUPSET DATABASE PLUS ARCHIVELOG;
-- 备份整个数据库到指定位置
BACKUP DATABASE PLUS ARCHIVELOG FORMAT 'D:\\BACKUP\\FULL_%d_%t_%s_%p.bkp';表空间备份
sql
-- 备份指定表空间
BACKUP TABLESPACE SYSTEM, SYSAUX, UNDOTBS1;
-- 备份所有用户表空间
BACKUP TABLESPACE USERS, APPS;数据文件备份
sql
-- 备份指定数据文件
BACKUP DATAFILE 1, 2, 3;
-- 备份指定数据文件(按路径)
BACKUP DATAFILE 'D:\\ORADATA\\ORCL\\SYSTEM01.DBF';增量备份
级别0备份(基准备份)
sql
-- 创建级别0增量备份
BACKUP INCREMENTAL LEVEL 0 DATABASE PLUS ARCHIVELOG;
-- 创建压缩的级别0增量备份
BACKUP AS COMPRESSED BACKUPSET INCREMENTAL LEVEL 0 DATABASE;级别1差异备份
sql
-- 创建级别1差异增量备份
BACKUP INCREMENTAL LEVEL 1 DATABASE PLUS ARCHIVELOG;
-- 创建压缩的级别1差异增量备份
BACKUP AS COMPRESSED BACKUPSET INCREMENTAL LEVEL 1 DATABASE;级别1累积备份
sql
-- 创建级别1累积增量备份
BACKUP INCREMENTAL LEVEL 1 CUMULATIVE DATABASE PLUS ARCHIVELOG;
-- 创建压缩的级别1累积增量备份
BACKUP AS COMPRESSED BACKUPSET INCREMENTAL LEVEL 1 CUMULATIVE DATABASE;归档日志备份
sql
-- 备份所有归档日志
BACKUP ARCHIVELOG ALL;
-- 备份所有归档日志并删除
BACKUP ARCHIVELOG ALL DELETE INPUT;
-- 备份指定范围的归档日志
BACKUP ARCHIVELOG FROM SEQUENCE 100 UNTIL SEQUENCE 200;控制文件和SPFILE备份
sql
-- 备份控制文件
BACKUP CURRENT CONTROLFILE;
-- 备份控制文件到指定位置
BACKUP CURRENT CONTROLFILE FORMAT 'D:\\BACKUP\\CONTROLFILE_%d_%t_%s_%p.bkp';
-- 备份SPFILE
BACKUP SPFILE;
-- 备份SPFILE到指定位置
BACKUP SPFILE FORMAT 'D:\\BACKUP\\SPFILE_%d_%t_%s_%p.bkp';备份集管理
备份集目录
sql
-- 列出所有备份集
LIST BACKUP;
-- 列出特定备份集
LIST BACKUPSET 123;
-- 列出特定备份片
LIST BACKUPPIECE 'D:\\BACKUP\\ORCL_12345_67_1.bkp';
-- 列出过期的备份集
LIST EXPIRED BACKUP;
-- 列出无效的备份集
LIST INVALID BACKUP;备份集标签管理
sql
-- 使用标签创建备份集
BACKUP DATABASE TAG 'FULL_BACKUP_20230101';
-- 列出带有特定标签的备份集
LIST BACKUP TAG 'FULL_BACKUP_20230101';
-- 根据标签恢复
RESTORE DATABASE FROM TAG 'FULL_BACKUP_20230101';备份集过期管理
sql
-- 配置备份保留策略(基于冗余)
CONFIGURE RETENTION POLICY TO REDUNDANCY 3;
-- 配置备份保留策略(基于恢复窗口)
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS;
-- 手动标记备份集为过期
CHANGE BACKUPSET 123 UNTIL TIME 'SYSDATE-14' EXPIRE;
-- 手动标记备份集为无效
CHANGE BACKUPSET 123 INVALID;
-- 手动标记备份集为有效
CHANGE BACKUPSET 123 VALID;备份集删除
sql
-- 删除过期的备份集
DELETE EXPIRED BACKUP;
-- 删除指定备份集
DELETE BACKUPSET 123;
-- 删除指定备份片
DELETE BACKUPPIECE 'D:\\BACKUP\\ORCL_12345_67_1.bkp';
-- 删除所有备份集
DELETE BACKUP;
-- 删除特定日期之前的备份集
DELETE BACKUP UNTIL TIME 'SYSDATE-30';备份集验证
备份集完整性验证
sql
-- 验证备份集
VALIDATE BACKUPSET 123;
-- 验证所有备份集
VALIDATE BACKUP;
-- 验证备份片
VALIDATE BACKUPPIECE 'D:\\BACKUP\\ORCL_12345_67_1.bkp';
-- 验证备份集并检查物理损坏
VALIDATE BACKUPSET 123 CHECK LOGICAL;备份集可恢复性验证
sql
-- 检查备份集的可恢复性
RESTORE DATABASE VALIDATE;
-- 检查表空间的可恢复性
RESTORE TABLESPACE USERS VALIDATE;
-- 检查数据文件的可恢复性
RESTORE DATAFILE 1 VALIDATE;备份集内容验证
sql
-- 列出备份集包含的文件
REPORT SCHEMA AT TIME 'SYSDATE';
-- 检查备份集的详细信息
LIST BACKUPSET 123 DETAIL;
-- 检查备份集的内容
RESTORE BACKUPSET 123 PREVIEW;备份集恢复操作
完全恢复
数据库完全恢复
sql
-- 关闭数据库
SHUTDOWN IMMEDIATE;
-- 启动到挂载状态
STARTUP MOUNT;
-- 恢复数据库
RESTORE DATABASE;
RECOVER DATABASE;
-- 打开数据库
ALTER DATABASE OPEN;表空间恢复
sql
-- 使表空间脱机
ALTER TABLESPACE USERS OFFLINE;
-- 恢复表空间
RESTORE TABLESPACE USERS;
RECOVER TABLESPACE USERS;
-- 使表空间联机
ALTER TABLESPACE USERS ONLINE;数据文件恢复
sql
-- 使数据文件脱机
ALTER DATABASE DATAFILE 'D:\\ORADATA\\ORCL\\USERS01.DBF' OFFLINE;
-- 恢复数据文件
RESTORE DATAFILE 'D:\\ORADATA\\ORCL\\USERS01.DBF';
RECOVER DATAFILE 'D:\\ORADATA\\ORCL\\USERS01.DBF';
-- 使数据文件联机
ALTER DATABASE DATAFILE 'D:\\ORADATA\\ORCL\\USERS01.DBF' ONLINE;增量备份恢复
sql
-- 恢复级别0备份
RESTORE DATABASE FROM TAG 'LEVEL0_BACKUP';
-- 应用级别1增量备份
RECOVER DATABASE;
-- 打开数据库
ALTER DATABASE OPEN;归档日志恢复
sql
-- 恢复归档日志
RESTORE ARCHIVELOG ALL;
-- 恢复指定范围的归档日志
RESTORE ARCHIVELOG FROM SEQUENCE 100 UNTIL SEQUENCE 200;
-- 应用归档日志进行恢复
RECOVER DATABASE;控制文件恢复
sql
-- 关闭数据库
SHUTDOWN ABORT;
-- 启动到nomount状态
STARTUP NOMOUNT;
-- 恢复控制文件
RESTORE CONTROLFILE FROM 'D:\\BACKUP\\CONTROLFILE_ORCL_12345_67_1.bkp';
-- 挂载数据库
ALTER DATABASE MOUNT;
-- 恢复数据库
RESTORE DATABASE;
RECOVER DATABASE;
-- 打开数据库
ALTER DATABASE OPEN RESETLOGS;备份集监控
备份集状态监控
sql
-- 查看备份集状态
SELECT bs.set_stamp, bs.set_count, bs.device_type, bs.completion_time,
bs.elapsed_seconds, bs.status, bs.compressed, bs.encrypted,
bs.backup_type, bs.controlfile_included, bs.spfile_included
FROM v$backup_set bs
ORDER BY bs.completion_time DESC;
-- 查看备份片状态
SELECT bp.piece#, bp.name, bp.status, bp.completion_time,
bp.bytes/1024/1024 AS size_mb, bp.compressed, bp.encrypted
FROM v$backup_piece bp
ORDER BY bp.completion_time DESC;
-- 查看备份集详细信息
SELECT bs.set_stamp, bs.set_count, df.file#,
df.name AS datafile_name, bs.backup_type
FROM v$backup_datafile df, v$backup_set bs
WHERE df.set_stamp = bs.set_stamp
AND df.set_count = bs.set_count
ORDER BY bs.set_stamp DESC;备份性能监控
sql
-- 查看备份性能统计
SELECT start_time, end_time, elapsed_seconds,
output_bytes/1024/1024 AS output_mb,
(output_bytes/1024/1024)/elapsed_seconds AS mb_per_sec,
status, input_type
FROM v$rman_backup_job_details
ORDER BY start_time DESC;
-- 查看通道性能
SELECT session_recid, session_stamp, channel_id,
process, status, device_type,
bytes_processed/1024/1024 AS mb_processed,
elapsed_seconds,
(bytes_processed/1024/1024)/elapsed_seconds AS mb_per_sec
FROM v$rman_channel
ORDER BY session_recid DESC;备份错误监控
sql
-- 查看RMAN错误
SELECT * FROM v$rman_output
WHERE message LIKE '%ERROR%'
ORDER BY recid DESC;
-- 查看备份失败的作业
SELECT start_time, end_time, status, input_type,
error_count, output_bytes
FROM v$rman_backup_job_details
WHERE status != 'COMPLETED'
ORDER BY start_time DESC;备份集优化
空间优化
压缩策略
sql
-- 配置默认压缩算法
CONFIGURE COMPRESSION ALGORITHM 'BASIC'; -- Oracle 11g
CONFIGURE COMPRESSION ALGORITHM 'MEDIUM'; -- Oracle 12c+
-- 使用高级压缩
BACKUP AS COMPRESSED BACKUPSET DATABASE;
-- 比较压缩效果
SELECT bs.completion_time, bs.compressed,
SUM(bp.bytes)/1024/1024 AS uncompressed_mb,
SUM(bp.compressed_bytes)/1024/1024 AS compressed_mb,
ROUND((1 - SUM(bp.compressed_bytes)/SUM(bp.bytes))*100, 2) AS compression_ratio
FROM v$backup_set bs, v$backup_piece bp
WHERE bs.set_stamp = bp.set_stamp
AND bs.set_count = bp.set_count
AND bs.compressed = 'YES'
GROUP BY bs.completion_time, bs.compressed
ORDER BY bs.completion_time DESC;增量备份策略
- 级别0备份:每周执行一次
- 级别1差异备份:每天执行一次
- 级别1累积备份:每三天执行一次
- 归档日志备份:每小时执行一次
性能优化
并行度优化
sql
-- 配置并行度
CONFIGURE DEVICE TYPE DISK PARALLELISM 4;
-- 备份时指定并行度
BACKUP DATABASE PLUS ARCHIVELOG SECTION SIZE 1G;
-- 恢复时指定并行度
RESTORE DATABASE PARALLEL 4;通道优化
sql
-- 配置多个通道
CONFIGURE DEVICE TYPE DISK PARALLELISM 3;
-- 配置通道参数
CONFIGURE CHANNEL 1 DEVICE TYPE DISK FORMAT 'D:\\BACKUP1\\%d_%t_%s_%p.bkp';
CONFIGURE CHANNEL 2 DEVICE TYPE DISK FORMAT 'D:\\BACKUP2\\%d_%t_%s_%p.bkp';
CONFIGURE CHANNEL 3 DEVICE TYPE DISK FORMAT 'D:\\BACKUP3\\%d_%t_%s_%p.bkp';备份集大小优化
sql
-- 配置备份集大小
CONFIGURE MAXSETSIZE TO 4G;
-- 配置备份片大小
CONFIGURE CHANNEL DEVICE TYPE DISK MAXPIECESIZE 2G;
-- 备份时指定备份片大小
BACKUP DATABASE SECTION SIZE 1G;常见问题(FAQ)
Q1: 备份集损坏怎么办?
A1: 解决方法:
- 检查备份集的损坏程度:`VALIDATE BACKUPSET 123;
- 如果是部分损坏,尝试从其他备份集恢复
- 如果所有备份集都损坏,使用最新的有效备份
- 启用块更改跟踪提高增量备份性能
Q2: 如何提高备份集的创建速度?
A2: 提高备份速度的方法:
- 增加并行度:`CONFIGURE DEVICE TYPE DISK PARALLELISM 4;
- 使用多个通道:配置多个备份通道
- 启用异步I/O:提高磁盘I/O性能
- 使用压缩备份:减少数据量
- 选择合适的备份时间窗口:避开业务高峰期
Q3: 如何确保备份集的安全性?
A3: 确保备份安全性的方法:
- 使用加密备份:`CONFIGURE ENCRYPTION FOR DATABASE ON;
- 定期验证备份集:`VALIDATE BACKUP;
- 存储备份集到安全位置:异地存储
- 实施访问控制:限制备份目录权限
- 定期测试恢复流程:确保备份可恢复
Q4: 备份集占用空间过大怎么办?
A4: 解决空间问题的方法:
- 配置适当的保留策略:`CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS;
- 定期删除过期备份:`DELETE EXPIRED BACKUP;
- 使用压缩备份:`BACKUP AS COMPRESSED BACKUPSET;
- 实施增量备份策略:减少备份数据量
- 监控备份空间使用情况:及时扩容
Q5: 如何从备份集恢复单个表?
A5: 恢复单个表的方法:
- 使用闪回表功能(如果表未被删除)
- 使用RMAN表恢复功能(Oracle 12c+):sql
RECOVER TABLE hr.employees UNTIL TIME 'SYSDATE-1' AUXILIARY DESTINATION 'D:\\AUX'; - 从备份集恢复到临时表空间,然后导出导入
Q6: 备份集创建失败的常见原因有哪些?
A6: 常见的备份失败原因:
- 空间不足:目标位置没有足够的空间
- 权限不足:RMAN用户没有足够的权限
- 磁盘I/O错误:磁盘故障或I/O瓶颈
- 网络问题:远程备份时网络中断
- 数据库问题:数据库处于不一致状态
Q7: 如何监控备份集的使用情况?
A7: 监控备份集使用情况的方法:
- 查询v$backup_set和v$backup_piece视图
- 使用RMAN的LIST命令:`LIST BACKUP SUMMARY;
- 配置RMAN日志:记录详细的备份信息
- 使用企业管理器(OEM)监控备份作业
- 编写自定义监控脚本定期检查
Q8: 如何在不同版本的Oracle之间使用备份集?
A8: 跨版本使用备份集的方法:
- 向下兼容:高版本Oracle可以恢复低版本的备份集
- 向上兼容:低版本Oracle无法直接恢复高版本的备份集
- 跨版本恢复方法:
- 使用数据泵导出导入
- 使用GoldenGate同步
- 使用传输表空间
- 对于完整恢复,需要使用相同或更高版本的Oracle
Q9: 如何配置备份集的自动删除?
A9: 配置自动删除的方法:
- 配置保留策略:`CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS;
- 启用自动删除:`CONFIGURE BACKUP OPTIMIZATION ON;
- 定期执行删除过期备份的作业:sql
RUN { ALLOCATE CHANNEL FOR MAINTENANCE DEVICE TYPE DISK; DELETE EXPIRED BACKUP; RELEASE CHANNEL; }
Q10: 备份集和映像副本有什么区别?
A10: 备份集和映像副本的区别:
- 备份集:RMAN特有的格式,只包含使用的数据块,支持压缩和加密
- 映像副本:数据文件的精确副本,包含所有块,不支持压缩和加密
- 备份集优势:空间效率高,管理简便,支持更多功能
- 映像副本优势:恢复速度快,可以直接使用,不需要RMAN处理
- 使用场景:日常备份使用备份集,快速恢复使用映像副本
