Lavorare con SQL Server non è sempre cosi semplice, se non si conoscono determinati parametri da configurare, si potrebbe incappare in blocchi di servizio. Sopratutto quando lo spazio sul disco a nostra disposizione non è cosi capiente.

Una delle problematiche che si affronta più spesso è quando lo spazio su disco si esaurisce a causa del Transaction log di SQL. Il Transaction log in parole semplici è un log delle operazioni effettuate sul database.  Ogni operazione effettuata in modifica e in inserimento viene tracciata su un file situato in una posizione di default sul disco.

Le cause di questo problema nascono da una gestione approssimativa del sistema SQL. Prima di creare un database sul server bisogna conoscere il tipo di politica da utilizzare per effettuare i backup e la manutenzione e gestire in maniera opportuna spazio fisico e operazioni pianificate.

Il Transaction Log viene salvato per eseguire backup meno invasivi del FULL BACKUP del database che se fosse di 100GB ci impiegherebbe ore e occuperebbe risorse.

Il problema nasce dall’impostazione del Recovery Model di SQL che è sicuramente diverso da SIMPLE oppure non è mai stato effettuato il backup del log con lo shrink dei dati.

A. Se non ci interessa minimamente avere un dettaglio di log cosi alto è consigliabile modificare il Recovery Model a SIMPLE che su SQL 2008 in italiano è (Con registrazione Minima).

B. Ripristinare subito la situazione effettuando lo shrink del log. Questa operazione è molto pericolosa da fare poichè taglia di netto tutti i log esistenti, quindi se non avete già fatto un backup recente fate molta attenzione.

Questo è il comando da utilizzare per effettuare il taglio dei log:

4
5
6
7
USE NomeMioDatabase;
GO
DBCC SHRINKFILE (NomelogicoFile_Log, 20);
GO

Il numero “20” è a libera scelta, indica la dimensione in MB che avrà il file una volta avviato il comando. Ovviamente se vi trovate su ambienti di esercizio e avete un database da diversi GB, vi consiglio di effettuare un backup anche se dovesse durare 2 giorni.

Quindi ricordatevi che il transaction log è un ulteriore protezione in caso di perdita dei dati oltre al backup full del database. Prima di:  “Create Database”, mettetevi a tavolino e in base alle risorse del vostro server pianificate una strategia di backup e di disaster recovery.

UPDATE SQL SERVER 2008:

10
11
12
13
14
15
USE [tuodatabase]
GO
ALTER DATABASE [tuodatabase] SET RECOVERY SIMPLE WITH NO_WAIT
DBCC SHRINKFILE(file_logico_db_log, 1)
ALTER DATABASE [tuodatabase] SET RECOVERY FULL WITH NO_WAIT
GO