Realmente nunca se recomienda una reorganización y reducción.
Si puede quitar las aplicaciones que la base de datos sirve fuera de línea, puede acelerar el proceso y reducir la fragmentación del índice eliminando todos los índices y las restricciones de clave principal / externa antes de la reducción (esto significará que hay menos datos para mover, ya que solo las páginas de datos se barajarán, no las páginas de índice que ahora no existen, acelerando el proceso) y luego se recrearán todos los índices y claves.
Volver a crear los índices después del encogimiento significa que no deben fragmentarse significativamente, y que desaparezcan durante el encogimiento significa que reconstruirlos no dejará muchos pequeños "agujeros" en la asignación de páginas dentro de los archivos que pueden invitar a la fragmentación más adelante.
Otra opción si puede desconectar las aplicaciones es migrar todos los datos a una nueva base de datos de la misma estructura. Si su proceso de compilación es sólido, debería poder compilar esa base de datos en blanco rápidamente, si no crear una desde la base de datos actual (restaurar una copia de seguridad de la actual, truncar / eliminar todo el contenido de las tablas y realizar una reducción completa).
Es posible que aún desee eliminar todos los índices en el destino y volver a crearlos después, ya que esto puede ser mucho más eficiente al cambiar una gran cantidad de datos indexados (100% de ellos en este caso). Para acelerar el proceso de copia, tenga los archivos de datos de la base de datos de destino en diferentes unidades físicas a la fuente (a menos que esté utilizando SSD, en cuyo caso no necesita preocuparse por reducir los movimientos de la cabeza), puede moverlos a la ubicación de origen cuando haya terminado.
Además, si crea el destino como nuevo (en lugar de borrar una copia de la fuente) créelo con un tamaño inicial que contendrá todos los datos actuales más algunos meses de crecimiento, lo que hará que los datos se copien un poco más rápido nuevamente. no asignará nuevo espacio de vez en cuando durante todo el proceso.
Esto podría ser mejor que usar la reducción porque la migración de los datos a una nueva base de datos replica la acción prevista de la operación de reducción, pero potencialmente con mucha menos fragmentación (que es la consecuencia no intencional de una reorganización y reducción). Un encogimiento simplemente toma bloques cerca del final del archivo y los coloca en el primer espacio más cerca del comienzo sin hacer ningún esfuerzo por mantener juntos los datos relacionados.
Sospecho que el resultado también será más eficiente en cuanto al espacio, ya que es probable que después haya páginas menos utilizadas. Un encogimiento solo moverá páginas parcialmente utilizadas, es más probable que mover los datos dé como resultado páginas completas, especialmente si inserta en el destino en el orden de la clave / índice agrupado de una tabla (donde una tabla tiene uno) y crea otros índices después de que todos los datos hayan migrado.
Por supuesto, si no puedes desconectar las aplicaciones, solo realizar una reducción es tu única opción, así que si realmente necesitas recuperar el espacio, ve con eso. Dependiendo de sus datos, patrones de acceso, tamaño de conjunto de trabajo común, cuánta RAM tiene el servidor, etc., la fragmentación interna adicional puede no ser tan significativa al final.
Para la operación de copia, SSIS o T-SQL base funcionarían igual de bien (la opción SSIS podría ser menos eficiente, pero potencialmente más fácil de mantener más adelante). Si crea las relaciones FK al final junto con los índices, puede hacer un simple "para cada tabla, copiar" en cualquier caso. Por supuesto, para una única vez, una reducción / reorganización probablemente también esté bien, ¡pero me gusta asustar a las personas para que nunca consideren reducciones regulares! (He conocido personas que los programan a diario).