必须用独立数据库建catalog,不能和目标库共用;否则控制文件一挂,备份元数据全丢,rman退化成nocatalog模式。真正可用的catalog必须部署在另一个oracle实例上,服务名(如catdb)绝不能指向目标库,且创建catalog用户时须显式指定自动扩展的表空间、临时表空间及无限配额,rman连接必须带正确服务名(rman catalog user/pass@catdb),注册前需确认catalog已成功创建并连通。
必须用独立数据库建 catalog,不能和目标库共用;否则控制文件一挂,备份元数据全丢,rman 退化成 nocatalog 模式。
catalog 必须部署在独立实例上
很多人直接在目标库(比如 ORCL)里建 rcowner 用户并执行 CREATE CATALOG,这等于把备份元数据和生产库绑死。一旦目标库控制文件损坏、实例崩溃或误删表空间,recovery_catalog 表空间跟着不可用,LIST BACKUP、REPORT SCHEMA AT TIME 全部失效。
真正可用的 catalog,必须部署在另一个 Oracle 实例上——哪怕只是单机小库,服务名(如 catdb)也绝不能指向目标库。
验证是否连对:登录后运行 SHOW ALL,看 CONFIGURE DEFAULT DEVICE TYPE 是否显示已连接 catalog;更直接的是执行 LIST SCHEMA,有输出才说明连成功。
- 常见错误:
rman catalog rcowner/pass@ORCL→ 连回目标库,CREATE CATALOG失败 -
rman target / catalog rcowner/pass→ 缺少服务名,RMAN 默认连本地,大概率连错 -
tnsnames.ora中catdb条目实际指向了目标库监听端口,网络层就错了
创建 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 所在数据库的服务名,而不是目标库的。
典型流程:
- 先在 catalog 实例上创建用户:
CREATE USER rcowner IDENTIFIED BY pwd DEFAULT TABLESPACE rmantbs TEMPORARY TABLESPACE temp; - 授权:
GRANT RECOVERY_CATALOG_OWNER TO rcowner;(注意:只授这个角色,DBA或SELECT_CATALOG_ROLE无效) - 再用 RMAN 连接:
rman catalog rcowner/pwd@catdb - 执行:
CREATE CATALOG TABLESPACE rmantbs; - 最后回到目标库连接:
rman target / catalog rcowner/pwd@catdb,再运行REGISTER DATABASE
注册目标库前确保 catalog 已创建且连通
REGISTER DATABASE 前必须确认两点:catalog 用户已存在、CREATE CATALOG 已成功执行、RMAN 当前 session 确实连到了 catalog 实例。
否则会报 RMAN-20001: target database not found in recovery catalog 或更隐蔽的权限类错误。
容易被忽略的细节:
- Oracle 11g 不支持跨版本 catalog(比如用 12c catalog 管理 11g 数据库需额外验证兼容性)
- 注册后第一次同步(
RESYNC CATALOG)可能耗时较长,尤其目标库归档量大时,别误判为卡死 - catalog 表空间初始只需 125MB 左右,但长期使用建议预留增长空间,避免
ORA-01653导致 catalog 写入失败











