2009-06-15 25 views

回答

17

更好的方法是,如果您有權訪問主機並且Oracle安裝使用以下命令:lsnrctl status。這適用於Unix,Linux和Windows機器。 status命令將顯示所有監聽器(及其相關的SID)。

C:\>lsnrctl status 

LSNRCTL for 32-bit Windows: Version 10.2.0.1.0 - Production on 15-JUN-2009 16:16:34 
Copyright (c) 1991, 2005, Oracle. All rights reserved. 

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC_FOR_XE))) 
STATUS of the LISTENER 
------------------------ 
Alias      LISTENER 
Version     TNSLSNR for 32-bit Windows: Version 10.2.0.1.0 - Production 
Start Date    13-JUN-2009 12:04:14 
Uptime     2 days 4 hr. 12 min. 19 sec 
Trace Level    off 
Security     ON: Local OS Authentication 
SNMP      OFF 
Default Service   XE 
Listener Parameter File C:\oracle\XE\app\oracle\product\10.2.0\server\network\admin\listener.ora 
Listener Log File   C:\oracle\XE\app\oracle\product\10.2.0\server\network\log\listener.log 
Listening Endpoints Summary... 
    (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC_FOR_XEipc))) 
    (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=ThinkpadT61)(PORT=1521))) 
    (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=8080))(Presentation=HTTP)(Session=RAW)) 
Services Summary... 
Service "CLRExtProc" has 1 instance(s). 
    Instance "CLRExtProc", status UNKNOWN, has 1 handler(s) for this service... 
Service "PLSExtProc" has 1 instance(s). 
    Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this service... 
Service "XEXDB" has 1 instance(s). 
    Instance "xe", status READY, has 1 handler(s) for this service... 
Service "XE_XPT" has 1 instance(s). 
    Instance "xe", status READY, has 1 handler(s) for this service... 
Service "xe" has 1 instance(s). 
    Instance "xe", status READY, has 1 handler(s) for this service... 
The command completed successfully 

在上面的例子可以連接到使用CONECT字符串XEXDB,XE_XPT或XE的XE數據庫。

+0

我曾考慮過這種方法作爲我的答案,但從技術上講,這隻適用於默認偵聽器。使用lsnrctl更復雜的方法是首先通過ps -ef | grep lsnr獲取監聽器列表,然後爲每個監聽器發出STATUS命令。不想過分複雜的答案,因爲可能99%的安裝使用默認偵聽器設置 – dpbradley 2009-06-15 20:43:09

4

簡短的回答是,你需要訪問主機操作系統:

對於Unix,PS英法| grep的PMON會顯示你喜歡的名字ora_pmon_xxxx一個或多個進程,而xxxx是實例名稱。

在Windows中,我猜在任務列表中有類似的簽名。

實際上,這些信息通常由您在創建連接帳戶時管理數據庫的人員給您提供。

+0

在Windows中,SID不會在任務管理器看到,你將不得不檢查正在運行的服務(Services.msc)中,以檢查是否有SID。 例如:OracleServiceORCL 假設ORCL是SID – Sathya 2009-06-15 20:26:53

+0

感謝 - 澄清 - 在Windows平臺上沒有經驗 – dpbradley 2009-06-15 20:44:47

3

問題歸結爲:在主機X端口Y上運行的偵聽器支持哪些ORACLE_SID或服務。根據此偵聽器配置的安全性,您可以使用lsnrctl命令從具有lsnrctl的客戶端安裝。爲了能夠做到這一點,你需要在該客戶端安裝一個oracle服務器。當你有,你可以發出

lsnrctl 
set current_listener (description=(address=(host=X)(port=Y)(protocol=tcp))) 
status 

各10g監聽器的默認設置填充會導致以下結果: TNS-01189:監聽器無法驗證用戶

這是因爲從10G甲骨文默認有 安全開啓:本地操作系統認證 這意味着只有啓動偵聽程序的本地操作系統用戶才能向偵聽程序發出lsnrctl命令。聽衆將拒絕回答任何其他用戶。

2

另一個需要考慮的選擇是Unix上的文件/ etc/oratab或Windows上的equivilent,我認爲這是一個註冊表配置單元。

oratab應列出主機上的所有SID,無論目前是否在運行。