¿Cuál es el comando para truncar un archivo de registro de SQL Server?


192

Necesito vaciar un archivo LDF antes de enviarlo a un colega. ¿Cómo fuerzo a SQL Server a truncar el registro?

Respuestas:


131

si no recuerdo mal ... en el analizador de consultas o equivalente:

BACKUP LOG  databasename  WITH TRUNCATE_ONLY

DBCC SHRINKFILE (  databasename_Log, 1)

2
Esto es definitivamente mejor que configurar el modelo de recuperación de la base de datos en SIMPLE (como en la respuesta de Blorgbeard) porque si su modelo de recuperación es COMPLETO, lo tiene configurado de esa manera por una razón.
Scott Whitlock

52
truncate_only está en desuso en SQL Server 2008, por lo que debe cambiar la base de datos a recuperación simple msdn.microsoft.com/en-us/library/ms143729(SQL.90).aspx
Justin Moore

10
Para SQL Server 2012 esto funciona, pero sin WITH TRUNCATE_ONLY.
net_prog

44
Además de lo que dijo net_prog, para SQL Server 2012 sustituí la primera línea BACKUP LOG DatabaseNameHere TO DISK='NUL:'.
Aaron Newton el

'TRUNCATE_ONLY' no es una opción de RESPALDO reconocida. (SQL Server 2019 RC1)
Tomasz Gandor

304

En estudio de gestión:

  • No hagas esto en un entorno en vivo, sino para asegurarte de reducir tu db de desarrollo tanto como puedas:
    • Haga clic derecho en la base de datos, elija Properties, luego Options.
    • Asegúrese de que "Modelo de recuperación" esté configurado en "Simple", no en "Completo"
    • Haga clic en Aceptar
  • Haga clic derecho en la base de datos nuevamente, elija Tasks-> Shrink->Files
  • Cambie el tipo de archivo a "Registro"
  • Haga clic en Aceptar.

Alternativamente, el SQL para hacerlo:

 ALTER DATABASE mydatabase SET RECOVERY SIMPLE
 DBCC SHRINKFILE (mydatabase_Log, 1)

Ref: http://msdn.microsoft.com/en-us/library/ms189493.aspx


1
¡Tu respuesta me ha salvado el día! No conocía la opción "clic derecho - Tareas -> Reducir". ¡Gracias!
René

77
¿Qué haces en un entorno en vivo? Copia de seguridad de los registros primero?
John Bubriski

1
No soy DBA, pero sí, creo que hacer una copia de seguridad del registro lo truncará: technet.microsoft.com/en-us/library/ms179478.aspx
Blorgbeard saldrá el

2
@JohnBubriski Si está utilizando un modelo de recuperación que no sea simple, los registros son la base para recuperar datos o revertir transacciones. Por lo tanto, en producción, primero deberá hacer una copia de seguridad de estos registros antes de poder reducir los archivos de registro. De lo contrario, no habría posibilidad de recuperación real. Desafortunadamente, si se encuentra en una situación de recuperación, tendrá que volver a cargar todas las copias de seguridad del registro de transacciones para recuperar completamente la base de datos. ¡Tiempos divertidos, para estar seguros! :)
define el

1
en SQL Server 2012 tuve que hacerlo use mydatabaseantes de ejecutardbcc shrinkfile
knb

62

Para SQL Server 2008, el comando es:

ALTER DATABASE ExampleDB SET RECOVERY SIMPLE
DBCC SHRINKFILE('ExampleDB_log', 0, TRUNCATEONLY)
ALTER DATABASE ExampleDB SET RECOVERY FULL

Esto redujo mi archivo de registro de 14 GB a 1 MB.


55
Como la pregunta es ambigua en cuanto a qué versión y la respuesta aceptada no es aplicable a SQL Server 2008, esta respuesta sigue siendo válida independientemente de la edad.
James Law

Gracias, me ayudó a reducir un gran archivo de registro que no reaccionó con DBCC SHRINKFILE
Christian Navelot

66
¡No olvide volver a cambiar el modelo de recuperación a COMPLETO cuando haya terminado!
Dan Bechard

Debe hacer una copia de seguridad antes de hacer esto (o cualquiera de las otras opciones de truncamiento). Si realiza una copia de seguridad completa y marca la opción 'Copiar solo copia de seguridad' en SSMS, ya no necesita el registro. (Esto es solo un punto en el tiempo de respaldo).
Simon_Weaver

37

Para SQL 2008, puede hacer una copia de seguridad del registro en el nuldispositivo:

BACKUP LOG [databaseName]
TO DISK = 'nul:' WITH STATS = 10

Y luego use DBCC SHRINKFILEpara truncar el archivo de registro.


2
Este es el único que terminó funcionando en mi situación ... Recibí un error al intentar usar la copia de seguridad con TRUNCATE_ONLY
TomXP411 el

Nota: esto puede llevar bastante tiempo, incluso en SSD (tiene que leer el registro para poder descartarlo). Para un archivo de registro de 30 GB en una máquina virtual de Azure de potencia moderada, se necesitan 10 minutos para obtener el 40%. Asegúrese de cambiar a la toma 'Mensajes' en SSMS para ver el porcentaje procesado.
Simon_Weaver

3

nombre de registro del registro de respaldo con truncate_only seguido de un comando dbcc shrinkfile


0

Ya que la respuesta para mí fue enterrada en los comentarios. Para SQL Server 2012 y versiones posteriores, puede usar lo siguiente:

BACKUP LOG Database TO DISK='NUL:'
DBCC SHRINKFILE (Database_Log, 1)

-5

Otra opción es separar la base de datos a través de Management Studio. Luego, simplemente elimine el archivo de registro o cámbiele el nombre y elimínelo más tarde.

De vuelta en Management Studio, adjunte la base de datos nuevamente. En la ventana adjunta, elimine el archivo de registro de la lista de archivos.

La base de datos adjunta y crea un nuevo archivo de registro vacío. Después de comprobar que todo está bien, puede eliminar el archivo de registro renombrado.

Probablemente no deberías usar esto para bases de datos de producción.


44
¡Nunca hagas esto! Puede haber datos en el registro aún no confirmados en el archivo de datos. Perdería esos datos.
Paul

Si, en su respuesta, advierte que no lo intente en producción, no vale la pena publicarlo.
Stan Shaw

9
No estoy de acuerdo con los downvoters: es una opción. Los administradores solo necesitan entender su escenario. Por ejemplo, no habrá datos 'no confirmados' si no hay transacciones abiertas.
Gerard ONeill

3
Esta es la única solución que funcionó para mí. Mi unidad se llenó y no pude hacer copias de seguridad o encoger y nada más parecía estar funcionando. ¡Gracias!
Brian

3
Estoy de acuerdo; no es una práctica recomendada, pero es una herramienta valiosa si no tiene otras opciones, como el escenario de Brian.
ScottFoster1000
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.