Panoramica del log delle transazioni

Ogni database di SQL Server 2005 include un log delle transazioni in cui vengono archiviate tutte le transazioni e le modifiche apportate dalle transazioni stesse al database. Il log delle transazioni è un componente fondamentale del database e, in caso di errore di sistema, può essere necessario per ripristinare la consistenza del database. Il log delle transazioni non dovrebbe mai essere eliminato o spostato, a meno che non vi sia la piena consapevolezza delle conseguenze di tale operazione.

Operazioni supportate dal log delle transazioni

Il log delle transazioni supporta le operazioni seguenti:

  • Recupero di singole transazioni.

  • Recupero di tutte le transazioni incomplete all'avvio di SQL Server.

  • Rollforward di una pagina, file, filegroup o database ripristinato fino al punto in cui si è verificato l'errore.

  • Supporto della replica transazionale.

  • Supporto di soluzioni con server di standby.

Recupero di singole transazioni

Se un'applicazione esegue un'istruzione ROLLBACK oppure se in Motore di database viene rilevato un errore quale la perdita della comunicazione con un client, vengono utilizzati i record del log per eseguire il rollback delle modifiche apportate da una transazione incompleta.

Recupero di tutte le transazioni incomplete all'avvio di SQL Server

Se si verifica un errore in un server che esegue SQL Server, è possibile che alcune modifiche ai database non siano state scritte dalla cache buffer ai file di dati e che transazioni incomplete abbiano apportato modifiche al file di dati. All'avvio di un'istanza di SQL Server, vengono recuperati i singoli database. Viene quindi eseguito il rollforward di tutte le modifiche registrate nel log che potrebbero non essere state scritte nei file di dati. A questo punto, per salvaguardare l'integrità del database, viene eseguito il rollback di tutte le transazioni incomplete rilevate nel log delle transazioni.

Rollforward di una pagina, file, filegroup o database ripristinato fino al punto in cui si è verificato l'errore

Dopo un errore hardware o del disco che interessa i file del database, è possibile ripristinare il database fino al punto in cui si è verificato l'errore. Questo metodo prevede innanzitutto il ripristino dell'ultimo backup completo del database e dell'ultimo backup differenziale del database e quindi il ripristino della sequenza successiva dei backup del log delle transazioni fino al momento in cui si è verificato l'errore. Durante il ripristino di ogni backup del log, Motore di database riapplica tutte le modifiche registrate nel log per eseguire il rollforward di tutte le transazioni. Dopo il ripristino dell'ultimo backup del log, Motore di database utilizza le informazioni disponibili nel log per eseguire il rollback di tutte le transazioni non ancora completate al momento dell'esecuzione di tale backup.

Supporto della replica transazionale

L'agente di lettura log esegue il monitoraggio del log delle transazioni di tutti i database configurati per la replica transazionale e copia le transazioni contrassegnate per la replica dal log delle transazioni al database di distribuzione. Per ulteriori informazioni, vedere Funzionamento della replica transazionale.

Supporto di soluzioni con server di standby.

Le soluzioni con server di standby, il mirroring del database e il log shipping sono basati in modo significativo sul log delle transazioni. In uno scenario di log shipping il server primario invia il log delle transazioni attivo del database primario a una o più destinazioni. I singoli server secondari ripristinano il log nei relativi database secondari locali. Per ulteriori informazioni, vedere Panoramica del log shipping.

In uno scenario di mirroring del database tutti gli aggiornamenti di un database, ovvero quello principale, vengono immediatamente riprodotti in una copia distinta e completa del database, ovvero quello mirror. L'istanza del server principale invia immediatamente i singoli record di log all'istanza del server mirror, che applica i record ricevuti nel database mirror, eseguendone continuamente il rollforward. Per ulteriori informazioni, vedere Panoramica del mirroring del database.

Caratteristiche del log delle transazioni

Di seguito sono riportate le caratteristiche del log delle transazioni di Motore di database di SQL Server:

  • Il log delle transazioni viene implementato come file o set di file distinto nel database. La cache del log viene gestita separatamente dalla cache buffer per le pagine di dati e, pertanto, produce codice semplice, rapido e affidabile in Motore di database.

  • Il formato dei record e delle pagine del log non deve essere necessariamente conforme al formato delle pagine di dati.

  • Il log delle transazioni può essere implementato in diversi file, definiti in modo da espandersi automaticamente tramite l'impostazione del valore FILEGROWTH per il log. In questo modo è possibile ridurre le probabilità che si esaurisca lo spazio nel log delle transazioni e, nel contempo, alleggerire l'overhead amministrativo. Per ulteriori informazioni, vedere ALTER DATABASE (Transact-SQL).

  • Il meccanismo che permette di riutilizzare lo spazio nei file di log è rapido e produce effetti minimi sulla velocità effettiva delle transazioni.