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.


mercoledì 3 giugno 2009

Disabilitare un bottone dopo il click (Asp.Net)

Per disabilitare un bottone dopo il click, in modo che un utente "distratto" (per così dire) non ri-clicchi prima che si sia completata l'operazione, bisogna utilizzare javascript.
Il problema è che, utilizzando la funzione javascript per disabilitarlo, viene tolta al bottone la funzionalità di postback, e quindi di fatto la generazione dell'evento.

Per bypassare questo problema, si utilizza il codice seguente, da inserire nell'evento Page Load:

Me.btn.Attributes("onclick") = "this.disabled = true; " & Page.GetPostBackEventReference(btnSub).ToString

In cui btn è l'id del bottone e btnSub è la routine che normalmente è associata all'evento btn.Click