恢复目录必须部署在独立数据库中,不能与目标库共用;创建catalog用户需指定表空间、临时表空间并授权RECOVERY_CATALOG_OWNER角色;RMAN连接须用正确服务名执行CREATE CATALOG和REGISTER DATABASE。
恢复目录必须用独立数据库,不能和目标库共用
直接在目标库(比如 orcl)里建 rcowner 用户并执行 create catalog,等于把备份元数据和生产库绑死在一起。一旦目标库控制文件损坏、实例崩溃或误删表空间,recovery_catalog 表空间跟着不可用,list backup、report schema at time 全部失效——rman 就退化成 nocatalog 模式,只能查最近有限记录。
真正起作用的 catalog,必须部署在另一个 Oracle 实例上(哪怕只是单机小库),服务名不能指向目标库。常见错误就是 tnsnames.ora 里配了 catdb = (DESCRIPTION=...),但实际连的是 rman/oracle@ORCL,RMAN 连回去的还是自己。
创建 catalog 用户前必须显式指定表空间和临时表空间
漏掉任何一项,CREATE CATALOG 会失败,且错误提示不直观。典型报错:ORA-01536: space quota exceeded for tablespace 'RMANTBS' 或卡在权限校验阶段。
- 表空间要启用自动扩展:
CREATE TABLESPACE rmantbs DATAFILE '/u01/oradata/catdb/rmantbs01.dbf' SIZE 50M AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED - 用户创建必须带
QUOTA UNLIMITED ON rmantbs,否则即使授了RECOVERY_CATALOG_OWNER也写不进 catalog 表 - 临时表空间必须显式指定:
TEMPORARY TABLESPACE temp;不写的话,用户可能因无CREATE TEMPORARY TABLE权限,在CREATE CATALOG步骤 hang 住
RMAN 连接 catalog 的命令必须带正确服务名
rman catalog rcowner/pass@catdb 这个 @catdb 是关键。它必须解析到 recovery catalog 所在数据库的服务名,而不是目标库的。验证方法:登录后执行 SHOW ALL,再看 CONFIGURE DEFAULT DEVICE TYPE 下是否显示已连接 catalog;更直接的是运行 LIST SCHEMA,有输出说明连对了。
常见误操作:
-
rman catalog rcowner/pass@ORCL→ 连回目标库,catalog 创建失败 -
rman target / catalog rcowner/pass→ 缺少服务名,RMAN 默认连本地,大概率连错 - tnsnames.ora 中
catdb条目指向了目标库监听端口,网络层就错了
执行 CREATE CATALOG 前要确保用户只有 recovery_catalog_owner 角色
给 rcowner 授 DBA 或 SELECT_CATALOG_ROLE 是无效的。RECOVERY_CATALOG_OWNER 是唯一被 RMAN 认可的角色,它包含对 RC_* 系列表的 INSERT/UPDATE/DELETE 权限。其他角色不会触发 catalog 对象初始化。
执行流程严格按顺序:
- 先用 SQL*Plus 登录 catalog 数据库,运行
CREATE USER+GRANT RECOVERY_CATALOG_OWNER TO rcowner - 退出,再用 RMAN 连:
rman catalog rcowner/pass@catdb - 在 RMAN 提示符下直接输入:
CREATE CATALOG TABLESPACE rmantbs(注意不是 SQL 模式) - 成功后会有
recovery catalog created提示,此时rcowner下会出现RC_DATABASE、RC_BACKUP_SET等几十张表
最容易被忽略的是:catalog 创建后必须立刻 REGISTER DATABASE,否则所有备份信息仍只存在目标库控制文件里,catalog 是空的。这一步没做,后续任何跨时间点恢复都查不到历史记录。


















