SBT_TAPE通道必须由介质管理器(MML)驱动,RMAN仅调用第三方MML库(如NetBackup、OSB等),不直接控制磁带;配置关键是MML库路径与PARMS参数,错误将静默失败或回退到DISK。
SBT_TAPE通道必须由介质管理器(MML)驱动,RMAN本身不直接写磁带
rman 没有内置磁带驱动能力,sbt_tape 本质是调用第三方介质管理库(如 veritas netbackup、commvault、oracle secure backup 或开源的 mt+tar 封装方案)。你配的不是“磁带参数”,而是 mml 的加载路径和配置入口。
- 检查
libobk.so(Linux)或sbtio.dll(Windows)是否真实存在且权限正确——RMAN 启动时只校验文件存在性,不校验函数导出,错放空壳库会导致备份静默失败 -
PARMS中的键名完全取决于 MML 厂商,比如 NetBackup 要"NB_ORA_CLIENT=host01",而 OSB 是"SBT_LIBRARY=/usr/lib/libosbws.so",拼错一个字母就 fallback 到DISK - Oracle 不验证
PARMS值合法性,错误配置常表现为:RMAN 报ORA-19554: error allocating device,但日志里实际是 MML 自己的报错被吞掉了——得去查 MML 的服务端日志(如/usr/openv/netbackup/logs/)
ALLOCATE CHANNEL 必须显式指定 TYPE='SBT_TAPE',自动分配会忽略磁带
即使 CONFIGURE DEFAULT DEVICE TYPE TO SBT_TAPE 已设,RMAN 在 BACKUP DATABASE 时仍可能回退到 DISK,除非你强制触发 SBT 分配逻辑。
- 交互式备份必须写:
ALLOCATE CHANNEL c1 TYPE 'SBT_TAPE' PARMS '...';—— 注意单引号不能省,双引号在某些 shell 下会被提前解析 - RMAN 脚本里如果用
CONFIGURE CHANNEL DEVICE TYPE 'SBT_TAPE' PARMS '...';,它只影响后续自动分配,但首次 backup 若没手动 alloc,依然可能走 DISK - 并行备份时,每个
CHANNEL都要独立ALLOCATE,不能靠CONFIGURE CHANNEL 1 DEVICE TYPE ...这种编号配置生效
备份片名(%U)和介质句柄受 MML 控制,别指望自定义路径
写入磁带时,%U 生成的文件名只是逻辑标识,真正存到哪条磁带、哪个槽位、是否压缩/加密,全由 MML 根据其策略决定。你在 RMAN 里写的 FORMAT '/backup/%U' 对磁带无效。
- MML 通常把
%U当作对象 ID 提交到其元数据库,物理位置映射关系只在 MML 管理界面可见 - 尝试用
FORMAT强塞本地路径(如'/dev/nst0')会直接报ORA-19527: physical standby redo log must be renamed类错误——RMAN 拦截了非法格式 - 恢复时也一样:
RESTORE CONTROLFILE FROM AUTOBACKUP能成功,是因为 RMAN 通过 MML 查询所有含控制文件备份片的磁带,不是靠路径扫描
测试通道前先跑 MML 自检命令,别只信 RMAN CONNECT
RMAN 显示 connected to target database 和 connected to recovery catalog,不代表 SBT 可用。必须用 MML 提供的原生命令验证链路。
- NetBackup:运行
/usr/openv/netbackup/bin/bpclntcmd -pn看 client 注册状态,再用bpimagelist -client <client_name> -d 2查最近备份记录 - OSB:执行
mkobk -test或obtool -listdevices,确认 tape drive 和 media server 可达 - 最简 RMAN 验证:
RMAN> ALLOCATE CHANNEL c1 TYPE 'SBT_TAPE' PARMS '...'; BACKUP VALIDATE DATABASE ARCHIVELOG ALL;——VALIDATE不真写磁带,但会完整走 MML 分配/释放流程,比LIST BACKUP更可靠
磁带集成里最耗时间的从来不是 RMAN 配置,而是 MML 服务端策略冲突、磁带机 SCSI 权限未放开、或备份窗口内磁带池已满却没报错——这些都不会在 RMAN 日志第一屏出现。










