RMAN中唯一决定单个备份片大小的是configure channel device type disk maxpiecesize命令,它强制按指定大小切片并生成新文件;maxsetsize控制备份集整体大小,set limit channel仅限RUN块内使用且不触发分片。
configure channel device type disk maxpiecesize 是唯一生效方式
rman 中控制单个备份片(backup piece)大小的配置,只有 configure channel device type disk maxpiecesize 这一条命令实际起效。其他看似相关的参数(如 maxsetsize、set limit channel 在非 run 块中)都不影响切片逻辑。
它不是“建议值”,而是硬性切割阈值:一旦备份数据流达到该大小,rman 就强制关闭当前备份片、生成新文件,并继续写入下一个片。
-
maxpiecesize必须带单位(100M、2G),不支持100m或100MB(会报 ORA-19566 或语法错误) - 该配置只对后续使用
device type disk的通道生效;若同时配了磁带(SBT),需单独为device type sbt设置 - 修改后立即生效,无需重启实例或 RMAN 客户端,但已有 RUN 块中的通道不受影响
为什么不能用 set limit channel kbytes 在 CONFIGURE 里设?
set limit channel 只能在 RUN 块内使用,且作用是限制**单个通道进程的累计写入量**(不是单个备份片大小),常被误当作切片控制手段。它本质是“写满就停”,但不会触发新备份片生成——RMAN 会直接报错中断备份,而不是优雅分片。
- 错误写法:
configure channel device type disk set limit channel d1 kbytes=10000;→ 语法拒绝,RMAN 报 ORA-01031 - 正确场景:仅在
RUN块中配合ALLOCATE CHANNEL使用,用于限速+防止单次写入过大(如磁带容量不足),但必须搭配maxpiecesize才能真正分片 - 典型组合:
allocate channel c1 type disk; set limit channel c1 kbytes=102400; backup database format '/bk/%U';—— 此时仍依赖maxpiecesize决定是否切片,set limit只是兜底熔断
maxpiecesize 和 maxsetsize 容易混淆的边界
maxpiecesize 控制物理文件大小上限,maxsetsize 控制逻辑备份集(backup set)整体容量上限,二者互不替代,且行为冲突时以 maxpiecesize 优先。
- 若只设
maxsetsize 1G,但未设maxpiecesize,RMAN 默认按 2GB 切片(Oracle 12c+ 行为),可能生成一个超 1G 的备份集含多个片 —— 这违反了你的maxsetsize意图 - 若
maxpiecesize 500M且maxsetsize 1G,RMAN 最多生成 2 个片(500M + 500M),不会出现第三个片,哪怕数据总量刚超 1G - 若
maxpiecesize 500M但maxsetsize 300M,备份直接失败:因为单片最小也要 500M,不可能塞进 300M 的集里
生产环境推荐配置与验证方法
不要依赖默认值。磁盘备份建议显式设 maxpiecesize,尤其当目标文件系统有单文件大小限制(如 FAT32 ≤4GB,某些 NAS 对 >2GB 文件处理异常)或需要适配磁带块长时。
- 常用值:
configure channel device type disk maxpiecesize 2G;(兼顾兼容性与管理粒度) - 验证是否生效:执行一次小备份(如
backup datafile 1 format '/tmp/df1_%U.bkp';),然后ls -lh /tmp/df1_*.bkp看文件大小是否 ≤2G;再查list backup of datafile 1;确认Piece Name是否出现多个条目 - 注意路径权限:
format中的目录必须对 Oracle OS 用户可写,否则即使配置正确,也会在写第一个片时因权限失败而中断,不提示切片问题
真正决定备份片怎么切的,从来就只是 maxpiecesize 这一个开关。其他所有“看起来相关”的参数,要么无效,要么只起辅助约束作用。配置前务必确认存储后端对单文件大小的实际限制,别让 RMAN 切得刚好,却卡在 OS 层写不进去。











