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

Mi nombre es Carla y me defino como una apasionada de conocer, compartir ideas, divertirme y aprender todo lo relacionado con Oracle.
Alegre y creativa, con un alto grado de autoexigencia, que busca, incluso sin querer, una forma diferente de ver un mismo problema o solución. Defensora del trabajo en equipo en todas las facetas de la vida y de disfrutar todo lo que haces, siempre con humildad.
Actualmente cuento con más de 15 años de experiencia como administradora de Oracle, habiendo ocupado previamente posiciones como desarrolladora en la rama de Inteligencia de Negocios. Fue en ese momento que me di cuenta de que no quería centrarme en el desarrollo, sino participar en todas las capas que involucraban los datos, desde el despliegue de la base de datos hasta su explotación final.
Siempre estoy dispuesta a ayudar y compartir conocimientos. Creo firmemente que con la tecnología hay que divertirse y no verla como una competencia. La persona con la que tienes que ser el mejor es contigo mismo.
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.
#!/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:
[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.




