2009-06-15 4 views

risposta

17

Un modo migliore è, se si ha accesso al computer host e l'installazione di Oracle deve utilizzare il comando: lsnrctl status. Funziona su macchine Unix, Linux e Windows. Il comando di stato mostrerà tutti gli ascoltatori (e i relativi SID associati).

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 

Nell'esempio di cui sopra è possibile connettersi al database utilizzando il XE Conect Strings XEXDB, XE_XPT o XE.

+0

Avevo preso in considerazione questo approccio per la mia risposta, ma tecnicamente funziona solo se per il listener predefinito. L'approccio più complesso all'utilizzo di lsnrctl è prima di ottenere una lista di listener tramite ps-ef | grep lsnr, e quindi emettere il comando STATUS per ciascuno degli ascoltatori. Non volevo complicare eccessivamente la risposta dal momento che probabilmente il 99% delle installazioni utilizza l'impostazione predefinita del listener – dpbradley

4

La risposta breve è che è necessario accedere al sistema operativo host:

Per Unix, ps -ef | grep PMON vi mostrerà uno o più processi con nomi come ora_pmon_xxxx, e xxxx è il nome dell'istanza.

In Windows, credo che ci sia una firma simile nell'elenco delle attività.

In pratica, questa informazione viene in genere fornita da chiunque amministri il database quando viene creato l'account di connessione.

+0

In Windows, SID non sarebbe visibile sotto taskmanager, si dovrà controllare i servizi in esecuzione (services.msc) per verificare la presenza di SID. Ad esempio: OracleServiceORCL supponendo che ORCL sia il SID – Sathya

+0

Grazie - per i chiarimenti - nessuna esperienza sulla piattaforma Windows – dpbradley

3

La domanda si riduce a: quali ORACLE_SID o servizi sono supportati dal listener in esecuzione sulla porta X host Y. A seconda della sicurezza di questo listener è configurato, è possibile visualizzarlo utilizzando il comando lsnrctl da un client con lsnrctl installato. Per essere in grado di farlo, è necessaria l'installazione di un server Oracle su quel client. Quando si dispone che è possibile emettere

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

L'impostazione di default di chi ascolta 10g riempire causa il seguente risultato: TNS-01189: L'ascoltatore non ha potuto autenticare l'utente

Questo perché dal default Oracle 10g ha Sicurezza ON: Autenticazione SO locale che significa che solo l'utente del SO locale che ha avviato il listener può emettere i comandi lsnrctl al listener. L'ascoltatore si rifiuterà di rispondere a qualsiasi altro utente.

2

Un'altra opzione da considerare è il file/etc/oratab su Unix o il suo equivillo su Windows, che a mio avviso è un hive del Registro di sistema.

L'oratab dovrebbe elencare tutti i SID su un host, correntemente in esecuzione o meno.

+0

Commento da @saritonin, che non ha i privilegi per commentare: "Si noti che/etc/oratab potrebbe non essere utile se $ Il parametro ORACLE_SID è il carattere jolly '*' ". –