Skip to content

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无法直接恢复高版本的备份集
  • 跨版本恢复方法:
    1. 使用数据泵导出导入
    2. 使用GoldenGate同步
    3. 使用传输表空间
    4. 对于完整恢复,需要使用相同或更高版本的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处理
  • 使用场景:日常备份使用备份集,快速恢复使用映像副本