DB2_KILL – ¿Qué hacer si una instancia DB2 no se para?

Para parar una instancia db2 existe la instrucción db2stop, que puede ser ejecutada como comando cmd o desde sistema operativo. ¿Pero qué hacer si la BBDD no se para y deja el sistema inestable? db2_kill puede librar de muchas crisis.

Cuando hay problemas para parar una BBDD DB2, los pasos habituales suelen ser:

1)

db2stop

2)

db2 force application all + db2stop

3)

db2stop force

La primera de las opciones es la habitual para parar una instancia db2, pero ante la presencia de transacciones activas puede dar un error y no permitirte parar la instancia. Entonces se intenta parar todas las sesiones para después volver a probar el db2stop. Esta última opción es exactamente lo mismo que el db2stop force del 3er caso.

¿Pero, y si después de hacerlo la instancia no está parada pero tampoco esta en marcha? Esto es: el db2stop no funciona o indica que la instancia ya está parada, y además, el db2start dice que la instancia está en marcha.

El problema radica en que en estas circunstancias las estructuras de memoria del sistema operativo han quedado reservadas pero no se han podido liberar. Estas estructuras son la shared memory de los procesos, las colas y los messages. Estos pueden ser consultados con la instrucción ipcs (en unix).

Una solución sería ir eliminando uno a uno estas estructuras “enganchadas” hasta que todas quedaran eliminadas con ipcrm, pero es pesado, tedioso y un tanto peligroso al poder eliminar por error un semáforo de sistema y hacer caer todo el sistema.

Para realizar esta tarea existe un script llamado “db2_kill”, que elimina todas las estructuras de memoria colgadas por parte de un db2 de manera fiable.