En SQL Server (2008 en este caso), ¿cómo puedo reducir rápidamente todos los archivos, tanto de registro como de datos, para todas las bases de datos en una instancia? Podría pasar por SSMS y hacer clic derecho en cada uno y elegir Tareas -> Reducir, pero estoy buscando algo más rápido.
Escribí algunas secuencias de comandos "Crear base de datos" y olvidé que tenían tamaños de globo por defecto, y no necesito tanto espacio reservado para estos archivos en este proyecto.
fuente
SELECT 'USE [' + d.name + N']' + CHAR(13) + CHAR(10) + 'DBCC SHRINKFILE (N''' + mf.name + N''' , 0, TRUNCATEONLY)' + CHAR(13) + CHAR(10) + CHAR(13) + CHAR(10) FROM sys.master_files mf JOIN sys.databases d ON mf.database_id = d.database_id WHERE d.database_id > 4
Pero descubrir eso me dio un nuevo problema. Desactivado para publicar otra pregunta.¿Qué tal una sola línea de instrucción SQL?
Lea esta publicación de blog muy interesante antes de ejecutar la siguiente declaración SQL.
fuente
DBCC SHRINKDB (y su primo SHRINKFILE) son extremadamente lentos, porque hay una gran ejecución de subprocesos en ese código.
Una forma mucho más rápida de reducir un archivo de base de datos es esta:
sp_spaceused
para determinar qué tan grande)Debido a que las reconstrucciones de índices son masivamente paralelas, esta técnica a menudo resulta en una reducción mucho más rápida de la base de datos. Por supuesto, requiere que tenga un poco de espacio extra para el nuevo grupo de archivos mientras el proceso continúa. Sin embargo, solo necesita suficiente espacio en el nuevo grupo de archivos para contener el grupo de archivos más grande de la instancia (ya que recuperará espacio a medida que avance).
Esta técnica también tiene el beneficio adicional de desfragmentar sus índices en el proceso.
fuente
Ajusté un poco la consulta para reducir solo el LOG como se solicita:
fuente
En el siguiente código, obtenga una lista de bases de datos que no sean del sistema, configure la base de datos como de solo lectura y luego reduzca el archivo. He guardado este código en algunos cuadros de SQL Server usando SQL Agent Job, donde el espacio siempre es un problema. Los sábados y domingos por la noche, cada semana, comienza a ejecutarse y reduce todas las bases de datos en pocas horas (dependiendo del tamaño de las bases de datos).
fuente
Reducir todos los archivos de registro excepto maestro, modelo, msdb:
fuente
Éste extiende la respuesta anterior, usando un cursor para recorrer las sentencias SQL una por una. No es tan corto como la respuesta de Emrah, pero permite una lógica adicional dentro del ciclo while dentro del cursor.
fuente
Podemos repetir
SHRINKDB
ySHRINKFILE
para todas las bases de datos dinámicamente:Puedes encontrar detalles en este artículo .
fuente