maxopenfiles在磁带备份中易被忽略,因其受mml并发流数、驱动器物理数量和pga内存三重限制,设过高会导致mml拒绝连接(如rman-03009/ora-19554),合理值通常为4且应≤parallelism以避免通道阻塞。

磁带备份时 MAXOPENFILES 设太高,RMAN 会直接报 RMAN-03009 和 ORA-19554,不是 RMAN 本身出错,而是介质管理器(MML)拒绝连接——这个参数必须按物理约束来设,不能拍脑袋。
MAXOPENFILES 为什么在磁带场景下特别容易踩坑
磁带设备(sbt)不支持像磁盘那样随意打开大量文件句柄。设高了,MML(比如 NetBackup、CommVault)会在底层拒绝新流请求,但 RMAN 日志只显示上层错误,排查时容易卡在“是不是 RMAN 配置错了”这个死循环里。
它实际受三重硬限制:
- 介质管理器单客户端允许的最大并发流数(查
bp.conf中的NUMBER_OF_STREAMS,NetBackup 默认常为 4–8) - 物理磁带驱动器数量(1 台驱动器通常最多稳撑 2–3 个并发流,再多会机械寻道争抢)
- Oracle PGA 内存:每个 open file 预留约 1MB 缓冲区;
MAXOPENFILES=8+ 4 个通道 = 多占 32MB PGA,可能挤占排序/哈希区
实操建议:从 4 起步,在 run { } 块中显式分配通道时同步限定:
run {
allocate channel c1 device type sbt parms 'ENV=(NB_ORA_CLASS=RMAN_PROD)' maxopenfiles 4;
allocate channel c2 device type sbt parms 'ENV=(NB_ORA_CLASS=RMAN_PROD)' maxopenfiles 4;
backup as compressed backupset database;
}
SECTION SIZE 不生效?先确认你没用错命令或写错位置
SECTION SIZE 只对 BACKUP DATAFILE、BACKUP DATABASE、BACKUP TABLESPACE 有效,对 BACKUP AS COPY 或 BACKUP ARCHIVELOG 直接报错 ORA-19693。
它也不能在 CONFIGURE 中全局设置——该参数不支持持久化,必须写进 BACKUP 命令本身或 run { } 块里。
常见错误写法:
-
backup as copy section size 500m datafile 4;→ 报错 -
configure section size 500m;→ 语法不识别,被忽略 -
backup section size 500m archivelog all;→ 报错ORA-19693
正确写法示例:
run {
allocate channel c1 device type disk format '/bkp1/%U';
allocate channel c2 device type disk format '/bkp2/%U';
backup section size 500m datafile 4;
}
PARALLELISM、ALLOCATE CHANNEL 和 MAXOPENFILES 怎么联动才不浪费资源
三者配合不当,会出现“开了 6 个并行度,实际只有 2 个通道干活,还全卡住”的情况。
CONFIGURE DEVICE TYPE sbt PARALLELISM 6 只是声明“最多可用 6 个通道”,真正调度靠 allocate channel;而 MAXOPENFILES 是每个通道自己的上限。
关键约束:
-
MAXOPENFILES值通常应 ≤PARALLELISM,否则单通道试图打开过多文件,MML 拒绝服务 - 若用
SECTION SIZE=500M切一个 2GB 数据文件,会生成 4 个 section;此时至少要allocate4 个通道,且每个maxopenfiles ≥ 1,否则多余 section 排队等空闲通道 - 典型错误配置:
PARALLELISM 6但只allocate2 个 channel,且每个设maxopenfiles 8→ 2 个通道各自卡死,剩下 4 个并行度完全闲置
磁盘 vs 磁带:通道配置逻辑根本不同
磁盘备份可以粗放些:通道数可略超物理盘数,靠异步 I/O 和缓存抵消部分开销;但磁带不行——它本质是串行机械设备,通道数必须严格匹配驱动器物理数量和 MML 流限制。
比如有 2 台磁带驱动器,MML 允许单客户端最多 4 个流,那 PARALLELISM 设成 4 是合理上限;再往上设,只是让 MML 排队更久,不会提速,反而增加 RMAN-03009 概率。
容易被忽略的一点:即使你用 CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT 设了路径,RMAN 在执行 BACKUP DATABASE 时仍可能 fallback 到默认通道——务必用 show all 确认当前生效的 CONFIGURE DEVICE TYPE DISK PARALLELISM 和 CONFIGURE CHANNEL 是否一致,尤其在脚本化备份中。











