configure device type sbt parallelism 仅设并发上限,不自动分配通道;必须在run块中显式allocate channel并指定device type sbt,否则退单通道或报rman-01009。

为什么只配 CONFIGURE DEVICE TYPE SBT PARALLELISM 不生效
RMAN 不会自动把 CONFIGURE DEVICE TYPE SBT PARALLELISM 4 转成运行时通道——它只是声明“最多允许 4 个”,真执行时仍需在 RUN { } 块里显式写 ALLOCATE CHANNEL。漏掉这步,备份会退回到单通道,甚至报 RMAN-01009(语法错误)或静默慢跑。
常见踩坑点:
-
CONFIGURE后直接跟BACKUP DATABASE,没RUN块 → 单通道运行 -
RUN块中ALLOCATE缺少DEVICE TYPE sbt或拼错成SBT_TAPE(注意:19c 中推荐用SBT,不是所有 MML 支持SBT_TAPE) - 大括号不顶格、中间有空行或缩进 →
RMAN-01009报错
MAXOPENFILES 设太高反而让磁带备份失败
磁带设备(sbt)不支持像磁盘那样打开大量句柄。MAXOPENFILES 过高会触发介质管理器(MML)拒绝连接,典型报错是:RMAN-03009 + 底层 ORA-19554,但日志里只显示 RMAN 层错误,实际是 MML 侧资源协商失败。
这个值受三重硬约束,必须同时满足:
- MML 单客户端最大并发流数(如 NetBackup 的
NUMBER_OF_STREAMS,常为 4–8) - 物理磁带驱动器数量(1 台通常撑不住超过 2–3 个并发流,否则机械寻道争抢严重)
- Oracle PGA 内存:每增 1 个 open file,RMAN 预留约 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;
}
磁带场景下 PARALLELISM、SECTION SIZE 和 MAXOPENFILES 怎么联动
三者不匹配会导致部分通道空转、section 排队卡死,尤其在切分大文件时。
关键规则:
-
MAXOPENFILES值应 ≤ 实际分配的通道数(即 ≤PARALLELISM),否则单通道试图打开过多文件,MML 直接拒服 - 用
SECTION SIZE=500M切一个 2GB 数据文件 → 生成 4 个 section;此时至少要分配 4 个通道,且每个通道的maxopenfiles ≥ 1 -
CONFIGURE DEVICE TYPE SBT PARALLELISM 6但只ALLOCATE了 2 个通道 → 剩余 4 个并行度完全浪费,还可能因maxopenfiles设太高导致那 2 个通道自己卡住
验证是否生效最快方式:备份启动后立刻查
SELECT channel#, open_files FROM v$rman_status WHERE operation = 'BACKUP';
RAC 环境下磁带备份必须显式 CONNECT 到具体实例
RMAN 默认用 / as sysdba 连接,随机落到某个节点,所有通道都挤在同一台机器上,I/O 和 CPU 瓶颈立刻出现。跨节点并行必须每个 ALLOCATE CHANNEL 都带 CONNECT 子句,且目标必须是 tnsnames.ora 中定义的静态实例别名(如 racdb1),不能是 SCAN 地址(如 racdb_scan)。
错误写法示例:
allocate channel c1 device type sbt connect 'sys/pwd@racdb_scan'; -- ❌ SCAN 不保证路由到指定实例
正确写法:
allocate channel c1 device type sbt connect 'sys/pwd@racdb1' parms 'ENV=(NB_ORA_CLASS=RMAN_PROD)'; allocate channel c2 device type sbt connect 'sys/pwd@racdb2' parms 'ENV=(NB_ORA_CLASS=RMAN_PROD)';
容易被忽略的是:即使数据库是共享存储,MML 客户端(如 NetBackup agent)通常只装在部分节点上,未安装 agent 的节点无法发起 sbt 备份 —— 所以 CONNECT 的目标实例,必须提前确认已部署并注册 MML。











