# Cómo analizar las conexiones Oracle Listener por minuto y por servicio con un script bash

Como DBA, entender el comportamiento del listener de Oracle es clave para detectar posibles cuellos de botella, picos inesperados o problemas de conexión que afectan el rendimiento y la estabilidad de las bases de datos. Una forma sencilla y eficaz de obtener esta información es analizando el archivo listener.log.

Hoy quiero compartir un script bash que he desarrollado para procesar esos logs, obtener estadísticas de conexiones por minuto y desglosarlas por servicio. Te explico cómo funciona y por qué puede ser una herramienta útil en tu día a día.

**¿Qué hace este script?**

*   Lee uno o varios archivos listener.log de Oracle, incluyendo posibles rotaciones.
    
*   Filtra las líneas correspondientes a una fecha y rango horario definidos (ejemplo: entre las 08:00 y las 12:00 de un día).
    
*   Extrae la hora exacta (hasta minuto) y el nombre del servicio (SERVICE\_NAME) usado en cada conexión establecida.
    

Calcula y muestra:

*   El número total de conexiones por minuto.
    
*   El número total de conexiones por servicio.
    
*   Presenta el resultado ordenado cronológicamente y alfabéticamente para facilitar su interpretación.
    

¿Cómo funciona el script?

**Variables configurables:**

*   LISTENER\_LOG\_PATH y LISTENER\_LOG\_PATTERN para definir dónde están los logs y qué archivos leer.
    
*   FECHA, HORA\_INICIO y HORA\_FIN para definir el intervalo temporal a analizar.
    

**¿Qué aporta a un DBA?**

*   Visibilidad precisa: Podrás identificar en qué minutos se producen picos de conexión y si estos corresponden a servicios específicos, permitiendo detectar patrones anómalos.
    
*   Diagnóstico rápido: Al saber qué servicios están más activos, puedes priorizar análisis o acciones sobre aplicaciones concretas.
    
*   Soporte a troubleshooting: Ayuda a relacionar problemas de rendimiento o caídas con la carga real sobre el listener.
    
*   Automatización sencilla: El script se puede integrar en tareas cron para generar informes periódicos sin intervención manual.
    

```plaintext
#!/bin/bash

# Ruta a listener.log (puedes usar comodines)
LISTENER_LOG_PATH="/path_a_ruta_listener/listener/trace"
LISTENER_LOG_PATTERN="listener*.log"

# Rango horario a analizar
FECHA="20-JUN-2025"
HORA_INICIO="08:00"
HORA_FIN="12:00"

echo "Conexiones por minuto en listener.log entre $HORA_INICIO y $HORA_FIN del $FECHA"
echo

# Leer y procesar los logs
cat $LISTENER_LOG_PATH/$LISTENER_LOG_PATTERN 2>/dev/null | grep "$FECHA" | grep "CONNECT_DATA" | \
awk -v start="$HORA_INICIO" -v end="$HORA_FIN" '
{
  fecha = $1
  hora = $2
  minuto = substr(hora, 1, 5)

  if (minuto >= start && minuto <= end) {
    conexiones[minuto]++

    match($0, /SERVICE_NAME=[^)]+/, svc)
    if (svc[0] != "") {
      split(svc[0], tmp, "=")
      servicio = tmp[2]
      servicio_conexiones[servicio]++
    }
  }
}

END {
  print "Conexiones por minuto:"
  PROCINFO["sorted_in"] = "@ind_str_asc"
  for (t in conexiones) {
    printf "  %s → %d conexiones\n", t, conexiones[t]
  }

  print "\n Conexiones por SERVICE_NAME:"
  PROCINFO["sorted_in"] = "@ind_str_asc"
  for (s in servicio_conexiones) {
    printf "  %s → %d conexiones\n", s, servicio_conexiones[s]
  }
}'
```

Ejemplo de salida:

