oracle10g的rac中,客戶端連接報ora-12545錯誤

在oracle10g的rac中﹐客戶端連接的時候時不時報﹕ORA-12545錯誤。
網友的解決辦法是﹕
solaris下oracle10g rac 报ora-12545错误解决方案

     这几天安装oracle rac,我也主要是学习阶段.
     数据库安装完毕,启动正常,监听启动正常.问题来了.
一、问题描述

操作系统solaris 10 1/06  sparc 64bit,oracle 10g 10.2.0.2 for solaris 10 sparc 64bit
当客户端连过来时客户端有时能连通,有时却断开提示错误
SQL> conn system/oracle@sun
已连接。
SQL> conn system/oracle@sun
ERROR:
ORA-12545: 因目标主机或对象不存在,连接失败
警告: 您不再连接到 ORACLE。
SQL> conn system/oracle@sun
已连接。
SQL> conn system/oracle@sun
已连接。
SQL> conn system/oracle@sun
ERROR:
ORA-12545: 因目标主机或对象不存在,连接失败
警告: 您不再连接到 ORACLE。
SQL>
客户端tns配置
SUN=
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 10.0.0.128)(PORT = 1521))
      (ADDRESS = (PROTOCOL = TCP)(HOST = 10.0.0.129)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = test)
    )
  )
服务器端
10.0.0.128  node1-vip
10.0.0.129  node1-vip 是虚拟ip(vip)
10.0.0.120  node1
10.0.0.123  node2   是公网ip
二、解决方案

有人提议把客户端hosts文件中加入对两个服务名的名字解析,经测试的确能解决问题,但总觉得不是很好,维护上百台电脑的hosts文件是很困难的.
下面的方法是我测试成功的.
1,  服务器2节点群集 机器名为 node1,node2.
2,在服务器端用system用户登录
SQL> show parameter list
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
local_listener                       string      
remote_listener                      string      LISTENERS_TEST

可以看到这两个参数,remote_listener为 LISTENERS_TEST
3,在node1,node2上分别编辑服务器端tnsname.ora (注意,是服务器端的)            
将下面部分
LISTENERS_TEST =
(ADDRESS_LIST =
    (ADDRESS = (PROTOCOL = TCP)(HOST = node1-vip)(PORT = 1521))
    (ADDRESS = (PROTOCOL = TCP)(HOST = node2-vip)(PORT = 1521))
)
改为:
LISTENERS_TEST =
(ADDRESS_LIST =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 10.0.0.128)(PORT = 1521))
    (ADDRESS = (PROTOCOL = TCP)(HOST = 10.0.0.129)(PORT = 1521))
)
也就是将host主机名改为ip地址
在node1上增加以下部分
LOCAL_TEST =
(ADDRESS_LIST =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 10.0.0.120)(PORT = 1521))
)
在node2上增加以下部分
LOCAL_TEST =
(ADDRESS_LIST =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 10.0.0.123)(PORT = 1521))
)

保存退出

查看两个节点的 listener.ora文件,最好将里面的主机名都改为ip地址
4,用system用户登录

执行
alter system set local_listener='LOCAL_TEST' scope=both;

5 重启所有实例 所有监听.
再从客户端连接 正常,
每次连接用 show parameter instance_name查看实例名, 负载均衡已经生效.
有人把remote_listener 参数置空  虽然连接正常但已经破坏了负载均衡.