ora-19554和rman-00571错误表明介质管理器(mmu)未正确加载或配置,需检查sbt_library路径、权限、rman通道配置及mmu服务状态,并确保磁带备份已catalog且restore时显式指定device type sbt_tape。

确认介质管理器(MMU)已正确加载并注册
RMAN 本身不直接读写磁带,必须依赖第三方介质管理器(如 Oracle Secure Backup、EMC Networker、Veritas NetBackup)或 Oracle 提供的 libobk.so(Linux)/ oraobk.dll(Windows)接口库。如果恢复时提示 ORA-19554: error allocating device 或 RMAN-00571: =========================================================== 后跟设备未识别,大概率是 MMU 没装、没配或没生效。
检查步骤:
- 确认
SBT_LIBRARY路径存在且 Oracle 用户有执行权限(例如:/usr/openv/netbackup/bin/libobk.so) - 运行
strings $ORACLE_HOME/lib/libobk.so | grep -i "oracle"验证库文件非空且含 Oracle 相关符号 - 在 RMAN 中执行
SHOW CHANNEL,确认DEVICE TYPE SBT_TAPE已配置,且PARMS中的SBT_LIBRARY和SBT_PARMS值与实际环境一致 - 若使用 Oracle Secure Backup,需确保
osbwebservice进程正在运行,并且 RMAN 可通过osbadmin认证
从磁带 catalog 中加载备份元数据
磁带备份默认不自动写入控制文件——RMAN 控制文件只记录最近一次 CATALOG 过的备份信息。如果磁带上的备份是多年前做的,或者目标库是新实例(无历史 catalog),LIST BACKUP 会返回空,但备份物理存在。
必须手动 catalog 磁带上的备份片:
- 先确保磁带已装载、处于可读状态(可通过介质管理器 UI 或命令行验证,如
bpimagelist -client xxx -policy yyy) - 在 RMAN 中执行
CATALOG DEVICE TYPE SBT_TAPE BACKUPPIECE 'xxx_12345.bkp';注意:此处的文件名是磁带库逻辑名(不是 OS 路径),通常由 MMU 分配,可在 MMU 日志或LIST BACKUP SUMMARY失败后查到 - 若批量 catalog,可用
CATALOG START WITH 'xxx_';,但需确保前缀能唯一匹配磁带上的备份片逻辑名 - catalog 后立即执行
CROSSCHECK BACKUP;,标记过期或不可访问的备份为EXPIRED
restore controlfile 时指定 SBT_TAPE 设备并跳过自动查找
控制文件恢复失败最常见的原因是 RMAN 尝试从磁盘快速恢复区(FRA)找最新备份,而你实际想从磁带恢复。它不会自动 fallback 到磁带,除非显式指定设备类型。
正确做法:
- 以
NOMOUNT启动后,直接运行:RESTORE CONTROLFILE FROM 'c-123456789-20250412-01' DEVICE TYPE SBT_TAPE;—— 注意必须带DEVICE TYPE SBT_TAPE,否则 RMAN 默认走 DISK - 如果不知道具体备份片名,先用
LIST BACKUP OF CONTROLFILE;查看 catalog 中的记录,再挑出对应磁带上的那条 - 某些 MMU(如 NetBackup)要求在
SBT_PARMS中额外传参,例如ENV=(NB_ORA_CLIENT=xxx,NB_ORA_POLICY=yyy),缺了会导致 restore 报RMAN-06023: no backup or copy of datafile found to restore
recover database 时避免归档日志缺失陷阱
从磁带恢复完整数据库,往往卡在 RECOVER DATABASE 阶段,报错 ORA-00308: cannot open archived log 或 RMAN-06053: unable to perform media recovery。这不是 RMAN 问题,而是归档日志不在磁带上、或没 catalog、或路径映射错误。
关键动作:
- 确认归档日志备份是否和数据文件备份在同一磁带卷上;若分开存放,需分别 catalog 对应的
ARCHIVELOG备份片 - 执行
CATALOG ARCHIVELOG ALL;前,先SET ARCHIVELOG DESTINATION TO '/tmp/arch';(临时目录),否则 RMAN 会尝试写回原归档路径,而该路径可能不可写或空间不足 - 如果归档日志跨多卷磁带,MMU 可能需要人工换带;观察 RMAN 日志中是否出现
waiting for tape mount,此时需联系备份管理员介入 - 最后做 recover 时,加
NOFOREIGN_ARCHIVELOG参数(Oracle 12c+)可跳过缺失归档的日志应用,前提是你要接受“不完全恢复”
磁带恢复最耗时的环节从来不是 restore 本身,而是 catalog 和介质挂载的协调。DBA 必须和备份管理员共享磁带卷号、备份时间戳、策略名,而不是只扔一个 RMAN 脚本过去。