```plaintext
[xxxxxxxx@xxx-xxx-xxx ~]$ ./analisis_listener.sh
Conexiones por minuto en listener.log entre 08:00 y 12:00 del 20-JUN-2025

Conexiones por minuto:
  08:00 → 1274 conexiones
  08:01 → 1319 conexiones
  08:02 → 1326 conexiones
  08:03 → 1335 conexiones
  08:04 → 1254 conexiones
  08:05 → 1195 conexiones
  08:06 → 1196 conexiones
  08:07 → 1193 conexiones
  08:08 → 1194 conexiones
  08:09 → 1217 conexiones
  08:10 → 1192 conexiones
  08:11 → 1194 conexiones
  08:12 → 1211 conexiones
  08:13 → 1187 conexiones
  08:14 → 1199 conexiones
  08:15 → 1178 conexiones
  08:16 → 1209 conexiones
  08:17 → 1178 conexiones
  08:18 → 1177 conexiones
  08:19 → 1192 conexiones
  08:20 → 1213 conexiones
  08:21 → 1194 conexiones
  08:22 → 1177 conexiones
  08:23 → 1184 conexiones
  08:24 → 1183 conexiones
  08:25 → 1192 conexiones
  08:26 → 1220 conexiones
  08:27 → 1200 conexiones
  08:28 → 1220 conexiones
  08:29 → 1184 conexiones
  08:30 → 1196 conexiones
  08:31 → 1214 conexiones
  08:32 → 1233 conexiones
  08:33 → 1201 conexiones
  08:34 → 1223 conexiones
  08:35 → 1209 conexiones
  08:36 → 1219 conexiones
  08:37 → 1212 conexiones
  08:38 → 1194 conexiones
  08:39 → 1196 conexiones
  08:40 → 1219 conexiones
  08:41 → 1227 conexiones
  08:42 → 1207 conexiones
  08:43 → 1194 conexiones
  08:44 → 1204 conexiones
  08:45 → 1236 conexiones
  08:46 → 1212 conexiones
  08:47 → 1209 conexiones
  08:48 → 1215 conexiones
  08:49 → 1213 conexiones
  08:50 → 1183 conexiones
  08:51 → 1165 conexiones
  08:52 → 1204 conexiones
  08:53 → 1224 conexiones
  08:54 → 1182 conexiones
  08:55 → 1180 conexiones
  08:56 → 1187 conexiones
  08:57 → 1218 conexiones
  08:58 → 1214 conexiones
  08:59 → 1211 conexiones
  09:00 → 1240 conexiones
  09:01 → 1253 conexiones
  09:02 → 1239 conexiones
  09:03 → 1256 conexiones
  09:04 → 1225 conexiones
  09:05 → 1253 conexiones
  09:06 → 1230 conexiones
  09:07 → 1236 conexiones
  09:08 → 1200 conexiones
  09:09 → 1210 conexiones
  09:10 → 1240 conexiones
  09:11 → 1235 conexiones
  09:12 → 1209 conexiones
  09:13 → 1221 conexiones
  09:14 → 1195 conexiones
  09:15 → 1194 conexiones
  09:16 → 1221 conexiones
  09:17 → 1219 conexiones
  09:18 → 1178 conexiones
  09:19 → 1189 conexiones
  09:20 → 1212 conexiones
  09:21 → 1201 conexiones
  09:22 → 1228 conexiones
  09:23 → 1230 conexiones
  09:24 → 1238 conexiones
  09:25 → 1229 conexiones
  09:26 → 1219 conexiones
  09:27 → 1208 conexiones
  09:28 → 1240 conexiones
  09:29 → 1222 conexiones
  09:30 → 1222 conexiones
  09:31 → 1215 conexiones
  09:32 → 1219 conexiones
  09:33 → 1224 conexiones
  09:34 → 1213 conexiones
  09:35 → 1223 conexiones
  09:36 → 1208 conexiones
  09:37 → 1187 conexiones
  09:38 → 1236 conexiones
  09:39 → 1205 conexiones
  09:40 → 1202 conexiones
  09:41 → 1187 conexiones
  09:42 → 1214 conexiones
  09:43 → 1204 conexiones
  09:44 → 1194 conexiones
  09:45 → 1198 conexiones
  09:46 → 1209 conexiones
  09:47 → 1240 conexiones
  09:48 → 1221 conexiones
  09:49 → 1212 conexiones
  09:50 → 1237 conexiones
  09:51 → 1223 conexiones
  09:52 → 1221 conexiones
  09:53 → 1222 conexiones
  09:54 → 1238 conexiones
  09:55 → 1227 conexiones
  09:56 → 1234 conexiones
  09:57 → 1238 conexiones
  09:58 → 1221 conexiones
  09:59 → 1233 conexiones
  10:00 → 1279 conexiones
  10:01 → 1227 conexiones
  10:02 → 1236 conexiones
  10:03 → 1195 conexiones
  10:04 → 1203 conexiones
  10:05 → 1218 conexiones
  10:06 → 1186 conexiones
  10:07 → 1221 conexiones
  10:08 → 1232 conexiones
  10:09 → 1176 conexiones
  10:10 → 1178 conexiones
  10:11 → 1222 conexiones
  10:12 → 1206 conexiones
  10:13 → 1218 conexiones
  10:14 → 1205 conexiones
  10:15 → 1218 conexiones
  10:16 → 1251 conexiones
  10:17 → 1247 conexiones
  10:18 → 1288 conexiones
  10:19 → 1263 conexiones
  10:20 → 1290 conexiones
  10:21 → 1223 conexiones
  10:22 → 1241 conexiones
  10:23 → 1208 conexiones
  10:24 → 1220 conexiones
  10:25 → 1267 conexiones
  10:26 → 1239 conexiones
  10:27 → 1207 conexiones
  10:28 → 1231 conexiones
  10:29 → 1245 conexiones
  10:30 → 1247 conexiones
  10:31 → 1197 conexiones
  10:32 → 1205 conexiones
  10:33 → 1207 conexiones
  10:34 → 1231 conexiones
  10:35 → 1197 conexiones
  10:36 → 1218 conexiones
  10:37 → 1234 conexiones
  10:38 → 1184 conexiones
  10:39 → 1222 conexiones
  10:40 → 1237 conexiones
  10:41 → 1221 conexiones
  10:42 → 1232 conexiones
  10:43 → 1243 conexiones
  10:44 → 1233 conexiones
  10:45 → 1268 conexiones
  10:46 → 1204 conexiones
  10:47 → 1225 conexiones
  10:48 → 1257 conexiones
  10:49 → 1235 conexiones
  10:50 → 1228 conexiones
  10:51 → 1217 conexiones
  10:52 → 1258 conexiones
  10:53 → 1246 conexiones
  10:54 → 1243 conexiones
  10:55 → 1229 conexiones
  10:56 → 1222 conexiones
  10:57 → 1220 conexiones
  10:58 → 1197 conexiones
  10:59 → 1220 conexiones
  11:00 → 1220 conexiones
  11:01 → 1216 conexiones
  11:02 → 1246 conexiones
  11:03 → 1254 conexiones
  11:04 → 1231 conexiones
  11:05 → 1226 conexiones
  11:06 → 1238 conexiones
  11:07 → 1219 conexiones
  11:08 → 1211 conexiones
  11:09 → 1231 conexiones
  11:10 → 1227 conexiones
  11:11 → 1242 conexiones
  11:12 → 1210 conexiones
  11:13 → 1225 conexiones
  11:14 → 1245 conexiones
  11:15 → 1231 conexiones
  11:16 → 1246 conexiones
  11:17 → 1253 conexiones
  11:18 → 1253 conexiones
  11:19 → 1228 conexiones
  11:20 → 1248 conexiones
  11:21 → 1225 conexiones
  11:22 → 1202 conexiones
  11:23 → 1198 conexiones
  11:24 → 1207 conexiones
  11:25 → 1244 conexiones
  11:26 → 1222 conexiones
  11:27 → 1201 conexiones
  11:28 → 1229 conexiones
  11:29 → 1223 conexiones
  11:30 → 1240 conexiones
  11:31 → 1212 conexiones
  11:32 → 1230 conexiones
  11:33 → 1248 conexiones
  11:34 → 1237 conexiones
  11:35 → 1226 conexiones
  11:36 → 1248 conexiones
  11:37 → 1232 conexiones
  11:38 → 1238 conexiones
  11:39 → 1245 conexiones
  11:40 → 1250 conexiones
  11:41 → 1261 conexiones
  11:42 → 1252 conexiones
  11:43 → 1252 conexiones
  11:44 → 1228 conexiones
  11:45 → 1241 conexiones
  11:46 → 1213 conexiones
  11:47 → 1210 conexiones
  11:48 → 1202 conexiones
  11:49 → 1238 conexiones
  11:50 → 1232 conexiones
  11:51 → 1235 conexiones
  11:52 → 1228 conexiones
  11:53 → 1222 conexiones
  11:54 → 1201 conexiones
  11:55 → 1261 conexiones
  11:56 → 1218 conexiones
  11:57 → 1247 conexiones
  11:58 → 1223 conexiones
  11:59 → 702 conexiones

Conexiones por SERVICE_NAME:
  servicio1.xxxxx.xxx → 18104 conexiones
  cdbxxx.xxxxx.xxx → 309 conexiones
  servicio2.xxxxxx.xxx → 715 conexiones
  servicio3.xxxxxx.xxx → 1847 conexiones
  servicio4.xxxxx.xxx → 55783 conexiones
  pdb_xxx.xxxxx.xxx → 6 conexiones
  servicio5.xxxxx.xxx → 15 conexiones
  servicio6.xxxxx.xxx → 215613 conexiones
```

**Mejoras y personalizaciones**

*   Añadir un parámetro para filtrar por usuario o IP origen.
    
*   Generar gráficos con herramientas como gnuplot o exportar a CSV.
    
*   **Integrar alertas si se detectan picos fuera de lo normal.**
    

Dando rienda suelta a la imaginación y necesidades puede ser tu gran aliado.
