Solución:
Cuando haces “Tareas -> Reducir” de la GUI, en realidad emite un DBCC SHRINKDATABASE
comando detrás de escena. Intentalo. Cuando aparezca el cuadro de diálogo, no haga clic en el botón “Aceptar”. En su lugar, haga clic en el botón “Script”. Verá el comando en una ventana de consulta. Combine eso con una consulta en sys.databases (omita master y msdb), y puede crear un script para reducir todas las bases de datos.
Por ejemplo (tomado del comentario de jcolebrand):
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;
Copie el resultado de esa consulta y ejecútelo para reducir todos sus archivos.
¿Qué tal una sola línea de declaración SQL?
Por favor lee esta entrada de blog muy interesante antes de ejecutar la siguiente declaración sql.
EXEC sp_MSForEachDB 'DBCC SHRINKDATABASE (''?'' , 0)'
DBCC SHRINKDB (y su primo SHRINKFILE) son extremadamente lentos, porque hay una gran cantidad de ejecución de un solo subproceso en ese código.
Una forma mucho más rápida de reducir un archivo de base de datos es esta:
- Asignar un nuevo grupo de archivos a la base de datos
- Haga que este grupo de archivos sea tan grande como debe ser (use
sp_spaceused
para determinar qué tan grande) - Reconstruir todos los índices para este nuevo grupo de archivos
- Suelta el grupo de archivos antiguo
Debido a que las reconstrucciones de índices son masivamente paralelas, esta técnica a menudo da como resultado una reducción mucho más rápida de la base de datos. Por supuesto, requiere que tenga un poco de espacio adicional para el nuevo grupo de archivos mientras se desarrolla el proceso. Sin embargo, solo necesita suficiente espacio en el nuevo grupo de archivos para contener el grupo de archivos más grande en la instancia (ya que estará recuperando espacio a medida que avanza).
Esta técnica también tiene el beneficio adicional de desfragmentar sus índices en el proceso.