¿Cómo configurar un Oracle Listener sin SID_LIST_LISTENER en listener.ora?


13

Tengo acceso a un servidor ORACLE 11g usando el siguiente listener.ora

# listener.ora Network Configuration File: D:\app\Administrator\product\11.1.0\db_1\NETWORK\ADMIN\listener.ora
# Generated by Oracle configuration tools.

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.111.111)(PORT = 1521))
    )
  )

y sirve todas las instancias en ese servidor, como puedo verificar por

lsnrctl status

Mi problema es que cuando hago una nueva instalación de Oracle 11g en una máquina virtual, tengo que usar un listener.

# listener.ora Network Configuration File: C:\app\oracle\product\11.2.0\dbhome_1\network\admin\listener.ora
# Generated by Oracle configuration tools.

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = CLRExtProc)
      (ORACLE_HOME = C:\app\oracle\product\11.2.0\dbhome_1)
      (PROGRAM = extproc)
      (ENVS = "EXTPROC_DLLS=ONLY:C:\app\oracle\product\11.2.0\dbhome_1\bin\oraclr11.dll")
    )

   (SID_DESC =
     (GLOBAL_DBNAME = ORCL)
     (ORACLE_HOME = C:\app\oracle\product\11.2.0\dbhome_1)
     (SID_NAME = orcl)
    )

   (SID_DESC =
     (GLOBAL_DBNAME = BMBK)
     (ORACLE_HOME = C:\app\oracle\product\11.2.0\dbhome_1)
     (SID_NAME = BMBK)
    )

 )

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
      (ADDRESS = (PROTOCOL = TCP)(HOST = 169.254.200.102)(PORT = 1521))
      (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    )
  )

ADR_BASE_LISTENER = C:\app\oracle

Sin las entradas SID_LIST_LISTENER, es decir, usando un listener.ora como ese del otro servidor obtengo

C:\Windows\system32>lsnrctl status

LSNRCTL for 64-bit Windows: Version 11.2.0.1.0 - Production on 27-NOV-2011 10:14
:24

Copyright (c) 1991, 2010, Oracle.  All rights reserved.

Anmeldung bei (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
STATUS des LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for 64-bit Windows: Version 11.2.0.1.0 - Produ
ction
Startdatum                27-NOV-2011 10:14:08
Uptime                    0 Tage 0 Std. 0 Min. 18 Sek.
Trace-Ebene               off
Sicherheit                ON: Local OS Authentication
SNMP                      OFF
Parameterdatei des Listener C:\app\oracle\product\11.2.0\dbhome_1\network\admin\
listener.ora
Log-Datei des Listener    c:\app\oracle\diag\tnslsnr\WSV-BK-W7en64-S\listener\al
ert\log.xml
Zusammenfassung Listening-Endpunkte...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1521ipc)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=169.254.200.102)(PORT=1521)))
Der Listener unterst³tzt keine Services
Der Befehl wurde erfolgreich ausgef³hrt.

El último mensaje se traduce a

El oyente no admite servicios.

No tengo idea de por qué estos dos servidores se comportan de manera diferente. No encontré pistas en los archivos de configuración ni en las claves de registro.

Editar:

Supongo que la respuesta está en algún lugar enterrado en esta publicación por Burleson Consulting , pero no encuentro el lugar, donde realmente está configurado.

Respuestas:


14

Un poco tarde para la fiesta en este ...

La base de datos debe registrarse con el oyente automáticamente, haciendo que las SID_LISTentradas sean redundantes, y esto parece estar sucediendo con su 192.168.111.111entorno. Si el oyente se inicia después de la base de datos, puede tardar un tiempo en registrarse y puede haber situaciones en las que no lo haga en absoluto.

Puede intentar que se registre con un alter system registercomando. La base de datos utiliza el LOCAL_LISTENERparámetro para identificar al oyente con el que debe registrarse. Por defecto eso es nulo, lo que de acuerdo con la documentación es equivalente a hostname:1521.

Si alter system registerno hace que el servicio aparezca en la lsnrctl statussalida, sospecho que no puede identificar el nombre de host o resolverlo, o está resolviendo en una dirección diferente a la que está el oyente, o LOCAL_LISTENERestá configurado en algo no válido para el caja virtual Puede configurar LOCAL_LISTENERque coincida listener.oradirectamente con, por ejemplo:

alter system set LOCAL_LISTENER='(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))' scope=both;
alter system register;

O puede usar un alias que tenga esos detalles en su tnsnames.ora. Por ejemplo, si agrega una tnsnames.oraentrada como:

MY_LISTENER =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
  )

Entonces podrías:

alter system set local_listener='MY_LISTENER' scope=both;
alter system register;

La única ventaja real que puedo ver de usar la tnsnames.oraversión, además de brevedad, es que puede cambiar la configuración en los archivos SQL * Net en lugar de en la base de datos; e incluso eso solo parece realmente útil si está clonando bases de datos entre máquinas, o si sus escuchas y bases de datos se ejecutan en diferentes cuentas (por ejemplo, con un gridusuario para RAC / HA).

Hay más LOCAL_LISTENER aquí .

Editar: Y esto parece bastante completo.


-2

Tuve un problema similar y descubrí que solo cerrar y reiniciar la instancia hizo que se registrara correctamente.

Esto se puede hacer usando la línea de comando sqlplus. Deberá iniciar sesión como usuario con la sintaxis de privilegios SYSDBA (por ejemplo, sistema):

sqlplus name/pass as SYSDBA

luego ejecute 'shutdown' y espere a que termine. luego ejecute 'inicio' y espere a que termine.

dedos cruzados ahora debería tener una instancia registrada con el oyente.

Para verificar que este sea el caso, puede iniciar lsnrctl y ejecutar el comando 'estado'. si no ha funcionado, aún verá el mensaje 'El oyente no admite servicios'; de lo contrario, verá algo como

Service "horse" has 1 instance(s).
 Instance "horse", status READY, has 1 handler(s) for this service...

44
Por favor, no ... no hay necesidad de reiniciar la base de datos solo para el registro del oyente. "alterar el registro del sistema"; from sqlplus lo hace, y ya estaba escrito en la respuesta anterior.
Balazs Papp
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.