T-SQL: Borrar el registro de transacciones

SQL SERVER Hay determinados momentos en que nos encontramos un error como el siguiente:

Msg 9002, Level 17, State 4, Line 1
The transaction log for database ‘MIBASEDEDATOS’ is full. To find out why space in the log cannot be reused, see the log_reuse_wait_desc column in sys.databases

Este error, nos indica que tenemos lleno el registro de transacciones de la base de datos (Transaction Log).

El procedimiento ‘normal’ para borrar el registro de transacciones, es:

BACKUP LOG [MIBASEDEDATOS] WITH TRUNCATE_ONLY 
DBCC SHRINKFILE(NOMBRE_LOGICO_LOG, 1)

Sin embargo aún así, hay casos en el que seguimos obteniendo el error. Para esto deberemos optar por una solución más drástica, como borrar físicamente el fichero LOG en el disco. Para ello, lo primero que tenemos que hacer es  “Separarar”  (Detach) la base de datos con el siguiente procedimiento:

  1. Forzamos la escritura de las páginas en memoria con CHECKPOINT (repetimos varias veces este comando).
  2. Separamos la base de datos con sp_detach_db

    USE [master] 
    GO 
    EXEC master.dbo.sp_detach_db @dbname = N’MIBASEDEDATOS’ 
    GO
  3. Borramos el fichero .LDF físico existente en nuestro disco duro. Normalmente, su ubicación es: C:Archivos de programaMicrosoft SQL ServerMSSQL.1MSSQLDataMIBASEDEDATOS.LDF. Cuidado con borrar el fichero MDF (este fichero es de la base de datos).
  4. Una vez eliminado el fichero .LDF, procedemos a "Adjuntar" (Atach) la base de datos, sin indicarle el fichero LDF. De esta forma, SQL Server automáticamente genera un nuevo fichero LDF de transacciones

    USE [master] 
    GO 
    CREATE DATABASE [MIBASEDEDATOS] ON
        (FILENAME = N’C:Archivos de programaMicrosoft SQL ServerMSSQL.1MSSQLDataMIBASEDEDATOS.MDF’)
    FOR ATTACH
    GO

Espero que os sea de utilidad.

3 comentarios en «T-SQL: Borrar el registro de transacciones»

  1. Gracias amigo después de buscar varias soluciones, finalmente encontré la solución correcta con tu ayuda.
    gracias amigo saludes.

Los comentarios están cerrados.