2009-06-15 10 views

Respuesta

17

Una mejor manera es, si tiene acceso a la máquina host y la instalación de Oracle es utilizar el comando: lsnrctl status. Esto funciona tanto en máquinas Unix, Linux y Windows. El comando de estado le mostrará todos los oyentes (y sus SID asociados).

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 

En el ejemplo anterior se puede conectar a la base de datos XE con el Conect Cuerdas XEXDB, XE_XPT o XE.

+0

Había considerado este enfoque para mi respuesta, pero técnicamente esto solo funciona si el oyente predeterminado. El enfoque más enrevesado para usar lsnrctl es primero obtener una lista de oyentes a través de ps-ef | grep lsnr, y luego emitir el comando STATUS para cada uno de los oyentes. No quería complicar demasiado la respuesta ya que probablemente el 99% de las instalaciones usan la configuración de oyente predeterminada – dpbradley

4

La respuesta corta es que es necesario tener acceso al sistema operativo anfitrión:

Para Unix, ps-ef | pmon grep le mostrará uno o más procesos con nombres como ora_pmon_xxxx, y xxxx es el nombre de la instancia.

En Windows, supongo que hay una firma similar en la lista de tareas.

En la práctica, esta información la suele proporcionar quien administra la base de datos cuando se crea su cuenta de conexión.

+0

En Windows, SID no sería visible en el administrador de tareas, tendrá que comprobar los servicios en ejecución (services.msc) para comprobar si hay SID. Por ejemplo: OracleServiceORCL asumiendo que ORCL es el SID – Sathya

+0

Gracias - por la aclaración - no tengo experiencia en la plataforma Windows – dpbradley

3

La pregunta se reduce a: qué ORACLE_SID o servicios son compatibles con el oyente que se ejecuta en el puerto X del host X. Dependiendo de qué tan seguro esté configurado este oyente, puede verlo usando el comando lsnrctl de un cliente que tiene lsnrctl instalado Para poder hacer esto, necesita una instalación del servidor Oracle en ese cliente. Cuando se tiene que se puede emitir

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

La configuración por defecto del oyente 10g llenar causa el siguiente resultado: TNS-01189: El oyente no pudo autenticar al usuario

Esto se debe a defecto de Oracle 10g tiene Seguridad ENCENDIDO: Autenticación del sistema operativo local , lo que significa que solo el usuario del SO local que inició el escuchador puede emitir comandos lsnrctl al oyente. El oyente se negará a responder a cualquier otro usuario.

2

Otra opción a considerar es el archivo/etc/oratab en Unix o su equivalente en Windows, que creo que es una sección de registro.

El oratab debe enumerar todos los SID en un host, ya sea que se estén ejecutando o no.

+0

Comentario de @saritonin, que no tiene los privilegios para comentar: "Tenga en cuenta que/etc/oratab puede no ser útil si el $ El parámetro ORACLE_SID es el comodín '*' ". –

Cuestiones relacionadas