优先使用公开参数maxpiecesize控制单个备份片大小,\_maxsetsize是隐藏参数且仅影响备份集上限,实际文件大小可能略超设定值,推荐配置通道级maxpiecesize并结合并行度合理分配资源。
用 _maxsetsize 控制 rman 备份片大小,但别指望它精确截断
rman 的 _maxsetsize 是个隐藏参数,作用是给每个备份集(backup set)设上限,防止单个 .bkp 文件膨胀到几十 gb 甚至上百 gb,卡在 nfs 挂载、对象存储上传或跨网络传输环节。但它不是“文件大小硬限制”,而是“触发新备份片的阈值”——rman 在写入过程中预估即将超出该值时,会主动结束当前备份片、新建一个。所以实际文件大小可能略超(通常几百 kb 内),尤其当一个数据块跨片边界时。
实操建议:
- 设置前确认目标环境对单文件的硬性限制(比如某云厂商上传 API 要求 ≤5GB,那
_MAXSETSIZE建议设为4800M留余量) - 该参数只对
BACKUP DATABASE、BACKUP ARCHIVELOG等生成 backup set 的命令生效;不作用于BACKUP AS COPY(那是镜像复制,走的是文件系统拷贝逻辑) - 必须在 RMAN 连接目标库后、执行备份前设置:
CONFIGURE CHANNEL DEVICE TYPE DISK PARALLELISM 2;
CONFIGURE CHANNEL 1 DEVICE TYPE DISK MAXPIECESIZE 4G;
注意:这里用的是公开参数MAXPIECESIZE,比_MAXSETSIZE更可靠、更推荐 —— 它直接控制每个 backup piece 的大小,且被 Oracle 官方文档明确支持
MAXPIECESIZE 和 _MAXSETSIZE 到底该选谁
MAXPIECESIZE 是配置通道(channel)级别的公开参数,影响每个备份片(backup piece)大小;_MAXSETSIZE 是实例级隐藏参数,影响整个备份集(backup set)大小。备份集可含多个备份片,而一个备份片只能属于一个备份集。多数场景下你真正想控的是“单个 .bkp 文件不能太大”,也就是备份片大小 —— 所以优先用 MAXPIECESIZE。
常见错误现象:
- 设了
_MAXSETSIZE=2G,结果仍生成了 3.2G 的文件 → 因为该备份集只含一个数据文件,RMAN 不会为了凑大小去拆分一个数据文件 - 同时设了
MAXPIECESIZE和_MAXSETSIZE,但_MAXSETSIZE更小 → RMAN 会按更严格的那个生效,但行为不可预测,容易出意外 - 在 RMAN 中执行
SHOW ALL看不到_MAXSETSIZE,因为它不在标准配置项里,SHOW不显示隐藏参数
备份并行度(PARALLELISM)和 MAXPIECESIZE 的配合关系
并行度决定同时开几个通道写备份片,并不改变单个备份片大小。但若你设了 MAXPIECESIZE 2G 且 PARALLELISM 4,就可能同时生成最多 4 个接近 2G 的文件 —— 总体写入吞吐上去了,但磁盘空间和传输压力是分散的。这点常被忽略,导致误以为“设了大小限制就万事大吉”。
使用场景提醒:
- 本地快速备份 + 后续手动传走:高并行 + 中等
MAXPIECESIZE(如4G)更省时间 - 直传对象存储(如 OSS/S3)且有单文件限速/限大小:低并行(
1或2)+ 小MAXPIECESIZE(如900M)更稳 - 归档日志备份:建议单独配通道,
MAXPIECESIZE设小些(500M),因为归档体积波动大,小片更易调度和清理
验证是否生效:别只看文件名,要看 V$BACKUP_PIECE
备份完成后,光 ls 看 .bkp 文件大小不保险。RMAN 可能因压缩、加密或块对齐把文件撑大;也可能因空闲空间未填满显得偏小。真实依据是控制文件里的记录。
查法(在目标库中运行):
SELECT piece_name, bytes/1024/1024 MB, status FROM V$BACKUP_PIECE WHERE completion_time > SYSDATE - 1/24;
关键点:
-
bytes字段是 RMAN 实际写入的有效数据量(不含填充),比ls -lh更准 - 如果发现某条记录
MB明显超过你设的MAXPIECESIZE,大概率是你用了AS COMPRESSED BACKUPSET—— 压缩后尺寸变小,RMAN 会放宽写入限制以提升效率,这是正常行为 -
status = 'A'表示可用;若出现'D'(deleted)或'X'(expired),说明备份片已被清理或标记失效,别拿它当有效样本
复杂点在于:RMAN 对“大小”的判断始终基于逻辑块和分配单元,不是文件系统字节。哪怕你设了 MAXPIECESIZE 1G,遇到一个刚好的 1024MB 数据文件,它仍可能生成单个 1024MB 的备份片 —— 这不是 bug,是设计使然。真正要防的,是那种动辄 30GB 的归档日志打包文件,而不是纠结某次备份恰好多了 2MB。










