RMAN-06091错误源于未显式分配FOR MAINTENANCE通道就执行DELETE/CROSSCHECK等维护命令,必须在RUN块中用ALLOCATE CHANNEL FOR MAINTENANCE DEVICE TYPE指定磁盘或SBT_TAPE通道,并将环境参数(如NB_ORA_CLIENT)直接写入PARMS,而非用已废弃的SEND命令。

ALLOCATE CHANNEL 报 RMAN-06091:没配 maintenance 就执行 delete/crosscheck
RMAN 默认不为维护类命令(DELETE OBSOLETE、CROSSCHECK ARCHIVELOG ALL、CHANGE UNAVAILABLE BACKUP)自动分配通道,哪怕你已配置了 CONFIGURE DEFAULT DEVICE TYPE TO SBT_TAPE。只要没显式声明 FOR MAINTENANCE,就会报 RMAN-06091: no channel allocated for maintenance,或者静默跳过——你以为删了归档,其实控制文件里还挂着“幽灵记录”。
常见错误写法:
-
ALLOCATE CHANNEL ch1 TYPE 'SBT_TAPE'—— 漏掉FOR MAINTENANCE - 在
RUN块外直接跑DELETE NOPROMPT OBSOLETE - 用废弃的
SEND传环境变量,比如SEND 'NB_ORA_CLIENT=client01';必须把参数塞进PARMS里,如PARMS 'NB_ORA_CLIENT=client01, NB_ORA_POLICY=oracle_policy'
正确做法是包裹在 RUN 块中,且每个通道都带 FOR MAINTENANCE:
RUN {
ALLOCATE CHANNEL ch_disk FOR MAINTENANCE DEVICE TYPE DISK;
ALLOCATE CHANNEL ch_tape FOR MAINTENANCE DEVICE TYPE 'SBT_TAPE'
PARMS 'TDPO_OPTFILE=/opt/tivoli/tsm/client/oracle/bin64/tdpo.opt';
DELETE NOPROMPT OBSOLETE;
CROSSCHECK ARCHIVELOG ALL;
RELEASE CHANNEL ch_disk;
RELEASE CHANNEL ch_tape;
}
RAC 环境下 ALLOCATE CHANNEL 失败:硬编码节点地址导致 ORA-12514
RAC 中若在脚本里写死 ALLOCATE CHANNEL ch1 DEVICE TYPE DISK CONNECT 'sys/oracle@rac1:1521/oradb',一节点宕机,RMAN 就卡在连接阶段,报 ORA-12514: TNS:listener does not currently know of service requested。RMAN 不重试、不切换、不 failover,只按顺序连,连不上就中断。
解决核心是剥离节点依赖:
- 删掉所有带
CONNECT参数的ALLOCATE CHANNEL语句 - 改用统一 SCAN 服务名连接:
rman target sys/oracle@oradb(其中oradb是tnsnames.ora中定义的 SCAN VIP 服务名,不是单节点名) - 确认该服务名启用
FAILOVER=ON和LOAD_BALANCE=ON - 备份路径必须共享:不能用
/home/oracle/bak这种本地路径,得挂载同一 NFS 或指向同一 ASM diskgroup,且FORMAT显式写死共享路径,例如FORMAT '/bak/rman/df_%U'或FORMAT '+DATA/BACKUP/%U'
SBT_TAPE 通道分配后仍失败:sbttest 通不过才是真瓶颈
ALLOCATE CHANNEL ... TYPE 'SBT_TAPE' 成功不代表磁带链路真通。很多问题表现为 DELETE 或 RESTORE 阶段才爆 ORA-19511,但这个错误只是“传话筒”,真正原因藏在它后面的 error text 里,比如 ANS1329S (RC29)、VxBSASendData: Failed with error。
验证必须用 sbttest 直连介质管理器:
- 先确保环境变量已加载(如
TDPO_OPTFILE或NB_ORA_CLIENT),否则sbttest会静默失败 - 运行
sbttest sbt_tape(NetBackup 用户可能需用libnbobk.so路径) - 关键看输出是否含
sbtinit succeeded和sbtbackup succeeded - 若报
Return code -1 from sbtinit,重点查:libobk.so路径是否正确、libssl.so版本是否兼容、SELinux/AppArmor 是否拦截调用 - Veritas NBU 用户还需先跑
bpclntcmd -self确认客户端注册状态
DUPLICATE 或 RESTORE 阶段 ALLOCATE CHANNEL 失败:辅助实例根本没活过来
RMAN DUPLICATE 报 ORA-12154、ORA-17629 或 ORA-17627,八成不是 RMAN 命令错,而是辅助实例压根没启动成功或网络不通。
必须满足四个硬条件:
- 辅助实例独立启动至
NOMOUNT状态,且ORACLE_SID与 target 不同 - 辅助端
tnsnames.ora里有对应服务名(如auxdb),且 RMAN 连接串用服务名而非 SID - 辅助主机
listener.ora已配该服务,并执行过lsnrctl reload - 连接串加
(UR=A)(尤其 target 是 standby 时),否则 RMAN 无法建立反向连接
验证方式很简单:在辅助机上,用 sqlplus / as sysdba 进去后,手动执行 connect sys/oracle@target_service as sysdba,能通才算真正就绪。











