需求描述:
小伙伴想做一套数据恢复的环境(rhel?/11.2.0.4/双节点rac),只需要配置好参数文件,并且通过远程登陆SYS连上即可。
问题描述:
1.修改口令文件后,尝试使用TNS远程登陆,此时出现报错:
ORA-12528: TNS:listener: all appropriate instances are blocking new connections
2.修改成静态注册后,尝试使用TNS远程登陆,此时出现报错:
ORA-01017: invalid username/password; logon denied
3.........然后就一直改口令,登陆,报错01017。
问题分析:
首先遇到上面的报错,我们很容易的就想到会不会是以下这几种问题造成的,也是常见的:
1.口令文件问题
2.SQLNET文件问题(已排除)
3.LISTENER文件问题
4.TNSNAMES文件问题
5.remote_login_passwordfile参数设置(已排除)
一.
我们再看回上面的报错顺序,第一个ORA-12528;
根据MOS(文档 ID 362656.1)提到:
对于非特权用户,访问在nomount,mount或restricted模式执行的实例的listener,将被阻止或限制。
由于我们的环境是处于nomount状态,所以就报错ORA-12528。
解决方法:
a.在客户端TNS文件配置添加(UR=A);#如果用这个就不会出现后面的问题了..
b.使用静态注册
二.
第二步,小伙伴选择使用静态注册的方式来解决12528的问题,把静态注册配好,登陆测试,报错01017。一看啊,密码错误,肯定是口令文件的问题!!!马上重新配置口令文件,等我看到截图的时候发现各式各样的口令文件。
如实例名为cyxia1,出现的口令文件名称有(orapwdcyxia1、orapwcyxia、orapwcyxia1.ora、orapwcyxia1)。
在11.2,口令文件的创建为以下的用法:
其中FILE的名字及存放路径有以下要求:
后缀为.ora的是windows系统的,linux的名称需要为ORACLE_SID
那么这里的file应该=orapwcyxia1,另外建议加上force=y覆盖。
三.
小伙伴修改按照正确的口令文件写法来创建,仍然报错01017。
既然口令文件没错;
也没有禁用remote_login_passwordfile;
SQLNET文件也没设置;
TNSNAMES文件除了(UR=A)之后也没问题;
LISTENER 也有status UNKNOWN的静态注册;
那还会有什么问题???
我反复查看小伙伴提供的截图,并且在自己的环境测试,发现在我的单机的版本上是能够通过静态注册的方式使用SYSDBA登陆nomount状态的实例的!
区别在于单机和集群的问题,我又找了一套集群的环境进行测试,发现问题复现了!!!同样是报错01017。检查对比之后终于发现问题所在。
单机的监听是由ORACLE用户来管理;
集群的监听是由GRID用户来管理。
我们静态注册的是某数据库实例(也可以是ASM实例)的信息,但是针对DB而言,所以这里的ORACLE_HOME应该指向的是DB的ORACLE_HOME。
由于习惯性的觉得集群监听是由GRID用户来管理那么LISTENER.ORA文件的ORACLE_HOME目录也是GRID的ORACLE_HOME目录,所以导致这个问题!!!将静态注册的ORACLE_HOME目录修改成DB的,问题解决!!!
问题总结:
一.想要数据库在nomount/mount/restricted状态时,使用TNS远程登陆SYS,有以下两种操作:
a.在客户端TNS文件配置添加(UR=A);
b.服务器端监听配置静态注册;
注:以上的操作建立在口令文件正确及开启remote_login_passwordfile参数。
二.静态注册SID_DESC下的ORACLE_HOME需要为注册的实例对应的ORACLE_HOME目录。
三.口令文件创建严格按照官方文档的语句(12C有较大改变)。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29123031/viewspace-2138991/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/29123031/viewspace-2138991/