很多人在學習Oracle數據庫時,都會遇到Oracle監聽配置相關問題,客戶終端(ClIEnt)無法連接服務器端(Server)。本文現對Oracle監聽配置作一簡單介紹,並提出一些客戶終端無法連接服務器端的解決思路,願對讀者有一些幫助。
一、Oracle監聽器(LISTENER)
Oracle監聽器是Oracle基於服務器端的一種網絡服務,主要用於監聽客戶端向數據庫服務器端提出的連接請求。既然是基於服務器端的服務,那麼它也只存在於數據庫服務器端,進行Oracle監聽器的設置也是在數據庫服務器端完成的。
二、本地服務名(Tnsname)
Oracle客戶端與服務器端的連接是通過客戶端發出連接請求,由服務器端Oracle監聽器對客戶端連接請求進行合法檢查,如果連接請求有效,則進行連接,否則拒絕該連接。本地服務名是Oracle客戶端網絡配置的一種,另外還有Oracle名字服務器(Oracle Names Server)等。Oracle常用的客戶端配置就是采用的本地服務名,本文中介紹的也主要是基於本地服務名的配置。
三、常見的連接問題
要排除客戶端與服務器端的連接問題,首先檢查客戶端配置是否正確(客戶端配置必須與數據庫服務器端監聽配置一致),再根據錯誤提示解決。
1、 ORA-12541: TNS: 沒有Oracle監聽器
顯而易見,服務器端的監聽器沒有啟動,另外檢查客戶端IP地址或端口填寫是否正確。啟動監聽器:$ lsnrctl start或C:\lsnrctl start
2、 ORA-12500: TNS: Oracle監聽程序無法啟動專用服務器進程
對於Windows而言,沒有啟動Oracle實例服務。啟動實例服務:C:\oradim –startup -sid myOracle
3、 ORA-12535: TNS: 操作超時
出現這個問題的原因很多,但主要跟網絡有關。解決這個問題,首先檢查客戶端與服務端的網絡是否暢通,如果網絡連通,則檢查兩端的防火牆是否阻擋了連接。
4、 ORA-12154: TNS: 無法處理服務名
檢查輸入的服務名與配置的服務名是否一致。另外注意生成的本地服務名文件(Windows下如D:\oracle\ora92\network\admin\tnsnames.ora,Linux/Unix下$Oracle_HOME/network/admin/tnsnames.ora)裡每項服務的首行服務名稱前不能有空格。
5、 ORA-12514: TNS: Oracle監聽進程不能解析在連接描述符中給出的 SERVICE_NAME
打開Net Manager,選中服務名稱,檢查服務標識欄裡的服務名輸入是否正確。該服務名必須與服務器端Oracle監聽器配置的全局數據庫名一致。
6、 Windows下啟動Oracle監聽服務提示找不到路徑
用命令或在服務窗口中啟動監聽提示找不到路徑,或Oracle監聽服務啟動異常。打開注冊表,進入HKEY_LOCAL_MacHINE/SYSTEM/Current
ControlSet/Services/OracleOraHome92TNSListener項,查看ImagePath字符串項是否存在,如果沒有,設定值為D:\oracle\ora92\BIN\TNSLSNR,不同的安裝路徑設定值做相應的更改。這種方法同樣適用於Oracle實例服務,同上,找到如同HKEY_LOCAL_MacHINE/SYSTEM/Current ControlSet/Services/Oracle ServiceMYORACLE項,查看ImagePath字符串項是否存在,如果沒有,則新建,設定值為d:\oracle\ora92\binORACLE.EXE MYOracle。
以上是Oracle客戶端連接服務器端常見的一些問題,當然不能囊括所有的連接異常。解決問題的關鍵在於方法與思路,而不是每種問題都有固定的答案。