当使用 plsqldev 客户端登录 Oracle 数据库时, 如果对应的 tnsnames.ora 中是直接使用 IP 地址来连接, 并且未在系统的 hosts 文件中绑定主机名时, 极易出现 ORA-12502 及 ORA-12545 报错, 这两种错误内容分别是:
- ORA-12502: TNS:listener received no CONNECT_DATA from client
- ORA-12545: Connect failed because target host or object does not exists
而且就算是偶尔正常能登录进去, 登录过程也会非常缓慢, 这就很有可能是数据库的监听参数没配置正确, 可以使用以下方式来解决.
1, 在 Windows 的 hosts 文件中显式的绑定 IP 和主机名, 比如我的数据库 VIP 地址是 192.168.1.10, 数据库服务器主机名为 racdb1, 则绑定之:
192.168.1.10 racdb1-vip
这样, 再使用 plsqldev 登录时, 便不会再出现上述两种错误. 当然, 如果你嫌这样太麻烦, 想要像我一样直接在 tnsnames.ora 里指明 IP 来访问, 则可以采用以下第二种方案
2, 显式设置 local_listener 参数值, 如下操作:
- $ sqlplus / as sysdba
- SQL> show parameter listener
- NAME TYPE VALUE
- ------------------------------------ ----------- ------------------------------
- local_listener string
- remote_listener string LISTENERS_RACDB
- SQL> alter system set local_listener='(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.10)(PORT = 1521))' sid='racdb1';
- System altered
注意上面的地址是 vip 地址, sid 是当前数据库实例 ID, 在每个数据库节点上执行上述命令, 并重新启动集群, 再尝试登录, 则会发现问题已经排除了.
来源: http://www.linuxidc.com/Linux/2018-11/155146.htm