Cómo configurar varios listeners en instancias Oracle Standalone

Si no se especifica lo contrario durante la instalación, para una instancia standalone de Oracle sólo se registra un listener. Vamos a ver los pasos necesarios para añadir uno o varios listener a posteriori.

La parte de insfraestructura (interfaces de red, IPs, redes, etc) no está contemplada. El proceso es bastante sencillo y consta de los siguientes pasos:

  • Declarar todos los listener en el archivo $ORACLE_HOME/network/admin/listener.ora.
  • Registrar los listener en las bases de datos
  • Iniciar los listener

Declarar todos los listener en listener.ora

Básicamente declaramos IP y puerto por el que escuchará cada Listener. El siguiente ejemplo declara dos:

  • 192.168.1.100:1521 (LISTENER1)
  • 192.168.1.200:1621 (LISTENER2)
LISTENER1 =
 
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.100)(PORT = 1521))
    )
  )
 
LISTENER2 =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.200)(PORT = 1621))
    )
  )

Recordad modificar según conveniencia los tnsnames.ora.

Registrar los nuevos listeners en las bases de datos

Hay varios métodos para registrar los listener en cada base de datos (a través de server parameter file, por ejemplo). El que muestro aquí consiste en modificar directamente el parámetro LOCAL_LISTENER de la instancia especificando todos los listener a través de los que queramos que sea accesible.

 SQL> show parameter LISTENER
    NAME                                 TYPE        VALUE
    ----------------------------------- --------- -----------------------------
    local_listener                       string
    remote_listener                      string

SQL> alter system set LOCAL_LISTENER="(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)
2 (HOST=192.168.1.200)(PORT=1621))(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.100)
3 (PORT=1521)))" scope=BOTH;
   
SQL> show parameter LISTENER;
    
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
listener_networks                    string
local_listener                       string      (ADDRESS_LIST=(ADDRESS=(PROTOC
                                                 OL=TCP)(HOST=192.168.1.200)(PO
                                                 RT=1621))(ADDRESS=(PROTOCOL=TC
                                                 P)(HOST=192.168.1.100)(PORT=15
                                                 21)))

Arranque de listeners

Finalmente se inician los listener a través del comando lsnrctl:

# lsnrctl start  LISTENER1
# lsnrctl start  LISTENER2
# lsnrctl status