mercoledì 24 giugno 2009

Shrink del file di log di SQL Server su tutti i database

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.


Nessun commento: