ORA-02097: parameter cannot be modified because specified value is invalid

TCP state diagram

Image via Wikipedia

Para aquellos que trabajan un entorno de servidor compartido, donde tenemos varias instancias y varios listeners vamos a ver un poco de registro de servicios.

Podemos agregar al archivo de inicialización, para que registren los dispachers con un listener que no sea el default propuesto por oracle.

Debido a que ambos, el parámetro LOCAL_LISTENER y el atributo LISTENER permiten al proceso PMON registrar la información del dispacher con el listener, no es necesario especificar el parámetro y el atributo si los valores son los mismos.

Ahora veamos un ejemplo de un server donde tengo el listener default de ASM , más otros listeners y otras instancias.

Comencemos revisando que listeners tengo corriendo.

[oracle@gontlinux dbs]$ ps -ef | grep inh
oracle    8218     1  0 Oct15 ?        00:00:03 /u01/app/oracle/product/10.2.0/db_TOPAS/bin/tnslsnr LISTENER -inherit
oracle    7798     1  0 Oct15 ?        00:00:03 /u01/app/oracle/product/10.2.0/db_TOPAS/bin/tnslsnr TOPAS_GONTLINUX -inherit
oracle   18998 15040  0 16:03 pts/1    00:00:00 grep inh

Bien , ahora con el comando status verifico que instancias tiene asignadas el listener TOPAS_GONTLINUX.

[oracle@gontlinux dbs]$ lsnrctl status TOPAS_GONTLINUX

LSNRCTL for Linux: Version 10.2.0.4.0 - Production on 19-NOV-2010 16:04:06

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

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=gontlinux.somedomain.com)(PORT=1526)))
STATUS of the LISTENER
------------------------
Alias                     TOPAS_gontlinux
Version                   TNSLSNR for Linux: Version 10.2.0.4.0 - Production
Start Date                15-OCT-2010 12:24:53
Uptime                    35 days 3 hr. 39 min. 12 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      ON
Listener Parameter File   /u01/app/oracle/product/10.2.0/db_TOPAS/network/admin/listener.ora
Listener Log File         /u01/app/oracle/product/10.2.0/db_TOPAS/network/log/TOPAS_gontlinux.log
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=gontlinux.somedomain.com)(PORT=1526)))
Services Summary...
Service "TIPSY.somedomain.com" has 1 instance(s).
  Instance "TIPSY", status UNKNOWN, has 1 handler(s) for this service...
Service "TOPAS.somedomain.com" has 1 instance(s).
  Instance "TOPAS", 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...
The command completed successfully

Al ver que tenemos configurada la instancia TIPSY, vamos a agregarle la instancia TOPAS.

Nos loguemos a la base y consultamos el parametro local_listener.

SQL> sho parameter listener

NAME				     TYPE	 VALUE
------------------------------------ ----------- ------------------------------
local_listener			     string
remote_listener 		     string

Podemos observar que no tiene asignado ningún listener , en otras palabras no esta registrada la instancia con ningún listener.

Vamos a setear el nombre correspondiente y nos encontramos con el error ORA-00119.

Que podemos estar haciendo mal ?

SQL> alter system set local_listener=TOPAS_GONTLINUX scope=both;
alter system set local_listener=TOPAS_gontlinux scope=both
*
ERROR at line 1:
ORA-02097: parameter cannot be modified because specified value is invalid
ORA-00119: invalid specification for system parameter LOCAL_LISTENER
ORA-00132: syntax error or unresolved network name 'TOPAS_gontlinux'

La realidad es que no puede resolver el nombre . Entonces debemos de configurar el tnsnames.ora

[oracle@gontlinux dbs]$ cd ../network/admin/
[oracle@gontlinux admin]$ vi tnsnames.ora

Editamos el archivo y agregamos la entrada.

CATRMAN =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = gontcontrol.somedomain.com)(PORT = 1522))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = catrman)
    )
  )

### Cambio introducido por JAM. 19-NOV-10

TOPAS_gontlinux =
  (ADDRESS_LIST =
    (ADDRESS = (PROTOCOL = TCP)(HOST = gontlinux.somedomain.com)(PORT = 1526))
  )

Salimos y guardamos los cambios.

Procedemos a registralo nuevamente con el seteo del parametro .

SQL> alter system set local_listener=TOPAS_GONTLINUX scope=both;

System altered.

Se realizo exitosamente !!

Ahora ejecutemos un status y confirmemos el correcto registro de nuestra instancia.

[oracle@gontlinux admin]$ lsnrctl status TOPAS_GONTLINUX

LSNRCTL for Linux: Version 10.2.0.4.0 - Production on 19-NOV-2010 16:11:50

Copyright (c) 1991, 2007, Oracle.  All rights reserved.Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=gontlinux.somedomain.com)(PORT=1526)))
STATUS of the LISTENER
------------------------
Alias                     TOPAS_gontlinux
Version                   TNSLSNR for Linux: Version 10.2.0.4.0 - Production
Start Date                15-OCT-2010 12:24:53
Uptime                    35 days 3 hr. 46 min. 56 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      ON
Listener Parameter File   /u01/app/oracle/product/10.2.0/db_TOPAS/network/admin/listener.ora
Listener Log File         /u01/app/oracle/product/10.2.0/db_TOPAS/network/log/TOPAS_gontlinux.log
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=gontlinux.somedomain.com)(PORT=1526)))
Services Summary...
Service "TSTVOLTXDB" has 1 instance(s).
  Instance "TOPAS", status READY, has 1 handler(s) for this service...
Service "TIPSY.somedomain.com" has 1 instance(s).
  Instance "TIPSY", status UNKNOWN, has 1 handler(s) for this service...
Service "TOPAS" has 1 instance(s).
  Instance "TOPAS", status READY, has 1 handler(s) for this service...
Service "TOPAS.somedomain.com" has 2 instance(s).
  Instance "TOPAS", status UNKNOWN, has 1 handler(s) for this service...
  Instance "TOPAS", status READY, has 1 handler(s) for this service...
Service "TOPAS_XPT" has 1 instance(s).
  Instance "TOPAS", status READY, has 1 handler(s) for this service...
Service "PLSExtProc" has 1 instance(s).
  Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully

Esto nos evitara ter um dor de cabeça !! Ate logo !

About Juan Andres
Consultant | Oracle DBA & IT Specialist | LinuxUnix Administrator | Father | Musician | Farmer | Environmentalist | Writer | Builder | Buenos Aires · burzaco.wordpress.com

One Response to ORA-02097: parameter cannot be modified because specified value is invalid

  1. vegatripy says:

    “Podemos observar que no tiene asignado ningún listener , en otras palabras no esta registrada la instancia con ningún listener.”

    No es del todo cierto.
    Según documentación, el valor por defecto es :
    Default value: (ADDRESS = (PROTOCOL=TCP)(HOST=hostname)(PORT=1521)) where hostname is the network name of the local host.

    PMON siempre intenta registrar el listener, pero con esa configuración (y por lo tanto con el nombre por defecto)

    Si queremos usar un listener con nombre o puerto por diferente, habrá que hacer lo que comentas (meterlo en el tnsnames para que pueda resolverlo y obtener de ahí la configuracion, o ponerla directamente en el valor del parámetro:
    alter system set local_listener=(ADDRESS = (PROTOCOL = TCP)(HOST = gontlinux.somedomain.com)(PORT = 1526));

    Personalmente prefiero esta última opción en lugar de estar inflando e inflando el tnsnames y que todo dependa de un fichero de texto abierto.

    Saludos.

%d bloggers like this: