Architettura logica del log delle transazioni

Il log delle transazioni di SQL Server funziona in modo logico come se si trattasse di una stringa di record di log. Ogni record di log è identificato da un numero di sequenza del file di log (LSN). Ogni nuovo record di log viene scritto nell'estremità finale logica del log con un LSN maggiore di quello del record precedente.

I record di log vengono archiviati in sequenza man mano che vengono creati. Ogni record di log contiene l'ID della transazione a cui appartiene. Tutti i record di log associati a ogni transazione sono collegati singolarmente in una catena tramite puntatori ai record precedenti che consentono di eseguire più rapidamente il rollback della transazione.

Nei record di log relativi alle modifiche dei dati vengono registrate le operazioni logiche eseguite oppure immagini dei dati precedenti e successive alla modifica. Un'immagine precedente la modifica è una copia dei dati eseguita prima dell'operazione, mentre un'immagine successiva alla modifica è una copia dei dati eseguita dopo l'operazione.

La procedura necessaria per recuperare un'operazione varia a seconda del tipo di record di log:

  • Operazione logica registrata

    • Per eseguire il rollforward dell'operazione logica, questa viene eseguita nuovamente.

    • Per eseguire il rollback dell'operazione logica, questa viene eseguita al contrario.

  • Immagine precedente e successiva (alla modifica dei dati) registrata

    • Per eseguire il rollforward dell'operazione, viene applicata l'immagine successiva.

    • Per eseguire il rollback dell'operazione, viene applicata l'immagine precedente.

Nel log delle transazioni vengono registrati molti tipi di operazioni, tra cui:

  • L'inizio e la fine di ogni transazione.

  • Tutte le modifiche apportate ai dati, ovvero inserimento, aggiornamento o eliminazione, comprese le modifiche apportate da stored procedure di sistema o istruzioni DDL (Data Definition Language) a qualsiasi tabella, incluse le tabelle di sistema.

  • Tutte le allocazioni o deallocazioni di pagina e di extent.

  • Operazioni di creazione o eliminazione di una tabella o di un indice.

Nel log vengono registrate anche le operazioni di rollback. Ogni transazione riserva una determinata quantità di spazio nel log delle transazioni per garantire che nel log sia disponibile spazio sufficiente per supportare un rollback causato da un'istruzione di rollback esplicita o dal verificarsi di un errore. La quantità di spazio riservata varia in base alle operazioni eseguite nella transazione, ma in genere equivale alla quantità di spazio utilizzata per registrare nel log ogni operazione. Lo spazio riservato viene liberato al completamento della transazione.

La sezione del file di log dal primo record di log che deve essere presente per garantire la corretta esecuzione del rollback a livello di database all'ultimo record di log scritto è definita la parte attiva del log, detta anche log attivo. Questa sezione del log è necessaria per eseguire il recupero completo del database. Non è possibile troncare nessuna parte del log attivo.