Create and Manage Multiple Network Configuration Files

1. Documentación en Tahiti -> Masters Book List -> Administrator’s Guide -> Net Services Administrator’s Guide

Documentación en Tahiti -> Masters Book List -> Administrator’s Guide -> Net Services Reference

2. En este objetivo nos piden crear y manejar correctamente los siguientes ficheros de configuración de red: “listener.ora”, “sqlnet.ora” y “tnsnames.ora”. Por defecto, su ubicación es $ORACLE_HOME/admin/network pero los podemos ubicar en cualquier directorio siempre y cuando fijemos la variable de sesión $TNS_ADMIN.

3. Comenzamos con la configuración del fichero listener.ora. En el se define la configuración del LISTENER (obvio, no?).

Documentación en Tahiti -> Masters Book List -> Administrator’s Guide -> Net Services Administrator’s Guide -> 9 Configuring and Administering Oracle Net Listener

# Comprobamos si tenemos definida la variable $TNS_ADMIN en la máquina OCM (con el usuario Oracle)
echo $TNS_ADMIN
# No la hemos definido, luego no tiene que mostrarnos nada, así que vamos al directorio $ORACLE_HOME/network/admin
cd $ORACLE_HOME/network/admin
# Comprobamos si tenemos el fichero de configuración listener.ora
ls -l listener.ora
# No hemos creado ninguno todavía, así que no nos debe aparecer ningun fichero
# Si tuvieramos alguno, recordad siempre hacer copia de seguridad siempre que lo modifiquemos, es una buena práctica
# Por ejemplo => cp -p listener.ora listener.ora.20121227

# Podemos iniciar un LISTENER sin tener el archivo listener.ora
# Esta es la configuración por defecto (implícita) cuando no existe el fichero listener.ora => (ADDRESS=(PROTOCOL=tcp)(HOST=host_name)(PORT=1521))
lsnrctl start
# Comprobamos el estado de LISTENER
# Si hemos iniciado la BD, el proceso PMON intentará registrar los servicios de la propia BD en el LISTENER cada 60 segundos
lsnrctl status # Si hemos esperado lo suficiente veremos los servicios OCM y OCMXDB (éste último se utiliza para XML DB)
# También podemos ver el estado de los servicios en detalle
lsnrctl services
# Os recuerdo que no estamos especificando el nombre del LISTENER, porque tiene el nombre por defecto
# Esta sentencia es equivalente a la anterior
lsnrctl services LISTENER

# Ahora vamos a hacer una configuración manual del fichero "listener.ora"
# El fichero listener.ora contiene las entradas de la configuración de uno o varios LISTENER
# Paramos el LISTENER
lsnrctl stop
# Podemos usar el ejemplo que viene en la documentación como guía "http://docs.oracle.com/cd/E11882_01/network.112/e10835/listener.htm#CCHCIJFE"
# Añadimos estas líneas al fichero $ORACLE_HOME/network/admin/listener.ora y modificamos las variables "HOST", "GLOBAL_DBNAME", "SID_NAME" y "ORACLE_HOME"
LISTENER=
  (DESCRIPTION=
    (ADDRESS_LIST=
      (ADDRESS=(PROTOCOL=tcp)(HOST=ocm.dbajunior.com)(PORT=1521))
      (ADDRESS=(PROTOCOL=ipc)(KEY=extproc))))
SID_LIST_LISTENER=
  (SID_LIST=
    (SID_DESC=
      (GLOBAL_DBNAME=OCM)
      (ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1)
      (SID_NAME=OCM))
    (SID_DESC=
      (SID_NAME=plsextproc)
      (ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1)
      (PROGRAM=extproc)))
# Levantamos el LISTENER
lsnrctl start

