2011-04-27 52 views
27

Gracias de antemanoCómo eliminar el archivo .ldf de SQL Server 2008?

Si detengo SQL-server y luego borro el archivo .LDF (archivo transactionlog) a la base de datos, ¿qué pasará? ¿La base de datos se marcará como sospechosa o SQL-server simplemente creará una nueva automáticamente? SQL Server 2008 R2 y mi archivo .LDF tamaño es demasiado grande, así como manejarlo, si puedo Reducir o eliminar PLZ Sugiere en el formulario de consulta

Gracias

+7

** ¡NO HAGA ESO! ** Perderá todo su registro de transacciones. ¿Por qué querría eliminar el registro de transacciones? ¡Es una parte ** integral ** de su base de datos! No vaya solo a borrar archivos detrás de SQL Server - ** ¡NUNCA! ** –

+2

Lea esto; http://stackoverflow.com/questions/480897/how-can-i-manage-sql-server-log-size –

Respuesta

5

Como se puede leer los comentarios, no es una buena solución para eliminar el registro. Pero si está seguro de que no se pierde nada, sólo puede cambiar su modo de recuperación de base de datos para simple y luego usar

DBCC shrinkdatabase ('here your database name')

para borrar el registro.

Lo peor que puede hacer es eliminar archivo de registro desde el disco. Si su servidor tenía transacciones pendientes en el momento de la detención del servidor, esas transacciones no se retrotraerán después del reinicio y obtendrá datos corruptos.

+2

dbcc shrinkdatabase es un martillo demasiado grande. Si está buscando reducir un solo archivo, use dbcc shrinkfile –

42

No debe eliminar cualquiera de los archivos de bases de datos, ya que puede dañar seriamente su base de datos!

Si se queda sin espacio en disco es posible que desee dividir su base de datos en múltiples partes. Esto se puede hacer en las propiedades de la base de datos. Por lo tanto, puede colocar cada parte de la base de datos en un volumen de almacenamiento diferente.

También puede reducir el archivo de registro de transacciones si se cambia el modo de recuperación de lleno a simples, utilizando comandos siguientes:

ALTER DATABASE myDatabase SET RECOVERY SIMPLE 
DBCC SHRINKDATABASE (myDatabase , 5) 

conmutación de nuevo a la recuperación total es posible, así:

ALTER DATABASE myDatabase SET RECOVERY FULL 

Actualizar la información de SHRINKDATABASE - o lo que yo no sabía al responder a esta pregunta: ¿

Alth Aunque el método anterior elimina parte del espacio no utilizado presenta algunas desventajas graves en los archivos de la base de datos (MDF): dañará sus índices al fragmentarlos y empeorar el rendimiento de su base de datos. Entonces, necesita reconstruir los índices posteriormente para deshacerse de la fragmentación causada por el comando de contracción.

Si desea contraer solo el archivo de registro, puede que solo desee utilizar SHRINKFILE. He copiado este ejemplo de MSDN:

USE AdventureWorks2012; 
GO 
-- Truncate the log by changing the database recovery model to SIMPLE. 
ALTER DATABASE AdventureWorks2012 
SET RECOVERY SIMPLE; 
GO 
-- Shrink the truncated log file to 1 MB. 
DBCC SHRINKFILE (AdventureWorks2012_Log, 1); 
GO 
-- Reset the database recovery model. 
ALTER DATABASE AdventureWorks2012 
SET RECOVERY FULL; 
GO 
2

Debe respaldar el registro de transacciones, entonces habrá espacio libre para que se contraiga. Cambiar al modo simple y luego reducir significa que perderá todos los datos de transacción que serían útiles en el caso de una restauración.

+1

Quizás sí, quizás no. Todo depende de lo que la base de datos está esperando para reutilizar el espacio de registro. Verificando la columna log_reuse_wait_desc en sys.databases para la base de datos relevante se lo dirá. –

10

lo hice por

  • Separar la base de datos (incluyen Quitar conexiones)
  • Retire el archivo * .ldf
  • Fije la base de datos, pero retire la espera *.archivo LDF

lo hizo por 4 bases de datos diferentes en SQL 2012, que debería ser el mismo para SQL 2008

+7

