MAXPIECESIZE比SECTION SIZE更关键,因其直接控制物理备份文件(.bkp)大小以适配磁盘/介质限制,防止ORA-19502等写入失败;SECTION SIZE仅影响大文件并行读取分段,不约束最终文件尺寸。
单个rman备份片超过磁盘容量或介质限制时,必须用maxpiecesize强制切分;不设它,哪怕分配多个通道,rman仍会生成一个超大备份片,直接写满磁盘或报错ora-19502。
为什么MAXPIECESIZE比SECTION SIZE更关键?
两者解决完全不同的问题:SECTION SIZE管的是「一个大文件能不能被多个通道并行读」,而MAXPIECESIZE管的是「最终生成的物理备份文件(.bkp)能不能小于指定大小」。前者影响备份速度,后者决定能否落地——如果备份片写到一半发现目标目录只剩50GB空间,而当前片已冲到1.8TB,那就彻底失败。
常见错误现象:
- RMAN报错
ORA-19502: write error on file ".../xxx.bkp", blockno=...,但磁盘还有空间 -
ls -lh看到单个.bkp文件远超预期(比如标称200G备份集,却生成一个1.9T的文件) - 备份成功,但无法用
RESTORE命令直接还原——因为还原时RMAN试图一次性加载整个超大文件进内存
MAXPIECESIZE该在哪儿设?
它只在通道级生效,必须出现在ALLOCATE CHANNEL或CONFIGURE CHANNEL中,不能放在BACKUP语句里。设错位置等于没设。
实操建议:
- 对多磁盘环境,每个通道指向不同挂载点,并配独立
MAXPIECESIZE:ALLOCATE CHANNEL c1 DEVICE TYPE DISK FORMAT '/disk1/backup/%U' MAXPIECESIZE 200G;<br>ALLOCATE CHANNEL c2 DEVICE TYPE DISK FORMAT '/disk2/backup/%U' MAXPIECESIZE 200G;
- 若用
CONFIGURE全局配置,记得CONFIGURE CHANNEL DEVICE TYPE DISK MAXPIECESIZE 200G,否则CONFIGURE DEFAULT DEVICE TYPE TO DISK这类命令不带该参数 - 单位支持
K、M、G,不支持TB——写1T会报错,得写1000G或1024G
和SECTION SIZE混用时要注意什么?
可以同时用,但逻辑上是两层切分:先按SECTION SIZE把数据文件切成N段(每段一个备份片),再用MAXPIECESIZE确保每段不超限。不过要小心冲突:
- 如果
SECTION SIZE 500M,但MAXPIECESIZE 200M,RMAN会把每个500M段再拆成3个物理文件(200M+200M+100M),备份片数量爆炸 - 反之,若
SECTION SIZE 50M且MAXPIECESIZE 500M,则无冲突,每个section生成一个≤500M的文件 - 最稳妥的做法:让
MAXPIECESIZE ≥ SECTION SIZE,例如都设为200M或500M
真正容易被忽略的是:一旦用了MAXPIECESIZE,所有后续BACKUP命令都会受其约束,除非显式CONFIGURE CHANNEL ... CLEAR。临时测试完不清理,可能让下周的归档日志备份也莫名其妙切成几百个小文件。


















