tnsping通但RMAN连不上catalog,大概率是服务名未注册进监听器;需执行lsnrctl services确认SERVICE_NAME已注册,检查listener.ora静态配置或dynamic注册状态,并确保tnsnames.ora中@后指向独立catalog服务名而非目标库。
tnsping通但RMAN连不上catalog,大概率是服务名没注册进监听器
tnsping成功只说明网络层通、tnsnames.ora语法对,不等于数据库服务已向监听器注册。rman报ora-12514时,根本没走到密码校验环节,监听器压根不认识你写的service_name。
立刻在catalog服务器上执行:lsnrctl services,检查输出里是否列出你在tnsnames.ora中配置的service_name(注意不是SID)。常见漏配点:
- listener.ora里缺静态注册段,尤其多实例共用监听时容易只配了其中一个
- 用了动态注册但
local_listener参数指向错误地址,或数据库启动后没执行ALTER SYSTEM REGISTER - tnsnames.ora里写的是
SID而非SERVICE_NAME,而监听器只认service_name注册项
RMAN catalog连接命令里@后面必须指向catalog库,不是目标库
典型错误是把rman catalog rcowner/pass@ORCL里的ORCL当成catalog服务名,结果连回了目标库自己——因为tnsnames.ora里ORCL指向的是目标库,不是catalog库。
正确做法:
- 确保catalog库有独立的服务名,比如
CATDB,且tnsnames.ora中该条目明确指向catalog数据库的IP+端口+service_name - RMAN命令必须写成
rman catalog rcowner/pass@CATDB,不能混用目标库别名 - 如果要同时连target和catalog,格式是
rman target / catalog rcowner/pass@CATDB,中间用空格分隔,不是逗号
catalog用户权限和表空间配额必须一步到位,少一个就卡在CREATE CATALOG
CREATE CATALOG不是“建个库”那么简单,它要在指定表空间里建几十张系统表。常见失败点:
- 用户没
QUOTA UNLIMITED ON <tablespace_name></tablespace_name>,直接报ORA-01536: space quota exceeded - 只给了
CONNECT和RESOURCE,但RECOVERY_CATALOG_OWNER角色才是硬性要求——它自带对RC_*基表的DML权限,DBA角色反而不行 - 没显式指定
TEMPORARY TABLESPACE temp,用户可能因无法分配临时段卡住 - 表空间没开
AUTOEXTEND ON,小备份集没事,大库跑几天就写满,后续RESYNC CATALOG全挂
远程连接sys用户做target时,密码文件和remote_login_passwordfile必须匹配
如果RMAN命令是rman target sys/oracle@PROD1 catalog rcowner/pass@CATDB,而PROD1是远程库,那ORA-01017或ORA-01031基本锁定为密码文件问题。
必须确认三件事:
-
$ORACLE_HOME/dbs/orapw$ORACLE_SID存在且文件名严格匹配当前实例SID(大小写敏感) -
SELECT value FROM v$parameter WHERE name = 'remote_login_passwordfile'返回EXCLUSIVE,不是SHARED或NONE - 密码文件里真有sys用户:
orapwd file=orapw$ORACLE_SID list=y | grep -i sys,没有就重建并同步密码
别指望用普通用户加SYSDBA角色替代——RMAN远程target只认密码文件里的预置超级用户,sys是唯一被保证支持的账号。


















