遠端客戶端透過統一服務名連線RAC叢集時,間歇性出現ORA-12545: 因目標主機或對象不存在, 連接失敗,重試幾次又正常,極不穩定。
nuagerac =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.127)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.128)(PORT = 1521))
(LOAD_BALANCE = yes)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = nuagerac)
(FAILOVER_MODE = (TYPE = SELECT)(METHOD = BASIC)(RETRIES = 180)(DELAY = 5))
)
)
RAC環境下,Listener將連線重導向至節點VIP,但節點回報的LOCAL_LISTENER參數若為主機名而非IP,或與REMOTE_LISTENER不一致,導致客戶端解析失敗,拋出ORA-12545。
-- 節點1 (nuage1)
CONN SYS@nuage1 AS SYSDBA
ALTER SYSTEM SET LOCAL_LISTENER = '(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.127)(PORT = 1521))' SID = 'nuage1';
-- 節點2 (nuage2)
CONN SYS@nuage2 AS SYSDBA
ALTER SYSTEM SET LOCAL_LISTENER = '(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.128)(PORT = 1521))' SID = 'nuage2';
修改後連續測試8次連線,零錯誤,問題徹底解決。
補充:Oracle官方將此歸類為PROBLEM而非Bug。若環境使用SCAN Listener (11gR2+),請改設定REMOTE_LISTENER指向SCAN VIP。