Set up Network Tracing

1. Documentación en Tahiti -> Masters Book List -> Net Services Administrator’s Guide -> 16 Troubleshooting Oracle Net Services -> Tracing Error Information for Oracle Net Services

2. Podemos habilitar trazas en el LISTENER pero también podemos generar trazas de clientes que usen los servicios de SQL*Net (Por ejemplo SQL*Plus). Empezamos habilitando trazas en el LISTENER. Para habilitar trazas en el LISTENER tenemos que modificar el fichero listener.ora. Repasamos los diferentes parámetros principales que podemos habilitar en el LISTENER:

  • DIAG_ADR_ENABLED_listener_name => Habilita la jerarquía del repositorio de trazas y logs (Por defecto=ON)
  • ADR_BASE_listener_name => Directorio base para ADR (Por defecto=$ORACLE_BASE)
  • LOGGING_listener_name => Habilita logging del LISTENER, no confundir con trazas (Por defecto=ON)
  • TRACE_LEVEL_listener_name => Nivel de trazas: OFF [0] / USER [4] / ADMIN [10] / SUPPORT [16] (Por defecto=OFF)
  • TRACE_TIMESTAMP_listener_name => Introducir un TIMESTAMP en cada evento (Por defecto=ON)

Los siguientes parámetros sólo aplican cuando tenemos el parámetro DIAG_ADR_ENABLED=OFF

  • TRACE_DIRECTORY_listener_name => Directorio destino del fichero de trazas (Por defecto=ORACLE_HOME/network/trace)
  • TRACE_FILE_listener_name => Nombre del fichero de trazas (Por defecto=listener.trc)
  • TRACE_FILELEN_listener_name => Tamaño máximo en KB del fichero (Por defecto=unlimited)
  • TRACE_FILENO_listener_name => Número de ficheros de trazas (Por defecto=1)

Por defecto, tenemos el parámetro DIAG_ADR_ENABLED=ON (aunque no lo especifiquemos), luego para habilitar trazas basta con definir el parámetro TRACE_LEVEL. Si queremos que las trazas vayan a un fichero distinto al que se utilizado por defecto con ADR, debemos fijar el parámetro DIAG_ADR_ENABLED=OFF y luego especificar el directorio y nombre del fichero (parámetros TRACE_FILE y TRACE_DIRECTORY).

# Habilitemos trazas para el LISTENER
# Añadimos las siguientes lineas al fichero $ORACLE_HOME/network/admin/listener.ora
TRACE_LEVEL_LISTENER = USER
# Cargamos la configuración del LISTENER para aplicar los cambios
lsnrctl reload
# Podemos obtener el nombre del fichero de trazas sacando el STATUS del LISTENER
lsnrctl status | grep "Trace File"

# Para deshabilitarlo, tan sólo tenemos que borrar el parámetro y volver a cargar la configuración del LISTENER
lsnrctl reload

Podemos habilitar trazas sin necesidad de modificar el fichero listener.ora con la utilidad LSNRCTL.

# Iniciamos sesión con el comando lsnrctl
lsnrctl
# Activamos trazas del LISTENER nivel USER
trace USER LISTENER
# Este comando es equivalente a "set TRC_LEVEL USER"
# Desactivamos la trazas
trace OFF LISTENER

3. Ahora vamos a habilitar trazas para procesos cliente de SQL*Net y también para los procesos servidor.

# Creamos dos directorios para almacenar las trazas de SQL*Net
mkdir -p /u01/app/oracle/trace/client
mkdir -p /u01/app/oracle/trace/server
# Añadimos las siguientes lineas al fichero $ORACLE_HOME/network/admin/sqlnet.ora
DIAG_ADR_ENABLED = OFF
TRACE_LEVEL_CLIENT = SUPPORT
TRACE_LEVEL_SERVER = SUPPORT
TRACE_DIRECTORY_CLIENT = /u01/app/oracle/trace/client
TRACE_DIRECTORY_SERVER = /u01/app/oracle/trace/server
# Abrimos una conexión via SQL*Net con SQL*Plus para revisar las trazas
sqlplus system@ocm
# Lanzamos cualquier consulta, Por ej.: -- SELECT SYSDATE FROM DUAL;

# Podemos revisar las trazas en el directorio configurado
# Primero vemos las trazas del proceso cliente (El proceso con PID 5859 se corresponde con mi proceso sqlplus)
more /u01/app/oracle/trace/client/cli_5859.trc
# Examinamos después el proceso servidor que se ha creado (El proceso con PID 5891 es el proceso servidor)
more /u01/app/oracle/trace/server/svr_5891.trc
# Podemos buscar el punto donde lanzamos la consulta
grep -n date /u01/app/oracle/trace/server/svr_5891.trc

# Borramos las lineas añadidas al fichero $ORACLE_HOME/network/admin/sqlnet.ora para deshabilitar las trazas
DIAG_ADR_ENABLED = OFF
TRACE_LEVEL_CLIENT = SUPPORT
TRACE_LEVEL_SERVER = SUPPORT
TRACE_DIRECTORY_CLIENT = /u01/app/oracle/trace/client
TRACE_DIRECTORY_SERVER = /u01/app/oracle/trace/server
# Borramos los directorios que hemos creado
rm -Rf /u01/app/oracle/trace/client
rm -Rf /u01/app/oracle/trace/server