Oracle客戶端連接報(bào)錯(cuò)ORA-12545問(wèn)題的解決辦法
問(wèn)題背景:
用戶在客戶端服務(wù)器通過(guò)sqlplus通過(guò)scan ip登陸訪問(wèn)數(shù)據(jù)庫(kù)時(shí),偶爾會(huì)出現(xiàn)連接報(bào)錯(cuò)ORA-12545: Connect failed because target host or object does not exist的情況。

問(wèn)題分析:
首先,登陸到連接有問(wèn)題的客戶端數(shù)據(jù)庫(kù)上,通過(guò)sqlplus進(jìn)行多次連接測(cè)試,的確會(huì)出現(xiàn)用戶所說(shuō)的ORA-12545: Connect failed because target host or object does not exist報(bào)錯(cuò)現(xiàn)象,此外,還發(fā)現(xiàn)登陸成功的節(jié)點(diǎn)顯示的實(shí)例都是節(jié)點(diǎn)一實(shí)例servicedb1

檢查數(shù)據(jù)庫(kù)的listener_scan監(jiān)聽(tīng)配置,服務(wù)servicedb下動(dòng)態(tài)注冊(cè)了(ready)兩個(gè)實(shí)例servicedb1以及servicedb2,沒(méi)有其他的配置實(shí)例

接下來(lái),獲取客戶端連接報(bào)錯(cuò)的具體trace信息,需要在客戶端的服務(wù)器的sqlnet.ora里面配置跟蹤參數(shù),對(duì)客戶端的連接過(guò)程進(jìn)行跟蹤
TRACE_LEVEL_CLIENT=16 TRACE_DIRECTORY_CLIENT=/tmp TRACE_UNIQUE_CLIENT=ON DIAG_ADR_ENABLED =OFF
配置完跟蹤參數(shù)之后,再一次通過(guò)sqlplus連接scan ip訪問(wèn)數(shù)據(jù)庫(kù),每一次登陸都會(huì)在/tmp目錄下面生成登陸的跟蹤trc文件cli_xxxx.trc ,打開(kāi)發(fā)生ORA-12545:報(bào)錯(cuò)時(shí)的trc文件
從trc文件里面,我們看到了發(fā)生解析主機(jī)錯(cuò)誤(hostname lookup failure!)的主機(jī)連接地址nsc2addr: (ADDRESS=(PROTOCOL=TCP)(HOST=servicedb2)(PORT=1521))

該地址是客戶端在連接scan監(jiān)聽(tīng)之后,返回給客戶端的本地監(jiān)聽(tīng)服務(wù)連接地址,因?yàn)閟can 監(jiān)聽(tīng)上的服務(wù)是數(shù)據(jù)庫(kù)通過(guò)遠(yuǎn)程注冊(cè)進(jìn)去的(remote listener),客戶端在連接scan監(jiān)聽(tīng)上的服務(wù)之后,scan監(jiān)聽(tīng)會(huì)再把負(fù)載較小節(jié)點(diǎn)所在的本地監(jiān)聽(tīng)(local listener)地址返回給客戶端,客戶端再訪問(wèn)這個(gè)監(jiān)聽(tīng)地址去連接數(shù)據(jù)庫(kù)
從這個(gè)返回報(bào)錯(cuò)地址nsc2addr我們可以看到里面的地址信息host返回的是主機(jī)名而不是實(shí)際的IP地址,查看客戶端的/etc/hosts配置,可以看到只配置了節(jié)點(diǎn)一的主機(jī)名IP地址解析,并沒(méi)有配置節(jié)點(diǎn)二的主機(jī)名IP地址解析,也沒(méi)有配置dns去解析這個(gè)主機(jī)名,從而導(dǎo)致一旦scan 監(jiān)聽(tīng)分配到節(jié)點(diǎn)二給客戶端時(shí)就會(huì)出現(xiàn)了ORA-12545: Connect failed because target host or object does not exist的報(bào)錯(cuò),而分配到節(jié)點(diǎn)一客戶端可以連接成功,因?yàn)閔osts里面有節(jié)點(diǎn)一的主機(jī)名IP地址解析

接下來(lái)繼續(xù)分析scan監(jiān)聽(tīng)返回的地址信息host為主機(jī)名的原因,查看數(shù)據(jù)庫(kù)的scan監(jiān)聽(tīng)的服務(wù)配置信息lsnrctl services listener_scan1
可以看到scan監(jiān)聽(tīng)下的服務(wù)servicedb注冊(cè)的實(shí)例servicedb1,servicedb2的遠(yuǎn)程服務(wù)(remote server)地址的連接信息都是直接的服務(wù)器主機(jī)名(host=servicedb1)以及(host=servicedb2),不是實(shí)際的IP地址信息,這也是為什么客戶端接收到的地址nsc2addr里面不是IP地址信息的原因,因?yàn)閿?shù)據(jù)庫(kù)注冊(cè)到scan監(jiān)聽(tīng)服務(wù)的連接信息是主機(jī)名形式

