oracle10g rac 報ora-12545錯誤的解決方案(zt)

tolywang發表於2007-12-13
一、問題描述
作業系統Windows 2003 ,oracle 10g 10.2.0.2
當客戶端連過來時客戶端有時能連通,有時卻斷開提示錯誤
SQL> conn
已連線。
SQL> conn
ERROR:
ORA-12545: 因目標主機或物件不存在,連線失敗


警告: 您不再連線到 ORACLE。
SQL> conn
已連線。
SQL> conn
已連線。
SQL> conn
ERROR:
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-vip
201.150.14.20 node2-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))
(ADDRESS = (PROTOCOL = TCP)(HOST = 201.150.14.20)(PORT = 5880))
)
也就是將host主機名改為ip地址
在node1上增加以下部分
LOCAL_TEST =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 201.150.14.5)(PORT = 5880))
)
在node2上增加以下部分
LOCAL_TEST =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 201.150.14.7)(PORT = 5880))
)
儲存退出
檢視兩個節點的 listener.ora檔案,最好將裡面的主機名都改為ip地址
4,用system使用者登入
執行
alter system set local_listener='LOCAL_TEST' scope=both;
5 重啟所有例項 所有監聽.
再從客戶端連線 正常,
每次連線用 show parameter instance_name檢視例項名, 負載均衡已經生效.
有人把remote_listener 引數置空 雖然連線正常但已經破壞了負載均衡.
以上做法不知道是不是有什麼不妥.

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/35489/viewspace-85106/,如需轉載,請註明出處,否則將追究法律責任。

相關文章