SECTION SIZE 仅在显式用于 BACKUP 语句且目标数据文件大于指定值时生效,将大文件按块范围均分为多个 section 以支持多通道并行备份;它不适用于归档日志、控制文件或小文件,也不支持全局配置。

SECTION SIZE 什么时候真正起作用
它只对单个大文件有效,且必须显式写在 BACKUP 语句里;SECTION SIZE 不会影响整个数据库备份的并行粒度,也不会作用于归档日志或控制文件。如果数据文件小于你指定的 SECTION SIZE,RMAN 直接退化为单段备份——参数被忽略,不报错也不提示。
常见误判场景:
- 用
BACKUP DATABASE但没加SECTION SIZE→ 大文件仍由单通道顺序处理 - 对一个 200MB 的文件设
SECTION SIZE 500M→ 实际仍是单段,因为文件比 section 小 - 在
CONFIGURE中设置SECTION SIZE→ 无效,该参数不支持全局配置,只能出现在BACKUP命令中
如何计算合理的 SECTION SIZE 值
目标是让一个大文件被切分成 4–32 个 section,太少起不到并行效果,太多会增加调度开销和碎片管理成本。Oracle 单文件最多支持 256 个 section,但超过 32 后收益快速衰减。
实操建议:
- 先查文件大小:
SELECT file_name, bytes/1024/1024/1024 AS gb FROM dba_data_files WHERE file_id = &file_id; - 若为 128GB 文件,想切 16 段 →
SECTION SIZE 8G(128 ÷ 16) - 若为 300GB 文件,设
SECTION SIZE 10G→ 理论生成 30 段,实际 RMAN 会自动调整到最接近的整数段数,最后一段可能略小 - 避免设过小值如
SECTION SIZE 10M→ 可能触发 256 上限强制放大,反而偏离预期
SECTION SIZE 必须搭配显式通道分配才生效
SECTION SIZE 本身不启动并行;它只是“把文件切成块”,真正并行靠的是多个 ALLOCATE CHANNEL 同时干活。每个 channel 负责一个 section,且一个 channel 在同一时间只能处理一个 section。
典型错误配置:
- 只配了
CONFIGURE DEVICE TYPE DISK PARALLELISM 4,然后直接BACKUP SECTION SIZE 5G DATAFILE 7;→ 实际仍单通道运行,因为没在RUN块里ALLOCATE - ALLOCATE 了 2 个 channel,但设
SECTION SIZE 1G切出 20 段 → 后 18 段排队等空闲 channel,整体耗时未必下降 - 磁带环境(SBT)下
maxopenfiles设太高(如 16),但只开了 2 个 channel → MML 层拒绝服务,报错类似ORA-19554: error allocating device
正确写法示例:
RUN {
ALLOCATE CHANNEL c1 DEVICE TYPE DISK FORMAT '/bak/c1/%U';
ALLOCATE CHANNEL c2 DEVICE TYPE DISK FORMAT '/bak/c2/%U';
ALLOCATE CHANNEL c3 DEVICE TYPE DISK FORMAT '/bak/c3/%U';
ALLOCATE CHANNEL c4 DEVICE TYPE DISK FORMAT '/bak/c4/%U';
BACKUP SECTION SIZE 10G DATAFILE 7;
}和 MAXPIECESIZE、PARALLELISM 的关键区别别混淆
SECTION SIZE 是逻辑切分单位(按数据块范围),MAXPIECESIZE 是物理输出限制(按最终备份片字节数),PARALLELISM 是通道数量上限声明——三者完全不在同一层。
容易踩的坑:
- 以为
MAXPIECESIZE 2G和SECTION SIZE 2G效果一样 → 实际前者可能把一个 section 拆成多个备份片,后者保证每个 section 输出为一个 piece(除非超限) - 在同一个
BACKUP命令里混用SECTION SIZE和FILESPERSET→ RMAN 优先按 section 切,FILESPERSET对多文件备份有效,但对单个大数据文件无约束力 - 设
PARALLELISM 8但没检查 I/O 能力 → 多个 channel 往同一 NFS 目录写,触发 lease timeout 或 write stall,v$session_event里看到大量enq: DF - contention
最常被忽略的一点:SECTION SIZE 对空块不敏感。它按文件总大小均分 block 范围,不管那些 block 是否实际使用。所以压缩率高的表空间,实际备份量远小于理论 section 大小,但调度行为不变。


















