En Firebird, para que las transacciones sean eficientes deben ser rapidísimas, cuanto más rápidas mejor. Sin embargo a veces por un mal diseño (te olvidaste de escribir un COMMIT o un ROLLBACK) una transacción permanece abierta y los minutos pasan y pasan y pasan. Esto puede causar un problema grandísimo ya que si otros usuarios necesitan modificar una fila que está bloqueada por esa transacción no podrán hacerlo. Entonces, ¿cómo se detecta a la transacción problemática?

  • En la ventana “Símbolo del sistema” (la ventanita negra que aparece al hacer click en Inicio | Todos los programas | Accesorios | Símbolo del sistema) te ubicas en la carpeta \BIN del Firebird (por ejemplo en: C:\Archivos de Programa\Firebird\Firebird_2_5\bin)
  • Escribes: GSTAT -h MiBaseDatos.FDB
  • Anotas el número que aparece a continuación de las palabras “Oldest active”

GSTAT

Captura 1. Si haces clic en la imagen la verás más grande

  • Averiguas los datos de esa transacción con el siguiente comando:
SELECT
    A.*
FROM
    MON$ATTACHMENTS A
JOIN
    MON$TRANSACTIONS T
        ON A.MON$ATTACHMENT_ID = T.MON$ATTACHMENT_ID
WHERE
    T.MON$TRANSACTION_ID = NúmeroOldestActive

Y para eliminar a la transacción problemática:

DELETE FROM
    MON$TRANSACTIONS
WHERE
    MON$TRANSACTION_ID = NúmeroOldestActive

Artículos relacionados:

El índice del blog Firebird21

El foro del blog Firebird21

Anuncios