必须用独立数据库建catalog,不能和目标库共用;否则控制文件损坏时元数据全失,RMAN退化为nocatalog模式。需用独立服务名(如catdb)连接catalog用户,显式指定自动扩展表空间、临时表空间及无限配额,并仅授予RECOVERY_CATALOG_OWNER角色。
必须用独立数据库建 catalog,不能和目标库共用;否则 RMAN 退化成 nocatalog 模式,元数据一崩全崩。
恢复目录不是“在目标库里建个用户”就行的事。RMAN 的 CREATE CATALOG 命令要求 catalog 所在数据库与目标库物理隔离——哪怕只是同一台机器上的另一个实例(比如 catdb),也绝不能指向 ORCL 这类目标库的服务名。
常见错误现象:rman catalog rcowner/pass@ORCL 表面看连上了,实际还是连回目标库;LIST BACKUP 可能返回空或只显示最近几条,REPORT SCHEMA AT TIME 直接报错或无响应。
SHOW ALL,确认 CONFIGURE DEFAULT DEVICE TYPE 下有 catalog 字样;更直接的是运行 LIST SCHEMA,有输出才说明 catalog 已生效catdb 条目必须明确指向 recovery catalog 实例的监听地址和端口,不能复用目标库的配置RECOVERY_CATALOG_OWNER 角色再全也没用漏掉 QUOTA UNLIMITED ON rmantbs 或没写 TEMPORARY TABLESPACE temp,CREATE CATALOG 会失败,且 Oracle 不报“缺权限”,而是卡在初始化阶段或抛出 ORA-01536: space quota exceeded 这类误导性错误。
CREATE TABLESPACE rmantbs DATAFILE '/u01/oradata/catdb/rmantbs01.dbf' SIZE 50M AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED
QUOTA UNLIMITED ON rmantbs,仅授 RECOVERY_CATALOG_OWNER 角色不够CREATE USER rcowner IDENTIFIED BY pwd DEFAULT TABLESPACE rmantbs TEMPORARY TABLESPACE temp;不写会导致 CREATE CATALOG hang 住rman catalog rcowner/pass@catdb 中的 @catdb 是强制项,不是可选后缀。省略它,RMAN 默认连接本地实例(通常是目标库),CREATE CATALOG 就会在错误库里执行。
rman catalog rcowner/pass@catdb(先连 catalog 库)rman target / catalog rcowner/pass(缺服务名)、rman catalog rcowner/pass@ORCL(连错库)REGISTER DATABASE,且必须在已连接 catalog 的会话中执行;否则报 RMAN-20001: target database not found in recovery catalog
给 catalog 用户加 DBA、SELECT_CATALOG_ROLE 甚至 CONNECT 和 RESOURCE 都无效。RECOVERY_CATALOG_OWNER 是唯一被 RMAN 识别的角色,它隐含对 RC_* 系列表的完整 DML 权限。
GRANT RECOVERY_CATALOG_OWNER TO rcowner 后,立刻验证:SELECT * FROM SESSION_ROLES 确认该角色已激活REVOKE 干净再重授,避免权限冲突干扰 catalog 初始化CREATE CATALOG 成功后,RC_DATABASE、RC_BACKUP_SET 等基础表才会被创建;没这个角色,表根本不会出现最容易被忽略的点是:tnsnames.ora 里 catdb 解析是否真指向独立实例——很多问题表面是权限或语法错,根子在 DNS 或监听配置上跑偏了。连之前,先 tnsping catdb 看通不通,比反复重跑 CREATE CATALOG 更省时间。