# Veamos el status de los servicios del LISTENER
lsnrctl status
# Merece la pena comentar la siguiente linea => "Instance "OCM", status UNKNOWN, has 1 handler(s) for this service..."
# · Esto quiere decir que la instancia OCM que atiende el servicio OCM ha sido registrada de forma estática (a través de la entrada SID_LIST_LISTENER del fichero "listener.ora")
# · El resto de entradas con el STATUS = READY han sido registradas dinámicamente por el proceso PMON

4. Ahora toca el turno de “tnsnames.ora”. En este fichero se introducen los alias a descriptores de conexión hacia un LISTENER de una BD.

# Creamos el fichero "tnsnames.ora" manualmente (luego lo practicaremos com un asistente)
# Utilizamos el ejemplo de la documentación "http://docs.oracle.com/cd/E11882_01/network.112/e10836/naming.htm#BABIDHJB"
# Añadimos estas lineas al fichero $ORACLE_HOME/network/admin/tnsnames.ora
OCM=
(DESCRIPTION=
  (ADDRESS=(PROTOCOL=tcp)(HOST=ocm.dbajunior.com)(PORT=1521))
  (CONNECT_DATA=
     (SERVICE_NAME=OCM)))
# Comprobamos que podemos conectar al servicio OCM utilizando la entrada del fichero tnsnames.ora
tnsping ocm
# Intentamos entrar con SQL*Plus para verificar que ambos fichero (tnsnames.ora y listener.ora) son correctos
sqlplus system@OCM
# Podemos revisar el log de la conexión con el LISTENER en el fichero /u01/app/oracle/diag/tnslsnr/ocm/listener/trace/listener.log
# Veremos una entrada similar => 28-DEC-2012 09:52:29 * (CONNECT_DATA=(SERVICE_NAME=OCM)(CID=(PROGRAM=sqlplus) ... * establish * OCM * 0

5. Nos queda el fichero sqlnet.ora. En este fichero se configuración distintos parámetros de configuración de SQL Net (tanto cliente como servidor). En principio no es necesario ya que los valores por defecto son correctos.

# Añadimos las siguientes lineas al fichero $ORACLE_HOME/network/admin/sqlnet.ora
NAMES.DIRECTORY_PATH=(tnsnames, ldap, ezconnect)
ADR_BASE = /u01/app/oracle
# Probamos una conexión con Easy Connect (EZCONNECT)
sqlplus /nolog
# Ahora ejecutamos la siguiente instrucción
# -- CONNECT system/******@ocm.dbajunior.com:1521/OCM

# Veamos qué sucede si eliminamos la opción EZCONNECT
# Editamos el fichero $ORACLE_HOME/network/admin/sqlnet.ora y modificamos la siguiente linea
NAMES.DIRECTORY_PATH=(tnsnames, ldap, ezconnect)
# Por esta otra
NAMES.DIRECTORY_PATH=(tnsnames, ldap)
# Volvemos a intentar conectarnos de la misma forma que en el ejercicio anterior
sqlplus /nolog
# Ahora ejecutamos la siguiente instrucción y veremos que nos da el error ORA-12154
# -- CONNECT system/******@ocm.dbajunior.com:1521/OCM
# Modificamos de nuevo el fichero sqlnet.ora dejándolo como estaba con el parámetro "NAMES.DIRECTORY_PATH=(tnsnames, ldap, ezconnect)"

6. Vamos a recrear ahora los tres ficheros pero con el asistente NETCA. Empezamos creando el LISTENER

# Paramos el LISTENER y hacemos copia de seguridad de los que hemos creado
lsnrctl stop
mv listener.ora listener.ora.20121228
mv tnsnames.ora tnsnames.ora.20121228
mv sqlnet.ora sqlnet.ora.20121218
# Ejecutamos el asistente NETCA
netca

NETCA Welcome Page

Seleccionamos “Listener configuration”->
-> Click “Next” ->
-> Seleccionamos “Add” ->
-> Click “Next” ->
-> Dejamos el nombre por defecto “LISTENER” ->
-> Click “Next” ->
-> Pinchamos en IPC y lo añadimos a la lista “Selected Protocols” ->
-> Click “Next” ->
-> Dejamos por defecto el puerto 1521 “Use the standard port number of 1521” ->
-> Click “Next” ->
-> IPC Key value = “extproc” ->
-> Click “Next” ->
-> Seleccionamos “No” ->
-> Click “Next” ->
-> Click “Next”

