Chi usa SQL Server sa che un problema che spesso si presenta è la crescita enorme e spropositata dei transaction log (file .ldf).
Il metodo più veloce per ridurre il transaction log (ma anche il più drastico, in quanto di fatto lo tronca) è quello di effettuarne lo shrink.
Ma se su un server ci sono N database, un povero DBA dovrebbe ripetere l'istruzione per N volte. Per questo motivo ho creato questo script che permette di farlo in automatico per tutti i database presenti sul server.
EXECUTE sp_msforeachdb
'USE ?;
DUMP TRANSACTION ? WITH NO_LOG;
DECLARE @LogLogicalName nvarchar(100);
SELECT @LogLogicalName = file_name(2);
DBCC SHRINKFILE(@LogLogicalName, 100);'
sp_msforeachdb: è una stored procedure microsoft non documentata che permette di eseguire codice T-SQL su tutti i database presenti su un server.
?: è il nome del database restituito dalla stored procedure.
file_name(2): è una funzione che restituisce il nome logico del file di log del database.
AGGIORNAMENTO: Script per SQL Server 2008