轉 監聽器連線常見的問題及其解決方法

lhyvsxman發表於2010-06-25


現在Oracle資料庫用的地方是越來越多了,越來越多的應用被部署在oracle資料庫中,作為大型的資料庫,網路的連線需求肯定是少不了的,但是在實際的使用中,很多人都曾遇到各種各樣的資料庫連線錯誤,通常使用者都是在客戶端連線資料庫時發現的,所以簡單的認為是客戶端的問題,但是實際上出現連線錯誤的原因是很多的,在這裡主要把常見的錯誤和自己曾經遇到的錯誤列舉出來,也把以前自己的一些處理方法也提供給大家分享,因為有些是以前遇到過的,現在也只是一些印象,所以有不對之處,希望諒解和指出,共同討論。

常見的錯誤:
客戶端
ORA-12154 “TNS:無法解析服務名名”
ORA-12198 “TNS:無法找到通向目標的路徑徑”
ORA-12203 “TNS:不能與目標連線接”
ORA-12533 “TNS:非法ADDRESS 引數數”
ORA-12545 “TNS:名稱查詢失敗”

服務端
ORA-12154: 沒有監聽程式
ORA-12224: TNS: 沒有監聽程式
ORA-12500: TNS: 監聽程式啟動專用伺服器程式失敗
ORA-12545: TNS: 名稱查詢失敗
TNS-01169: 監聽程式不識別口令


錯誤原因:
1、listener服務的問題
a.在windows環境中,監聽器服務沒有啟動
察看服務中的監聽器服務,看是否啟動,很多人設定為手動後忘記啟動

b.windows環境,服務已經啟動,但是仍然報錯
在lsnrctl中看status,發現並未啟動,通常是由於監聽器配置有問題造成,需要修改監聽器的配置檔案,與c相同
經驗感覺,最好還是使用lsnrctl啟動監聽器比較好,可以直接看到啟動的狀況

c、啟動監聽器錯誤
不論在任何平臺,lsnrctl的status報錯,都說明沒有啟動成功,執行start啟動監聽器
如果仍然抱錯,通常原因為監聽器配置問題,主要包括了:
ip地址或者主機名稱改變:修改listener.ora和tnsnames.ora檔案中的主機地址資訊
監聽的配置檔案語法或引數錯誤:修改監聽器配置檔案的語法
當然,也可能是一些軟體破壞了監聽器的相關檔案,或者產生了程式衝突,另外,一些防病毒軟體可能會阻斷監聽器甚至關閉監聽器

2、監聽器正常啟動,但是監聽資訊有問題
監聽埠改動:正常的1521埠被佔用,改為其他埠,客戶端也應該作相應修改
監聽的資料庫設定有問題:設定了錯誤的資料庫SID,在9i這個錯誤被資料庫修正,真正的資料庫資訊可以動態註冊,所以一般不會出錯


3、伺服器配置問題
安裝了防火牆:有些防火牆預設會阻擋客戶端發出的連線包請求,另外防火牆可能會禁用一些埠,其中可能會包括監聽埠
安裝了防毒軟體:有些防毒軟體也會阻擋連線請求,曾經用過瑞星遇到過這種問題
伺服器禁用了監聽的埠或者被其他軟體佔用監聽埠
沒有安裝相關的網路協議:客戶端和服務端通常情況下需要相同的網路協議(除非使用連線管理器)

4、客戶端配置問題
配置了不正確的tnsnames.ora檔案,包括了監聽器主機名或ip地址錯誤,監聽埠錯誤,連線的資料庫沒有被監聽器監聽或者不存在
安裝了多個Oracle軟體,存在多個主目錄:因為有多個主目錄,所以出現多個tnsnames.ora檔案,為不同的軟體配置相應的tnsnames.ora檔案。這種情況也多見,在安裝了資料庫和oracle的developer後,出現兩個主目錄,每個主目錄中都有network目錄,需要分別進行配置,使用者最好確定當前使用的主目錄是不是存放了正確連線服務命名的目錄,當然,一種簡單的方法是乾脆讓這些tnsnames.ora檔案都一樣的內容,就沒那麼多麻煩了


5、系統問題
沒有做域名解析:使用者配置的檔案中使用了主機名稱,但是沒有相應的域名解析,無法解析成正確的ip地址
使用連線管理器進行了訪問控制:察看是否在連線管理器中設定了訪問控制
在protocol.ora(9i在sqlnet.ora)中設定了訪問控制:是否設定了訪問控制
連線的資料庫未啟動:在伺服器端檢查連線的資料庫是否已經啟動

6、網路問題
網路硬體問題,例如網線、交換機、路由器、網路卡等網路裝置故障:最簡單的方法ping
網路設定問題,存在硬體防火牆,交換機或者路由設定問題:同樣,測試是否能夠連通

7、其他
連線過於頻繁:同時的併發連線太頻繁造成,可以設定較大的QUEUESIZE,或者建立連個監聽器同時監聽,當然了,使用了兩個埠
監聽器引數設定有誤:這個就自己看吧
配置了命名伺服器或者ldap:因為需要在命名伺服器或者ldap伺服器上解析服務命名,所以如果這些部分出問題也一樣表現為連線出錯
不能啟動專用連線程式:在客戶端是否選擇了專用連線方式,另外,也可能設定的程式數、會話數或者環路被共享連線耗盡也會產生類似的這種錯誤
ORA-12520: TNS: 監聽程式無法找到需要的伺服器型別的可用控制程式碼:專用伺服器選擇了共享連線方式,修改tnsnames.ora檔案
ORA-12520: TNS: 監聽程式無法找到需要的伺服器型別的可用控制程式碼:專用伺服器選擇了共享連線方式,修改tnsnames.ora檔案
在tnsnames.ora中的服務命名定義塊中存在這樣的一段:

(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = ora9i)
)

資料庫執行在兩種模式下,共享伺服器方式和專用伺服器方式,同樣也有兩種連線方式,專用連線還是共享連線。
這裡面的server就是你選擇的連線方式,如果選擇了預設方式,則你的資料庫是共享伺服器方式,你的連線就是共享方式連線,如果是專用伺服器方式,就是專用方式連線。如果像上面一樣選擇了DEDICATED,這表示你設定了專用方式連線,那麼不論是共享伺服器方式,還是專用伺服器方式,你的連線都是以專用方式連線的。如果設定了shared,那麼表示選擇了共享方式連線。

在共享伺服器方式下,專用連線和共享連線都可以,但是在專用伺服器方式下,只允許使用專用連線,這時候如果客戶端的服務命名中定義了server=shared,則使用這個服務命名將會產生錯誤。
[@more@]

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

相關文章