# Ya tenemos la configuración registrada en $ORACLE_HOME/network/admin/listener.ora
# Además ha levantado el LISTENER, lo verificamos
cat $ORACLE_HOME/network/admin/listener.ora
lsnrctl status LISTENER

7. Utilizando el mismo asistente vamos a crear el archivo tnsnames.ora

En la pantalla inicial del asistente ->
-> Seleccionamos “Local Net Service Name configuration” ->
-> Click “Next” ->
-> Click “Add” ->
-> “Click “Next” ->
-> Service Name = “OCM” ->
-> Click “Next” ->
-> Click “TCP” ->
-> Click “Next” ->
-> Host name = “ocm.dbajunior.com” ->
-> Click “Next” ->
-> Seleccionamos “Yes, perform a test ->
-> Click “Next” ->
-> Nos dará un fallo (ORA-01017) Click en “Change Login” ->
-> Username = “system” y Password = <vuestro pwd> ->
-> Click “OK” ->
-> Esta vez debe salir “Connecting…Test succesful.” ->
-> Click “Next” ->
-> Net Service Name = “OCM” ->
-> Click “Next” ->
-> Click “No” ->
-> Click “Next” ->
-> Click “Next”

8. Ahora generamos el fichero sqlnet.ora, también con el asistente NETCA

En la pantalla inicial del asistente ->
-> Seleccionamos “Naming Methods configuration” ->
-> Click “Next” ->
-> Movemos los métodos “Local Naming”, “Directory Naming” y “Easy Connect Naming” ->
-> Click “Next” ->
-> Click “Next” ->
-> Click “Finish”

9. Cuando usamos un puerto distinto al 1521 tenemos que definir la variable LOCAL_LISTENER. Veamos un ejemplo:

# Añadimos las siguientes lineas al fichero $ORACLE_HOME/rdbms/admin/listener.ora
LISTENER_TEST =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = ocm.dbajunior.com)(PORT = 50000))
    )
  )
# Añadimos las siguientes entradas al fichero $ORACLE_HOME/rdbms/admin/tnsnames.ora
LISTENER_TEST =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = ocm.dbajunior.com)(PORT = 50000))
    )
  )
# Levantamos el LISTENER LISTENER_TEST
lsnrctl start LISTENER_TEST

Por último nos queda modificar el parámetro LOCAL_LISTENER de la BD

-- Entramos a la BD como SYS y ejecutamos la siguietne instrucción
ALTER SYSTEM SET LOCAL_LISTENER='LISTENER_TEST' SCOPE=BOTH;

Podemos comprobar, en menos de un minuto, como se registran los servicios de la BD

# Comprobamos los servicios registrados en el listener LISTENER_TEST
lsnrctl status LISTENER_TEST

Eliminamos el último LISTENER (LISTENER_TEST), ya que nos quedaremos con el habitual (sobre el puerto 1521)

# Paramos el listener LISTENER_TEST
lsnrctl stop LISTENER_TEST
# Eliminamos la entrada en el fichero listener.ora relativo a LISTENER_TEST
# Eliminamos la entrada en el fichero tnsnames.ora relativo a LISTENER_TEST

Por último, volvemos a modificar el parámetro LOCAL_LISTENER

-- Entramos con SQL*Plus y resetamos el parámetro (lo hacemos de esta manera para no reiniciar la instancia)
ALTER SYSTEM RESET LOCAL_LISTENER SCOPE=SPFILE;
ALTER SYSTEM SET LOCAL_LISTENER='(ADDRESS = (PROTOCOL=TCP)(HOST=ocm.dbajunior.com)(PORT=1521))' SCOPE=MEMORY;