transacciones - ¿Cómo eliminar el archivo.ldf de SQL Server 2008?
sql server 2008 shrink database (6)
Gracias por adelantado
Si detengo el servidor SQL y luego borro el archivo .LDF (archivo de registro de transacciones) a la base de datos, ¿qué sucederá? ¿Se marcará la base de datos como sospechosa o el servidor SQL simplemente creará una nueva automáticamente? SQL Server 2008 R2 y el tamaño de mi archivo .LDF es demasiado grande, así que cómo administrarlo, ya sea que pueda reducirlo o eliminarlo por favor en el formulario de consulta
Gracias
¡No debe eliminar ninguno de los archivos de la base de datos ya que puede dañar gravemente su base de datos!
Si se queda sin espacio en el disco, es posible que desee dividir su base de datos en varias 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 cambia el modo de recuperación de completo a simple, usando los siguientes comandos:
ALTER DATABASE myDatabase SET RECOVERY SIMPLE
DBCC SHRINKDATABASE (myDatabase , 5)
También es posible volver a la recuperación completa:
ALTER DATABASE myDatabase SET RECOVERY FULL
Actualización sobre SHRINKDATABASE , o lo que no sabía al responder esta pregunta:
Aunque el método anterior elimina algunos espacios no utilizados, tiene algunas desventajas importantes en los archivos de base de datos (MDF): dañará sus índices al fragmentarlos y empeorar el rendimiento de su base de datos. Por lo tanto, debe reconstruir los índices para deshacerse de la fragmentación que causó el comando shrink.
Si desea reducir solo el archivo de registro, es posible que desee usar SHRINKFILE lugar. Copié 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
¡No se arriesgue a borrar sus archivos LDF manualmente! Si no necesita archivos de transacción o desea reducirlos a cualquier tamaño que elija, siga estos pasos: (Tenga en cuenta que esto afectará sus copias de seguridad, así que asegúrese de hacerlo antes de hacerlo)
- Haga clic derecho en la base de datos
- Elegir propiedades
- Haga clic en la pestaña ''Opciones''.
- Establecer modelo de recuperación en SIMPLE
- A continuación, elija la pestaña ARCHIVOS
- Ahora asegúrese de seleccionar el archivo LOG y desplácese hacia la derecha. Bajo el encabezado "Crecimiento automático", haga clic en los puntos ....
- Luego deshabilite el crecimiento automático (esto es opcional y limitará el crecimiento adicional)
- Luego haga clic en Aceptar y configure el "Tamaño inicial" al tamaño que desea tener (yo configuro el mío en 20MB)
- Haga clic en OK para guardar los cambios.
- Luego haga clic con el botón derecho nuevamente en la base de datos y seleccione "Tareas> Reducir> Base de datos", presione Aceptar.
- Ahora compara el tamaño de tus archivos! :)
Como puede leer los comentarios, no es una buena solución eliminar el registro. Pero si está seguro de no perder nada, simplemente puede cambiar el modo de recuperación de su base de datos a simple y luego usar
DBCC shrinkdatabase (''here your database name'')
para borrar su registro.
Lo peor que puedes hacer es eliminar el archivo de registro del disco. Si su servidor tuvo transacciones sin terminar en el momento de la detención del servidor, esas transacciones no se revertirán después del reinicio y obtendrá datos dañados.
Debe hacer una copia de seguridad de su registro de transacciones, entonces habrá espacio libre para reducirlo. Cambiar al modo simple y luego reducirlo significa que perderá todos los datos de la transacción que serían útiles en el caso de una restauración.
La mejor manera de borrar TODOS los archivos ldf (archivos de registro de transacciones) en todas las bases de datos en el servidor MS SQL, SI todas las bases de datos se respaldaron antes, 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 leer 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 = SENCILLO en algunas bases de datos y, por lo tanto, deshacerse de los problemas de registro de una vez por todas. Especialmente cuando realizamos una copia de seguridad de los datos (o el servidor) a diario y los cambios durante el día no son críticos desde el punto de vista de la seguridad.
Lo hice por
- Desacoplar la base de datos (incluir Drop Connections)
- Eliminar el archivo * .ldf
- Adjunte la base de datos, pero elimine el archivo * .ldf esperado
Lo hice para 4 bases de datos diferentes en SQL 2012, debería ser el mismo para SQL 2008