En general el Firebird es muy bueno en este aspecto, es casi imposible que una Base de Datos se corrompa por culpa de un corte de la energía eléctrica, sin embargo podría ocurrir si el corte se produjo justo en el momento en que se estaban insertando datos. Para solucionarlo:

  1. Verificar las tablas MON$ATTACHMENTS y MON$STATEMENTS
  2. Detener el servicio del Firebird
  3. Forzar un ROLLBACK con el programa GFIX.EXE
  4. Reiniciar el servicio del Firebird
  5. Verificar nuevamente las tablas MON$ATTACHMENTS y MON$STATEMENTS

Si tu Base de Datos está muy corrupta, no podrás ejecutar el paso 1. y deberás empezar con el paso 2.

1. Para verificar las tablas MON$ATTACHMENTS y MON$STATEMENTS

SELECT
   *
FROM
   MON$ATTACHMENTS
WHERE
   MON$STATE = 1

En la tabla MON$ATTACHMENTS se guardan los datos de las conexiones. La columna MON$STATE te dirá si la conexión está libre (cuando su valor es 0) o si la conexión está activa (cuando su valor es 1). Solamente deberías fijarte en las conexiones activas, o sea las que tienen un valor de 1 en la columna MON$STATE

SELECT
   *
FROM
   MON$STATEMENTS
WHERE
   MON$STATE = 1

La columna MON$TRANSACTION_ID muestra los números de todas las transacciones activas. Anota en un papel los números de las transacciones que deseas deshacer con el programa GFIX pues podrías necesitarlos cuando uses ese programa.

2. Para detener el servicio del Firebird

Inicio | Panel de Control | Firebird Server Manager | Stop

3. Para forzar un ROLLBACK con el programa GFIX.EXE

Inicio | Todos los programas | Accesorios | Símbolo del sistema

CD “C:\Archivos de Programa\Firebird\Firebird_2_5\bin”

Alternativa 1:

GFIX -user SYSDBA -password masterkey -rollback MiNúmeroTransacción MiBaseDatos.fdb

Alternativa 2:

GFIX -user SYSDBA -password masterkey -rollback all MiBaseDatos.fdb

 Como ves, aquí tienes dos alternativas posibles. Utilizarías la alternativa 1. cuando quieres especificar cual transacción se deshacerá, deberás reemplazar MiNúmeroTransacción por un número de transacción que obtuviste en el paso 1. y que anotaste en un papel. Y utilizarías la alternativa 2. para deshacer todas las transacciones, sin excepción. Lo normal es que utilices la alternativa 2. pero habrá casos en que prefieras la alternativa 1.

4. Para reiniciar el servicio del Firebird

Inicio | Panel de Control | Firebird Server Manager | Start

Conclusión

Aunque es muy raro que ocurra corrupción en una Base de Datos Firebird no es imposible (¿conoces la Ley de Murphy?) y los pasos de arriba te ayudarán a solucionarla. No siempre podrás conectarte a una Base de Datos corrupta y por lo tanto es posible que necesites empezar desde el paso 2. en cuyo caso deberás deshacer a todas las transacciones (la alternativa 2. de más arriba). Cuando una transacción se deshace (ROLLBACK) todo lo que se había hecho dentro de esa transacción se pierde o sea que cualquier INSERT/DELETE/UPDATE realizado dentro de esa transacción desaparecerá como si nunca se lo hubiera realizado.

Como una Base de Datos corrupta solamente causa trastornos lo conveniente es evitar que tal cosa ocurra. Una medida elemental de precaución es tener una buena UPS (unidad de energía ininterrumpida) conectada a la computadora donde se encuentra la Base de Datos. Otra medida elemental es jamás compartir la carpeta donde se encuentra la Base de Datos.

 

.

Anuncios