本文主要記錄關於Oracle在本地連接中出現與監聽有關的問題以及相應的解決方法,如有不足或者錯誤,歡迎指正! ...
關於Oracle本地連接出現與監聽有關的問題的解決方法探討
監聽的作用:
用於應用桌面即用戶與資料庫伺服器建立連接的媒介,客戶端發送連接請求,監聽識別請求並建立客戶端與伺服器的連接後,監聽的使命並完成了。也就是說,在建立客戶端與伺服器的連接後,監聽可以關閉了。
Oracle連接出現常見的幾種與監聽有關的問題::
1、無監聽
1)一般是監聽出現沒有啟動造成。
解決方法:
工具欄右鍵>>>任務管理器>>>選擇服務>>>找到Oracle相關的服務>>>啟動。
菜單>>>運行>>>服務(有可能是server>>>本地服務)>>>找到Oracle相關的服務>>>啟動
如圖1。
圖1
2)服務實例沒有註冊到監聽中
出現此問題一般是配置監聽失敗,或者多個實例多個監聽造成監聽實例搞混淆的情況(一般很少見)。
一般資料庫監聽配置用NET Configuration assistance來進行,在進配置的時候,可能選擇添加監聽程式,如圖3,在後續配置中,可能服務實例沒有註冊到監聽中。
解決方法:
一般一個監聽可以管理多個資料庫實例,所以沒必要配置多個監聽。目前本人只研究一個監聽對於多個監聽造成的錯誤的解決方法,至於多個監聽多個實例本人猜測可以用此類似方法解決。有待後續研究。
圖2
圖3
在安裝Oracle資料庫軟體的文件夾下有三個關於監聽或net的配置文件,本人電腦中,三個該文件的地址為:D:\oraclehudatabasesofeware\oraclestationofsoftware\NETWORK\ADMIN。三個文件名為:listener.ora,sqlnet.ora,tnsnames.ora。顧名思義三個文件listener與監聽有關,tnsnames與資料庫實例有關,sqlnet與網路連接有關。
上述以說出現錯誤為服務實例沒有註冊到監聽中。所以打開listener文件,在文件中添加資料庫實例名,內容如下,紅色為加入內容:
# listener.ora Network Configuration File: D:\oraclehudatabasesofeware\oraclestationofsoftware\network\admin\listener.ora
# Generated by Oracle configuration tools.
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = CLRExtProc)
(ORACLE_HOME = D:\oraclehudatabasesofeware\oraclestationofsoftware)
(PROGRAM = extproc)
(ENVS = "EXTPROC_DLLS=ONLY:D:\oraclehudatabasesofeware\oraclestationofsoftware\bin\oraclr11.dll")
)
(SID_DESC =
(GLOBAL_DBNAME = ORADB)
(ORACLE_HOME = D:\oraclehudatabasesofeware\oraclestationofsoftware)
(SID_NAME = ORADB)
)
(SID_DESC =
(GLOBAL_DBNAME = ORCL)
(ORACLE_HOME = D:\oraclehudatabasesofeware\oraclestationofsoftware)
(SID_NAME = ORCL)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
)
)
ADR_BASE_LISTENER = D:\oraclehudatabasesofeware
註意:
- 本人中包含兩個資料庫實例,所以加入兩段話。GLOBAL_DBNAME = ORADB,全局資料庫名稱;ORACLE_HOME =D:\oraclehudatabasesofeware\oraclestationofsoftware,資料庫所在位置;SID_NAME = ORADB。特別註意該文字必須包含在SID_LIST的括弧內。
- 最後註意ADR_BASE_LISTENER = D:\oraclehudatabasesofeware,監聽位置,如果資料庫不在同一文件夾內,設置ADR_BASE_LISTENER的值指向某一資料庫實例所在文件夾,將會出現監聽無法啟動的錯誤(連接時並不會顯示監聽無法啟動,而是顯示無監聽,但在登陸日誌中會記錄listener.ora參數錯誤,日誌所在位置為:D:\oraclehudatabasesofeware\Oraclebasedoct\diag\tnslsnr\hudage\listener下的trace文件夾下,和alter文件夾下均可看到)。
- 修改保存後,必須重啟監聽服務和資料庫實例服務後才能連接資料庫,否則,還會提示同樣的錯誤。
- 雖然監聽是主要問題,但是資料庫實例名文件tnsnames也與監聽有關,所以在listener修改完後,重啟監聽服務和資料庫實例服務後,連接資料庫,如果還有問題,就要查看tnsnames文件有沒有問題。一般文件內容如下:
# tnsnames.ora Network Configuration File: D:\oraclehudatabasesofeware\oraclestationofsoftware\network\admin\tnsnames.ora
# Generated by Oracle configuration tools.
ORADB =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = oradb)
)
)
ORACLR_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
(CONNECT_DATA =
(SID = CLRExtProc)
(PRESENTATION = RO)
)
)
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
2、當前監聽無法識別連接描述符中請求的服務
如圖5:
圖5
監聽無法識別連接描述符中請求的服務同樣說明服務實例沒有被監聽程式發現,即沒有註冊到監聽程式中,所以解決方法如上問題1中的第二種。
*多監聽多實例問題有待進一步研究。