因为rman默认通道类型为disk,执行delete/crosscheck等维护操作时若未显式分配含“for maintenance”的sbt通道,就会触发rman-06091报错或静默跳过;必须用allocate channel for maintenance device type 'sbt_tape'并正确配置parms(如env=()、绝对路径、必要参数),否则操作无效。

为什么ALLOCATE CHANNEL DEVICE TYPE SBT总是报RMAN-06091或静默跳过
RMAN默认通道类型是disk,所有磁带/第三方备份操作都依赖sbt设备。没显式分配sbt通道就执行delete backupset或crosscheck backup,结果不是RMAN-06091报错,就是静默跳过——你以为删了,其实什么都没发生。
常见错误写法:allocate channel ch1 type 'sbt_tape'漏掉for maintenance,或在run块外直接跑delete obsolete;更隐蔽的是用SEND传环境变量,这个命令已被废弃,必须把ENV=()直接塞进PARMS里。
- 维护类命令(
delete、crosscheck、change)必须配for maintenance,不能只写type sbt_tape -
PARMS里的路径(如TDPO_OPTFILE=/opt/tivoli/tsm/client/oracle/bin64/tdpo.opt)必须真实存在,且Oracle用户有读权限 - NetBackup场景下,
PARMS至少要包含NB_ORA_CLIENT和NB_ORA_POLICY,漏一个就可能触发sbtopen failed
如何验证SBT介质管理器是否真正连通
ORA-19511只是个“传话筒”,真正的问题藏在它后面的error text里,比如ANS1329S (RC29)、Failed to open backup file for restore或VxBSASendData: Failed with error。查RMAN日志里这整行error text,比盯着ORA-19511本身有用十倍。
sbttest是唯一能绕过RMAN逻辑、直连介质管理器(如NetBackup、TSM、Networker)做端到端握手的工具。很多“RMAN能list backup但delete或restore就失败”的问题,根源就是sbttest通不过。
- 执行前确认环境变量已加载,例如
TDPO_OPTFILE或NB_ORA_CLIENT,否则sbttest会静默失败 - 运行
sbttest sbt_tape(或厂商指定模块名),关键看输出中是否有sbtinit succeeded和sbtbackup succeeded - 若报
Return code -1 from sbtinit,重点检查:libobk.so路径是否正确、libssl.so等依赖库版本是否兼容、SELinux/AppArmor是否拦截了调用 - Veritas NBU用户还需先跑
bpclntcmd -self确认客户端注册状态,再跑sbttest
MAXOPENFILES设太高反而导致RMAN-03009/ORA-19554
磁带设备不支持像磁盘那样随意打开大量文件句柄。MAXOPENFILES设得过高会触发介质管理器(MML)拒绝连接或排队超时,典型报错是RMAN-03009: failure of backup command on ora_sbt_tape_1 channel + 底层ORA-19554: error allocating device——这不是RMAN自身错误,而是MML侧资源协商失败。
这个参数受三重限制:MML单客户端允许的最大并发流数(如NetBackup默认4–8)、磁带驱动器物理数量(1台通常最多支撑2–3个并发流)、Oracle为每个通道分配的PGA内存(每+1个open file约多占1MB缓冲区)。
- 实操建议从
maxopenfiles 4起步,在run块中显式分配通道时同步限定 -
maxopenfiles值通常应≤PARALLELISM,避免单通道试图打开过多文件导致MML拒绝服务 - 典型错误配置:
PARALLELISM 6但只allocate了2个channel,且每个设maxopenfiles 8——结果是2个通道各自卡住,其余4个并行度完全浪费
不同备份厂商的PARMS写法差异与坑点
TSM、NetBackup、Networker对PARMS内容要求完全不同,写错一个字段就可能让sbtinit失败,但RMAN日志里往往只显示模糊的ORA-19511。
TSM场景下,PARMS必须含ENV=(TDPO_OPTFILE=/path/to/tdpo.opt),且tdpo.opt里DSMI_CONFIG指向的dsm.sys和DSMI_DIR路径都要可读;NetBackup要求NB_ORA_CLIENT必须与/etc/hosts中主机名完全一致,否则Failed to open backup file for restore;Networker则对NSR_CLIENT的正向+反向DNS解析极其敏感,VxBSASendData: Failed with error八成是这里出问题。
- 别信
tnsping成功就万事大吉——它不验证MML服务是否注册,只验证网络通+监听活着 - Veritas用户务必确认
bp.conf中NUMBER_OF_STREAMS未被设为0,否则sbttest必挂 - 所有
PARMS中的路径都需用绝对路径,相对路径在Oracle用户上下文中大概率失效
sbttest通过了,如果Oracle进程启动时没加载LD_LIBRARY_PATH,或者libobk.so被SELinux标记为unconfined_u:object_r:lib_t:s0而非system_u:object_r:lib_t:s0,后续RMAN操作仍会静默失败。











