Oracle与第三方MML库兼容需满足版本、架构、glibc、TLS等严格对齐,通过ldd检查依赖、bpgetconfig/qlogin验证注册与连通性,并正确配置SBT_LIBRARY、PARMS及超时参数。
确认 Oracle 和第三方 MML 库是否兼容
oracle rman 通过 sbt(system backup to tape)接口调用第三方备份软件,实际依赖的是厂商提供的 libobk.so(linux)或 oraclient.dll(windows)这类 mml(media management layer)库。不匹配的版本会导致 ora-19554: error allocating device 或 ora-27000: skgfqsbi error 这类底层 i/o 失败。
- NetBackup 要求 Oracle 版本、操作系统架构(x86_64/aarch64)、glibc 版本与 NetBackup 客户端严格对齐;查
/usr/openv/netbackup/bin/admincmd/bpgetconfig -L确认客户端已注册且状态为ACTIVE - Commvault 的
libcv.so必须放在$ORACLE_HOME/lib下,且需执行chmod 755;若使用 CV 11.25+,注意其默认启用 TLS 1.2,Oracle 11gR2 默认不支持,需打补丁或升级 JDBC 驱动 - 用
ldd $ORACLE_HOME/lib/libobk.so检查动态依赖是否完整,缺失libssl.so.1.0.0类错误常见于 NetBackup 8.x 在 RHEL 8 上未安装兼容包
配置 RMAN 的 SBT 参数和通道分配
RMAN 不会自动加载 MML 库,必须显式指定 SBT_LIBRARY 并设置通道参数,否则即使库存在也会走本地磁盘路径。
- 在 RMAN 中运行:
CONFIGURE CHANNEL DEVICE TYPE 'SBT_TAPE' PARMS 'SBT_LIBRARY=/usr/openv/netbackup/bin/libobk.so, ENV=(NB_ORA_CLIENT=prod-db-srv)';
-
NB_ORA_CLIENT必须与 NetBackup 主控台中注册的客户端名称完全一致(区分大小写),Commvault 对应的是CV_CLIENT_NAME - 不要在
PARMS中加多余空格或换行,RMAN 解析失败时只报ORA-19554,不提示语法问题 - 若用脚本调用 RMAN,确保环境变量
LD_LIBRARY_PATH包含 MML 库路径,否则RMAN> ALLOCATE CHANNEL c1 DEVICE TYPE 'SBT_TAPE';会静默失败
验证 MML 接口能否真正通信
配置完不代表能通——很多故障卡在认证或网络层,RMAN 的 LIST BACKUP 或 BACKUP DATABASE 命令会卡住几十秒后报错,但根本原因不在 Oracle 日志里。
- 先手工测试 MML:运行
/usr/openv/netbackup/bin/bptestbpcd -client prod-db-srv -verbose(NetBackup)或qlogin -c prod-db-srv(Commvault),确认主控服务可达 - 在数据库服务器上抓包:
tcpdump -i any port 1556 or port 8400 -w mml.pcap,看是否有 SYN 到备份服务器的请求;没有则说明防火墙或路由阻断 - 临时关闭 SELinux:
setenforce 0,RHEL/CentOS 下常因策略限制libobk.so加载共享内存段,报ORA-19511: non-RMAN error from helper - 检查
$ORACLE_HOME/rdbms/log下的sbtio.log(NetBackup)或cv_oracle.log(Commvault),比alert.log更早暴露认证失败细节
备份脚本中避免硬编码通道和超时陷阱
生产环境用 RMAN 脚本调用 MML 时,容易忽略并发通道数和等待超时,导致备份卡死或资源争用。
- 不要写死
ALLOCATE CHANNEL c1 DEVICE TYPE 'SBT_TAPE';,改用CONFIGURE DEFAULT DEVICE TYPE TO 'SBT_TAPE';+CONFIGURE DEVICE TYPE 'SBT_TAPE' PARALLELISM 2;,让 RMAN 自动管理通道生命周期 - NetBackup 默认超时是 30 分钟,若大库全备可能触发
ORA-27091: skgfqio: unable to queue I/O;在PARMS中追加NB_ORA_SERVTIMEOUT=7200(单位秒) - Commvault 的
cvoracle进程默认单线程,PARALLELISM设太高反而降低吞吐;建议从 2 开始压测,观察cvlog -l cvoracle中的排队延迟 - 备份脚本末尾务必加
RELEASE CHANNEL(如果手动分配)或RESYNC CATALOG;,否则下次连接可能复用旧通道句柄,报ORA-19566: exceeded limit










