一、問題描述
操作系統Windows 2003 ,Oracle 10g 10.2.0.2
當客戶端連過來時客戶端有時能連通,有時卻斷開提示錯誤
SQL> conn
system/Oracle@gzmdc已連接。
SQL> conn
system/Oracle@gzmdcERROR:
ORA-12545: 因目標主機或對象不存在,連接失敗
警告: 您不再連接到 Oracle。
SQL> conn
system/Oracle@gzmdc已連接。
SQL> conn
system/Oracle@gzmdc已連接。
SQL> conn
system/Oracle@gzmdcERROR:
ORA-12545: 因目標主機或對象不存在,連接失敗
警告: 您不再連接到 Oracle。
SQL>
客戶端tns配置
GZMDC=
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 201.150.14.18)(PORT = 5880))
(ADDRESS = (PROTOCOL = TCP)(HOST = 201.150.14.20)(PORT = 5880))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = test)
)
)
服務器端201.150.14.18 node1-vip201.150.14.20 node1-vip 是虛擬ip(vip)201.150.14.5 node1
201.150.14.7 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 = 5880))
(ADDRESS = (PROTOCOL = TCP)(HOST = node2-vip)(PORT = 5880))
)
改為:
LISTENERS_TEST =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 201.150.14.18)(PORT = 5880))