+1 para ti! No sé por qué las personas tienden a ignorar la pregunta y a tratarte como a un bebé (por ejemplo, esas respuestas "No hagas esto porque es peligroso"). Recibo SAMPLE y TEST DB de clientes. Solo necesito un acceso temporal a sus datos. ¡A veces tienen un archivo LDF de 40 o 50 Gb! No me importa restaurar este DB, ¡solo necesito deshacerme de esos 40 Gb en mi HDD! – Alexandre

22

No se arriesgue a eliminar sus archivos LDF manualmente! Si usted no necesita archivos de transacciones o desea reducirlos a cualquier tamaño que elija, siga estos pasos: (Tenga en cuenta que esto afectará sus copias de seguridad para estar seguro antes de hacerlo)

  1. base de datos de clic derecho
  2. Elija Propiedades
  3. Haga clic en la pestaña 'Opciones'.
  4. Conjunto modelo de recuperación SIMPLE a
  5. A continuación, seleccione la ficha Archivos
  6. Ahora asegúrese de seleccionar el archivo de registro y desplazarse hacia la derecha. En el marco del "crecimiento automático" la partida haga clic en los puntos ....
  7. A continuación, deshabilite crecimiento automático (Esto es opcional y limitará el crecimiento adicional)
  8. A continuación, haga clic en Aceptar y establecer el "Tamaño inicial" para el tamaño que usted desea tener (Establecí el mío en 20MB)
  9. Haga clic en Aceptar para guardar los cambios
  10. Luego, haga clic derecho en el DB nuevamente, y elija "Tareas> Reducir> Base de datos", presione OK.
  11. Ahora comparar sus tamaños de archivo :)
+0

hecho en SQL2008 –

1

La mejor manera de borrar todos los archivos LDF (archivos de registro de transacciones) en todas las bases de datos de MS SQL Server, si todas las bases de datos se copia de seguridad anterior, por supuesto:

USE MASTER 
print '*****************************************' 
print '************ Czyścik LDF ****************' 
print '*****************************************' 

declare 
    @isql varchar(2000), 
    @dbname varchar(64), 
    @logfile varchar(128), 
    @recovery_model varchar(64) 

    declare c1 cursor for 
    SELECT d.name, mf.name as logfile, d.recovery_model_desc --, physical_name AS current_file_location, size 
    FROM sys.master_files mf 
     inner join sys.databases d 
     on mf.database_id = d.database_id 
    --where recovery_model_desc <> 'SIMPLE' 
    and d.name not in ('master','model','msdb','tempdb') 
    and mf.type_desc = 'LOG' 
    and d.state_desc = 'online' 
    open c1 
    fetch next from c1 into @dbname, @logfile, @recovery_model 
    While @@fetch_status <> -1 
     begin 

     print '----- OPERATIONS FOR: ' + @dbname + ' ------' 

     print 'CURRENT MODEL IS: ' + @recovery_model 

     select @isql = 'ALTER DATABASE ' + @dbname + ' SET RECOVERY SIMPLE' 
     print @isql 
     exec(@isql) 
     select @isql='USE ' + @dbname + ' checkpoint' 
     print @isql 
     exec(@isql) 
     select @isql='USE ' + @dbname + ' DBCC SHRINKFILE (' + @logfile + ', 1)' 
     print @isql 
     exec(@isql) 
     select @isql = 'ALTER DATABASE ' + @dbname + ' SET RECOVERY ' + @recovery_model 
     print @isql 
     exec(@isql) 

     fetch next from c1 into @dbname, @logfile, @recovery_model 
     end 
    close c1 
    deallocate c1 

este es un código mejorado, basado en: https://www.sqlservercentral.com/Forums/Topic1163961-357-1.aspx

recomiendo la lectura de este artículo: https://docs.microsoft.com/en-us/sql/relational-databases/backup-restore/recovery-models-sql-server

A veces vale la pena habilitar permanentemente el MODO DE RECUPERACIÓN = SIMPLE en algunas bases de datos y, por lo tanto, deshacerse de los problemas de registro de una vez por todas. Especialmente cuando hacemos una copia de seguridad de los datos (o del servidor) diariamente y los cambios diurnos no son críticos desde el punto de vista de la seguridad.

Cuestiones relacionadas