Troncamento del log delle transazioni
Data aggiornamento: 15 settembre 2007
Se dal log delle transazioni non vengono mai eliminati record, viene infine riempito tutto lo spazio su disco disponibile per i file di log fisici. Il troncamento del log libera automaticamente spazio su disco che può essere riutilizzato dal log delle transazioni.
Tranne quando viene posticipato per qualche motivo, il troncamento del log si verifica automaticamente nel modo seguente:
- Nel modello di recupero con registrazione minima, dopo un checkpoint.
- Nel modello di recupero con registrazione completa o nel modello di recupero con registrazione minima delle transazioni di massa, se si è verificato un checkpoint dall'ultimo backup. Per ulteriori informazioni, vedere "Troncamento del log con modelli di recupero con registrazione completa e con registrazione minima delle transazioni di massa" di seguito in questo argomento.
Anche se automatico, il troncamento del log può essere ritardato da una varietà di fattori. Per informazioni sui fattori che possono ritardare il troncamento del log, vedere Fattori che possono ritardare il troncamento del log.
Importante: |
---|
In caso di un ritardo prolungato nel troncamento del log, il log delle transazioni potrebbe riempirsi. Per informazioni sulla gestione di un log delle transazioni pieno, vedere Risoluzione dei problemi relativi a un log delle transazioni pieno (Errore 9002). |
Per informazioni relative all'architettura del troncamento del log, vedere "Funzionamento del troncamento del log" più avanti in questo argomento.
Troncamento del log con modelli di recupero con registrazione completa e con registrazione minima delle transazioni di massa
Nel modello di recupero con registrazione completa o nel modello di recupero con registrazione minima delle transazioni di massa, la parte inattiva del log non può essere troncata finché tutti i record del log non sono stati acquisiti in un backup del log. Ciò è necessario per la gestione della catena di log, una serie di record di log con una sequenza non interrotta di numeri di numeri di sequenza del file di log (LSN). Il log verrà troncata quando si esegue il backup del log delle transazioni, presupponendo le condizioni seguenti:
- Si è verificato un checkpoint dall'ultimo backup del log. Un checkpoint è essenziale ma non è sufficiente per il troncamento del log nel modello di recupero con registrazione completa o nel modello di recupero con registrazione minima delle transazioni di massa. Dopo un checkpoint, il log resta intatto almeno fino al successivo backup del log delle transazioni.
Per ulteriori informazioni, vedere Relazione tra i checkpoint e la parte attiva del log. - Nessun altro fattore impedisce il troncamento del log.
In genere, tramite l'esecuzione di backup regolari, lo spazio del log viene costantemente liberato per poter essere nuovamente utilizzato. Tuttavia altri fattori, tra cui una transazione a esecuzione prolungata, possono impedire il troncamento del log. Per ulteriori informazioni, vedere Fattori che possono ritardare il troncamento del log. - L'istruzione BACKUP LOG non specifica WITH NO_TRUNCATE, WITH NO_LOG o WITH COPY_ONLY.
Importante: Le opzioni NO_LOG e TRUNCATE_ONLY dell'istruzione BACKUP LOG rompono la catena di log, perché rimuovono la parte inattiva del log senza crearne una copia di backup. Il database rimane infatti non protetto da errori dei supporti fino al successivo backup completo o differenziale. Questa funzionalità verrà rimossa a partire dalla prossima versione di Microsoft SQL Server. Non utilizzare questa funzionalità in un nuovo progetto di sviluppo e modificare appena possibile le applicazioni in cui questa funzionalità viene utilizzata.
Per eseguire il backup del log delle transazioni
- Procedura: Esecuzione del backup di un log delle transazioni (SQL Server Management Studio)
- Procedura: Creazione di un backup del log delle transazioni (Transact-SQL)
Funzionamento del troncamento del log
[!NOTA] Il troncamento non riduce le dimensioni del file di log fisico, La riduzione delle dimensioni fisiche di un file di log richiede la compattazione del file. Per informazioni sulla compattazione del file di log fisico, vedere Compattazione del log delle transazioni.
Il log delle transazioni è un file circolare. Quando viene creato il database, il file di log logico comincia all'inizio del file di log fisico. Vengono aggiunti nuovi record di log alla fine del log logico, che si espandono verso la fine del log fisico. Il log delle transazioni di un database viene mappato su uno o più file fisici. In Motore di database di SQL Server ogni file di log fisico viene diviso internamente in diversi file di log virtuali. Il troncamento del log libera spazio nel log logico eliminando file del log virtuale inattivi dall'inizio del log logico. Per informazioni più dettagliate sull'architettura del log delle transazioni, vedere Architettura logica del log delle transazioni e Architettura fisica del log delle transazioni.
che rappresentano l'unità di spazio riutilizzabile. Solo i file di log virtuali che contengono esclusivamente record di log inattivi possono essere troncati. La parte attiva del log delle transazioni, ossia il log attivo, non può essere troncata poiché è richiesta per il recupero del database. Il checkpoint più recente definisce il log attivo. Il log può essere troncato fino a tale checkpoint.
[!NOTA] Per informazioni sul funzionamento dei file di log virtuali, vedere Architettura fisica del log delle transazioni.
Quando viene eseguito il checkpoint, la parte inattiva del log delle transazioni viene contrassegnata come riutilizzabile. Successivamente, tale parte inattiva potrà essere liberata mediante il troncamento del log. Il troncamento libera i file di log virtuali inattivi per il riutilizzo. Quando viene scritto un nuovo record in un log virtuale liberato, tale file di log virtuale diventa nuovamente attivo.
Una delle informazioni registrate in un checkpoint è il numero di sequenza del file di log (LSN) del primo record del log che deve essere disponibile per poter eseguire correttamente il rollback a livello di database. Questo numero LSN è denominato LSN minimo del recupero (MinLSN). L'inizio della parte attiva del log è il log virtuale che contiene il numero MinLSN. Quando un log delle transazioni viene troncato, solo i record del log che precedono questo file di log virtuale vengono liberati per il riutilizzo.
Nelle figure seguenti viene illustrato un log delle transazioni prima e dopo il troncamento. Nella prima figura viene illustrato un log delle transazioni che non è mai stato troncato. Attualmente, il log logico utilizza quattro file di log virtuali. Il log logico inizia prima del primo file di log virtuale e termina al log virtuale 4. Il record MinLSN si trova nel log virtuale 3. I log virtuali 1 e 2 contengono solo record di log inattivi. Questi record possono essere troncati. Il log virtuale 5 è ancora inutilizzato e non fa parte del log logico corrente.
Nella seconda figura è illustrata la struttura del log dopo il troncamento. I log virtuali 1 e 2 sono stati liberati per il riutilizzo. Il log logico ora inizia all'inizio del log virtuale 3. Il log virtuale 5 è ancora inutilizzato e non fa parte del log logico corrente.
Vedere anche
Concetti
Relazione tra i checkpoint e la parte attiva del log
Impostazione delle opzioni di database
Utilizzo dei backup del log delle transazioni
Scelta del modello di recupero per un database
Panoramica dei modelli di recupero
Altre risorse
BACKUP (Transact-SQL)
Truncate Method
Guida in linea e informazioni
Cronologia modifiche
Versione | Cronologia |
---|---|
15 settembre 2007 |
|
14 aprile 2006 |
|