martes, 8 de octubre de 2013

SQL Server: 'TRUNCATE_ONLY' no es una opción BACKUP reconocida

Recientemente realizando unos tareas de mantenimiento en SQL Server 2008 me encontré con el error 'TRUNCATE_ONLY' no es una opción BACKUP reconocida. De entrada me extrañó porque de entrada todo era correcto y el script había utilizado anteriormente en SQL Server 2005 así que me puse a investigar; la secuencia de comandos utilizada era:

-- Truncamos registro de transacciones
USE[DatabaseName] BACKUP LOG [DatabaseName]WITH TRUNCATE_ONLY

-- Obtenemos error correspondiente
'TRUNCATE_ONLY' no es una opción BACKUP reconocida.

-- Debido al error anterior queda pendiente ejecutar la reducción del
-- registro de transaciones
-- USE [DatabaseName] DBCC SHRINKFILE ('DatabaseNameLog', 0)]

Lo primero, ir al MSDN a buscar información sobre el comando BACKUP en SQL Server 2008 donde nos encontramos el párrafo siguiente:

Las opciones BACKUP LOG WITH NO_LOG y WITH TRUNCATE_ONLY ya no se incluyen. Si usa el modelo de recuperación completa o el optimizado para cargas masivas de registros y debe quitar la cadena de copia de seguridad del registro de una base de datos, cambie al modelo de recuperación simple. Para obtener más información, vea Cambiar del modelo de recuperación completa al modelo de recuperación optimizado para cargas masivas de registros.

También en el artículo anterior podemos encontrar un enlace con información adicional sobre el truncamiento del registro de transacciones; básicamente (y simplificando) lo que nos viene a decir es que el truncamiento del registro de transacciones se produce automáticamente:

  • Después de un punto de control en el modelo de recuperación simple.

  • Tras una copia de seguridad del registro de transacciones en el modelo de recuperación completa si se cumplen ciertas condiciones (podéis verlas detalladas en el enlace anterior).

Buceando por distintos sitios parece desprenderse que la postura de Microsoft para eliminar la opción de BACKUP 'WITH TRUNCATE_ONLY' se debe al riesgo existente al forzar la eliminación de información del registro de transacciones. Según lo comentando anteriormente, y siguiendo las recomendaciones que Microsoft hace sobre el comando DBCC SHRINKFILE, si queremos reducir el tamaño del registro de transacciones podemos hacerlo cambiando el modelo de recuperación de la base de datos y luego restaurándolo:

-- Cambiamos modelo de recuperación a simple 
ALTER DATABASE [DatabaseName]
SET RECOVERY SIMPLE
GO
 
-- Reducimos tamaño del registro de transacciones
DBCC SHRINKFILE (DatabaseNameLog)
GO

-- Cambiamos modelo de recuperación a completa 
ALTER DATABASE [DatabaseName] 
SET RECOVERY FULL
GO

Habremos reducido el registro de transacciones y evitado el error 'TRUNCATE_ONLY' no es una opción BACKUP reconocida. Y hasta aquí el artículo de hoy, recordad que dentro de areaTIC podéis encontrar otros artículos interesantes, no dudéis en consultar nuestro archivo, también podéis seguirnos por RSS o las principales redes sociales (twitter, facebook, linkedin...).


LECTURAS RELACIONADAS RECOMENDADAS POR AREATIC.NET

3 comentarios:

Publicar un comentario