MSSQL Spazio Disco

Da Emigar.
Versione del 13 lug 2026 alle 09:18 di WikiSysop (discussione | contributi) (Creata pagina con "<pre> 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_S...")
(diff) ← Versione meno recente | Versione attuale (diff) | Versione più recente → (diff)
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