Todos los artículos sobre SHRINKDATABASE empiezan diciendo la tontería de que no debes hacerlo y bla, bla, bla.
Si como yo, das soporte a bases de datos SQL Server, cuando el cliente te llama es porque es necesario achivarla y punto. Todo lo demás, no tiene sentido.
Lo más comun es encontrarme con varias bases de datos de SharePoint con LOGS de decenas de GB. Así que desarrollé este Script para hacerlo lo más rápido y eficiente posible. Y con downtime (tiempo fuera de línea). La cruda realidad es que hacerlo sin downtime es casi imposible.
USE WSS_Logging_PROD
go
ALTER DATABASE WSS_Logging_PROD SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
GO
BACKUP LOG WSS_Logging_PROD TO DISK = N’C:\Program Files\Microsoft SQL Server\MSSQL14.TCSQLCST01SP\MSSQL\Backup\WSS_Logging_PROD.bak’ WITH NOFORMAT, NOINIT, NAME = N’WSS_Logging_PROD-Full Database Backup’, SKIP, NOREWIND, NOUNLOAD, STATS = 10
GO
SELECT TYPE_DESC, NAME, size, max_size, growth, is_percent_growth
FROM sys.database_files;
DBCC SHRINKFILE (1, 10);
GO
DBCC SHRINKFILE (2, 1)
GO
SELECT TYPE_DESC, NAME, size, max_size, growth, is_percent_growth
FROM sys.database_files;
ALTER DATABASE WSS_Logging_PROD SET MULTI_USER
GO