T-SQL: Borrar el registro de transacciones

·2 min de lectura·

.csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; margin-top: 10px; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; }

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.

Comentarios (0)

Sé el primero en comentar.

T-SQL: Re-Indexar todas las tablas de una Base de Datos

·1 min de lectura

El artículo explica cómo re‑indexar todas las tablas de una base de datos SQL Server cuando no existe un comando único para ello. Se presenta un script TSQL que recorre el catálogo de datos, obtiene los nombres de todas las tablas base y ejecuta DBCC DBREINDEX para cada una, evitando mensajes de información. El cursor se cierra y libera al finalizar. El autor sugiere que el código sea útil y menciona un libro de SQL Server 2014 en español como recurso adicional.

T-SQL: Listar todas las tablas de una base de datos con sus respectivos tamaños

·2 min de lectura

El artículo explica cómo obtener el tamaño de cada tabla en una base de datos SQL Server. Se utiliza una consulta sobre la tabla sysindexes, filtrando solo los índices relevantes (0, 1, 255) y excluyendo objetos no tabulares. La consulta convierte y suma los campos rows, reserved, dpages, used y reserved‑used, multiplicándolos por 8 para obtener bytes. Los resultados se formatean como números legibles y se ordenan descendente por número de registros. Se muestra el código completo y se sugiere consultar un libro de SQL Server para más trucos.