CONFIGURE MAXSETSIZE 在 Oracle 11g 磁盘备份中无效,仅对磁带设备(SBT)生效;它被静默忽略,不报错也不切分备份集,实际备份片大小仍由通道行为和缓冲区决定。

CONFIGURE MAXSETSIZE 在 RMAN 中根本不起作用
Oracle 11g 的 CONFIGURE MAXSETSIZE 命令对磁盘备份(DEVICE TYPE DISK)是无效的——它只在使用磁带设备(DEVICE TYPE SBT)时才被真正执行。你执行 SHOW ALL 看到它显示配置成功,但实际运行 BACKUP DATABASE 时,生成的备份集仍可能远超你设的 2G 限制。
常见错误现象:
- 执行
CONFIGURE MAXSETSIZE TO 2G;后,SHOW ALL显示已生效,但备份出来的.bkp文件仍是 8–10G - 误以为是路径或权限问题,反复检查
FORMAT字符串和写入目录,结果毫无关系
根本原因:
-
MAXSETSIZE是为 SBT 设备设计的“物理介质分片”机制,在磁盘上没有强制切分逻辑;RMAN 只会按需分配缓冲区并写入连续文件 - 11g 中即使启用了
AS COMPRESSED BACKUPSET,压缩后的数据流仍由单个通道顺序写出,不受MAXSETSIZE约束 - 该配置不会报错、不会警告,静默忽略 —— 这是最容易踩坑的地方
替代方案:用 ALLOCATE CHANNEL + RATE 控制单个备份片大小
想让备份文件更小、更易管理,不能靠 MAXSETSIZE,而要控制写入节奏和通道行为。每个通道写满缓冲区后会自动切片,而 RATE 参数能间接影响这个切片时机。
实操建议:
- 显式分配通道并限速:
ALLOCATE CHANNEL c1 DEVICE TYPE DISK RATE 10M FORMAT '/u01/backup/db_%U.bkp'; - 搭配
MAXPIECESIZE(注意不是MAXSETSIZE):某些 11.2.0.4+ 补丁版本支持该隐含参数,但需先确认:SHOW PARAMETER maxpiecesize(非官方支持,慎用) - 更可靠的做法是拆分任务:用
BACKUP DATABASE PLUS ARCHIVELOG分成两个独立RUN块,每个块单独ALLOCATE CHANNEL并RELEASE CHANNEL,避免缓冲区累积过大
为什么 BACKUP ... MAXSETSIZE 1G 语法看起来能执行?
你可能会看到类似 BACKUP DATABASE MAXSETSIZE 1G; 这样的命令没报错就执行完了——这不是生效了,而是 RMAN 把它当成了注释或忽略项。11g 解析器接受该子句只为兼容性保留,不触发任何切分逻辑。
验证方法:
- 执行后立即查
V$RMAN_BACKUP_JOB_DETAILS,看INPUT_BYTES和OUTPUT_BYTES是否明显小于 1G;通常两者几乎相等且远大于设定值 - 用
LIST BACKUP OF DATABASE查每个PIECE_NAME大小,99% 情况下都 >2G,哪怕你写了MAXSETSIZE 100M - 对比启用
CONFIGURE DEVICE TYPE DISK PARALLELISM 1后再跑,文件大小不变 → 证明不是并行导致的合并
真正可控的备份粒度:归档日志打包策略
如果你的目标是“让每个备份文件可管理”,与其死磕数据文件备份切片,不如从归档日志入手——这部分 RMAN 确实支持精细控制,而且直接影响整体备份体积和恢复窗口。
关键操作:
- 用
BACKUP ARCHIVELOG ALL DELETE INPUT替代BACKUP ARCHIVELOG FROM ... UNTIL ...:前者将所有归档视为一个逻辑单元,只生成 1–2 个备份片;后者每段都新建备份集,极易触发ORA-19510 - 加
NOT BACKED UP 1 TIMES限定范围,避免重复扫描全量归档 - 配合
ARCHIVELOG DELETION POLICY TO APPLIED ON STANDBY(如果用 ADG),让主库自动清理已被备库应用的日志,减少归档堆积
归档日志才是 RMAN 备份体积波动最大的变量;数据文件变化慢,归档每分钟都在涨。盯着 MAXSETSIZE 调数据文件,不如先清掉三天前的归档。