show parameter查看數(shù)據(jù)庫(kù)的動(dòng)態(tài)注冊(cè)配置參數(shù)local listener,該參數(shù)表示實(shí)例節(jié)點(diǎn)所注冊(cè)的本地監(jiān)聽(tīng)地址,數(shù)據(jù)庫(kù)遠(yuǎn)程注冊(cè)到scan監(jiān)聽(tīng)的服務(wù)會(huì)指向這個(gè)地址,我們可以看到由于參數(shù)local_listener的配置為空,因此數(shù)據(jù)庫(kù)注冊(cè)到scan監(jiān)聽(tīng)服務(wù)的連接信息host就是默認(rèn)的服務(wù)器主機(jī)名

問(wèn)題解決:
1 臨時(shí)解決方案,客戶端的/etc/hosts里面配置數(shù)據(jù)庫(kù)節(jié)點(diǎn)二主機(jī)的IP解析條目,需要注意的是,這個(gè)方式只是解決了該客戶端的訪問(wèn)數(shù)據(jù)庫(kù)的問(wèn)題,如果其他客戶端沒(méi)有配置hosts或者dns去解析數(shù)據(jù)庫(kù)服務(wù)器的主機(jī)名,依然會(huì)出現(xiàn)ORA-12545: Connect failed because target host or object does not exist的情況
2 完整解決方案,數(shù)據(jù)庫(kù)兩個(gè)節(jié)點(diǎn)動(dòng)態(tài)注冊(cè)參數(shù)local_listener配置為兩個(gè)節(jié)點(diǎn)的VIP連接信息
節(jié)點(diǎn)一:(ADDRESS = (PROTOCOL=TCP)(HOST=xxx.xxx.xxx.13)(PORT=1521)),
節(jié)點(diǎn)二:(ADDRESS = (PROTOCOL=TCP)(HOST=xxx.xxx.xxx.74)(PORT=1521))
這樣返回給客戶端的是IP的形式而非主機(jī)名,全部客戶端就可以不用配置hosts或者dns去解析數(shù)據(jù)庫(kù)服務(wù)器的主機(jī)名
總結(jié)
到此這篇關(guān)于Oracle客戶端連接報(bào)錯(cuò)ORA-12545問(wèn)題的解決辦法的文章就介紹到這了,更多相關(guān)Oracle客戶端連接報(bào)錯(cuò)ORA-12545內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
簡(jiǎn)析Oracle數(shù)據(jù)庫(kù)常見(jiàn)問(wèn)題及解決方案
這篇文章主要介紹了Oracle數(shù)據(jù)庫(kù)常見(jiàn)問(wèn)題及解決方案,總結(jié)了一些在Oracle數(shù)據(jù)庫(kù)使用過(guò)程中的常見(jiàn)問(wèn)題,并對(duì)其進(jìn)行了分析,給出了解決方案,需要的朋友可以參考下2015-08-08
直接拷貝數(shù)據(jù)文件實(shí)現(xiàn)Oracle數(shù)據(jù)遷移
Oracle 數(shù)據(jù)遷移是比較麻煩的,對(duì)菜鳥(niǎo)來(lái)說(shuō)更是如此。最近由于更換服務(wù)器,需要將Oracle遷移到另外一臺(tái)機(jī)器,在兩個(gè)服務(wù)器環(huán)境相同,以及 Oracle版本相同的前提下,通過(guò)直接拷貝數(shù)據(jù)文件到新服務(wù)器,就可以直接遷移成功。這里記錄一下遷移步驟。需要的朋友可以參考。2017-01-01
Oracle開(kāi)發(fā)之分析函數(shù)簡(jiǎn)介Over用法
本文主要是對(duì)Oracle分析函數(shù)概念的簡(jiǎn)單介紹,同時(shí)講解了Over函數(shù)的用法,希望對(duì)大家學(xué)習(xí)分析函數(shù)有所幫助。2016-05-05
Oracle SQL語(yǔ)句實(shí)現(xiàn)數(shù)字四舍五入取整
本文介紹Oracle中一些對(duì)數(shù)字的常用操作,包括向上向下去整、四舍五入、保留N位小數(shù)等操作,希望對(duì)大家有所幫助。2016-05-05
Linux下的Oracle啟動(dòng)腳本及其開(kāi)機(jī)自啟動(dòng)
這篇文章主要介紹了Linux下的Oracle啟動(dòng)腳本及其開(kāi)機(jī)自啟動(dòng)的方法,大家可以參考使用2013-11-11
Oracle?Exadata存儲(chǔ)節(jié)點(diǎn)主動(dòng)替換磁盤的操作步驟
本文討論Exadata存儲(chǔ)節(jié)點(diǎn)主動(dòng)更換磁盤的適用場(chǎng)景及操作方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2025-07-07
Oracle10g通過(guò)DBLink訪問(wèn)MySQL示例
本文介紹了Oracle訪問(wèn)MySQL的方法,測(cè)試環(huán)境:CentOS5_X64, Oracle10g_X64, MySQL5 。大家參考使用吧2014-01-01
Oracle修改端口號(hào)之后無(wú)法啟動(dòng)的解決方案
Oracle數(shù)據(jù)庫(kù)更改端口后出現(xiàn)監(jiān)聽(tīng)器無(wú)法啟動(dòng)的問(wèn)題確實(shí)較為常見(jiàn),但并非必然發(fā)生,這一問(wèn)題通常源于??配置錯(cuò)誤或環(huán)境沖突??,而非端口修改本身,以下是系統(tǒng)性解決方案,需要的朋友可以參考下2025-06-06

