恢复目录用 CATALOG 命令创建,实际是通过在拥有 RECOVERY_CATALOG_OWNER 角色的普通用户(如 rman_cat)下连接专用 catalog 数据库后执行 CREATE CATALOG;注册目标库需先 CONNECT CATALOG 用户并运行 REGISTER DATABASE,之后须手动 RESYNC CATALOG 同步元数据,且 catalog 数据库版本与 COMPATIBLE 参数必须不低于目标库。
恢复目录用 CATALOG 命令创建,不是 CREATE CATALOG
oracle rman 没有 create catalog 这个语法——这是常见误解的源头。真正创建恢复目录的命令是 create catalog 在 rman 客户端里执行,但前提是已连接到一个专用的、空的**目标数据库(catalog database)**,且该库中已存在一个普通用户(如 rman_cat),并被授予 recovery_catalog_owner 角色。
容易踩的坑:
- 在目标数据库(target DB)上直接连 RMAN 并执行
CREATE CATALOG→ 报错RMAN-06429: CATALOG database is not compatible或静默失败 - 用
sys或system用户登录 catalog 数据库后执行 → 权限不匹配,CREATE CATALOG只允许在拥有RECOVERY_CATALOG_OWNER的普通用户 schema 下运行 - catalog 用户未设置默认表空间或临时表空间 → 后续注册 target DB 时可能因空间不足卡住
注册目标数据库前必须先 CONNECT CATALOG,且用户名密码不能省略
恢复目录本身不自动关联任何数据库;每个要备份的目标库都得显式注册。这步常被跳过,导致 RMAN 仍走控制文件模式(control file-based),元数据无法集中。
实操要点:
- 在 RMAN 中先执行
CONNECT CATALOG rman_cat/password@catdb,不能只写CONNECT CATALOG rman_cat@catdb—— Oracle 会提示RMAN-00571: ===========================================================后直接退出,不报具体错误 - 注册命令是
REGISTER DATABASE,不是ADD DATABASE或IMPORT DATABASE - 若目标库有多个实例(RAC),只需在一个节点上注册一次,RMAN 自动识别所有实例的控制文件信息
- 注册后可通过
LIST INCARNATION OF DATABASE验证是否成功,应看到至少一条记录,DB_KEY和DBID不为零
RESYNC CATALOG 不是定时任务,手动触发才有用
恢复目录不会自动同步目标库的控制文件变更(比如新增数据文件、做了一次 backup、archivelog 切换)。不主动 RESYNC CATALOG,目录里的备份记录就会滞后甚至失效。
典型错误现象:
-
LIST BACKUP在 catalog 中查不到刚做的备份,但在目标库控制文件里能查到 - 执行
RESTORE DATABASE时报RMAN-06023: no backup or copy of datafile ... found to restore,其实备份存在,只是 catalog 不知道 - 使用
REPORT OBSOLETE清理时删掉了实际还在用的备份,因为 catalog 认为它“过期”,而真实状态已不同步
建议场景:
- 每次完整备份(
BACKUP DATABASE)完成后立即执行RESYNC CATALOG - 归档日志切换频繁的系统,可在每小时归档后加一次
RESYNC - 不要依赖 cron 脚本自动跑
RESYNC—— 若 RMAN session 断开或 catalog 连接失败,脚本静默跳过,没人发现
跨版本 catalog 兼容性比想象中脆弱
恢复目录数据库的版本必须 ≥ 目标数据库版本,否则注册或 resync 会失败。比如 19c catalog 库不能管理 21c target DB,哪怕只差一个小版本(如 19.18 → 19.20)也可能出问题。
关键细节:
- 检查兼容性看的是
DBID对应的COMPATIBLE参数值,不是SELECT * FROM v$version输出的 banner - 升级目标库前,务必先升级 catalog 数据库,并运行
UPGRADE CATALOG(在已连接 catalog 的 RMAN 中执行) -
UPGRADE CATALOG不可逆,且要求 catalog 用户有ALTER ANY TABLE等额外权限,不是仅靠RECOVERY_CATALOG_OWNER就够 - 如果 catalog 库是 12.1,想管理 12.2 target DB,必须先打上
12.1.0.2+的 RU 补丁,否则REGISTER直接报RMAN-06438: recovery catalog is not compatible
最易被忽略的一点:catalog 数据库的 COMPATIBLE 参数一旦设高,就不能再降级——所以别为了“兼容未来”盲目调高它。










