MSSQL Spazio Disco
Jump to navigation
Jump to search
SET NOCOUNT ON;
DECLARE @DbName NVARCHAR(255);
DECLARE @LogFileName NVARCHAR(255);
DECLARE @SQL NVARCHAR(MAX);
DECLARE db_cursor CURSOR FOR
SELECT d.name, f.name
FROM sys.databases d
JOIN sys.master_files f ON d.database_id = f.database_id
WHERE f.type = 1
AND d.name NOT IN ('master', 'model', 'msdb', 'tempdb')
AND d.state_desc = 'ONLINE'; -- Lavoriamo solo su DB online
OPEN db_cursor;
FETCH NEXT FROM db_cursor INTO @DbName, @LogFileName;
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT 'Tentativo di shrink per il database: ' + @DbName;
-- Eseguiamo il checkpoint per forzare il flush delle pagine
SET @SQL = 'USE [' + @DbName + ']; CHECKPOINT;';
EXEC sp_executesql @SQL;
-- Eseguiamo lo shrink del file di log
-- Non forziamo 1MB, lasciamo che SQL decida quanto è effettivamente restringibile
SET @SQL = 'USE [' + @DbName + ']; DBCC SHRINKFILE (''' + @LogFileName + ''');';
EXEC sp_executesql @SQL;
FETCH NEXT FROM db_cursor INTO @DbName, @LogFileName;
END
CLOSE db_cursor;
DEALLOCATE db_cursor;
GO