Log delle transazioni (SQL Server)
Ogni database di SQL Server include un log delle transazioni in cui vengono archiviate tutte le transazioni e le modifiche apportate dalle transazioni stesse al database. Per evitarne il riempimento, il log delle transazioni deve essere troncato regolarmente. Tuttavia, alcuni fattori possono posticipare il troncamento del log, pertanto è importante monitorare le dimensioni del log. Ad alcune operazioni può essere applicata la registrazione minima per ridurre l'impatto sulle dimensioni del log delle transazioni.
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 deve mai essere eliminato o spostato, a meno che non vi sia la piena consapevolezza delle conseguenze di tale operazione.
[!NOTA]
I checkpoint rappresentano i punti ottimali noti da cui avviare l'applicazione dei log delle transazioni durante il ripristino del database. Per ulteriori informazioni, vedere Checkpoint di database (SQL Server).
Contenuto dell'argomento:
Vantaggi: operazioni supportate dal log delle transazioni
Troncamento del log delle transazioni
Fattori che possono posticipare il troncamento del log
Operazioni per cui è possibile eseguire la registrazione minima
Attività correlate
Vantaggi: 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 delle soluzioni di ripristino di emergenza e disponibilità elevata: Gruppi di disponibilità AlwaysOn, mirroring del database e log shipping.
[[Torna all'inizio]]
Troncamento del log delle transazioni
Il troncamento del log libera spazio nel file di log per consentirne il riutilizzo da parte del log delle transazioni. Il troncamento del log è essenziale per evitare il riempimento del log. Il troncamento del log elimina i file di log virtuali inattivi dal log delle transazioni logico di un database di SQL Server, liberando spazio nel log logico per il riutilizzo da parte del log delle transazioni fisico. Se un log delle transazioni non viene mai troncato, è possibile che le sue dimensioni aumentino fino a occupare tutto lo spazio su disco allocato ai file di log fisici.
Per evitare questo problema, il troncamento si verifica automaticamente dopo gli eventi riportati di seguito, a meno che tale operazione non sia stata posticipata per un qualche motivo:
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 operazioni bulk, se si è verificato un checkpoint dal backup precedente, il troncamento si verifica dopo un backup del log (a meno che non si tratti di un backup del log di sola copia).
Per ulteriori informazioni, vedere Fattori che possono posticipare il troncamento del log più avanti in questo argomento.
[!NOTA]
Il troncamento del log non riduce le dimensioni del file di log fisico. Per ridurre le dimensioni fisiche di un file di log fisico, è necessario compattare il file di log. Per informazioni sulla compattazione del file di log fisico, vedere Gestione delle dimensioni del file di log delle transazioni.
[Inizio pagina]
Fattori che possono posticipare il troncamento del log
Quando i record del log rimangono attivi per molto tempo il troncamento viene posticipato e il log delle transazioni potrebbe riempirsi.
Importante |
---|
Per informazioni sulla gestione di un log delle transazioni pieno, vedere Risolvere i problemi relativi a un log delle transazioni completo (Errore di SQL Server 9002). |
Il troncamento del log può essere posticipato da diversi fattori. Per individuare l'eventuale condizione che impedisce il troncamento del log, eseguire una query sulle colonne log_reuse_wait e log_reuse_wait_desc della vista del catalogo sys.databases. Nella tabella seguente vengono descritti i valori di queste colonne.
log_reuse_wait value |
valore log_reuse_wait_desc |
Descrizione |
---|---|---|
0 |
NOTHING |
Attualmente vi sono uno o più file di log virtuali riutilizzabili. |
1 |
CHECKPOINT |
Non si è verificato alcun checkpoint dall'ultimo troncamento del log oppure l'inizio del log non è stato ancora spostato oltre un file di log virtuale. (Tutti i modelli di recupero) Si tratta di una motivazione comune per il posticipo del troncamento del log. Per ulteriori informazioni, vedere Checkpoint di database (SQL Server). |
2 |
LOG_BACKUP |
È necessario eseguire un backup del log prima del troncamento del log delle transazioni. (Solo modelli di recupero con registrazione completa e con registrazione minima delle operazioni bulk) Quando il backup del log successivo viene completato, parte dello spazio del log potrebbe divenire riutilizzabile. |
3 |
ACTIVE_BACKUP_OR_RESTORE |
È in esecuzione un processo di backup o ripristino dei dati (tutti i modelli di recupero). Se il troncamento del log è impedito da un backup dei dati, l'annullamento del backup può risolvere il problema immediato. |
4 |
ACTIVE_TRANSACTION |
Una transazione è attiva (tutti i modelli di recupero).
|
5 |
DATABASE_MIRRORING |
Il mirroring del database è sospeso o in modalità a prestazioni elevate, il database mirror è notevolmente in ritardo rispetto al database principale. (Solo modello di recupero con registrazione completa) Per ulteriori informazioni, vedere Mirroring del database (SQL Server). |
6 |
REPLICATION |
Durante le repliche transazionali, le transazioni significative per le pubblicazioni non sono ancora state recapitate al database di distribuzione. (Solo modello di recupero con registrazione completa) Per informazioni sulla replica transazionale, vedere Replica di SQL Server. |
7 |
DATABASE_SNAPSHOT_CREATION |
Viene creato uno snapshot del database. (Tutti i modelli di recupero) Si tratta di una motivazione comune, e generalmente di breve durata, per il posticipo del troncamento del log. |
8 |
LOG_SCAN |
È in corso un'analisi del log. (Tutti i modelli di recupero) Si tratta di una motivazione comune, e generalmente di breve durata, per il posticipo del troncamento del log. |
9 |
AVAILABILITY_REPLICA |
Una replica secondaria di un gruppo di disponibilità applica i record del log delle transazioni del database a un database secondario corrispondente. (Modello di recupero con registrazione completa) Per ulteriori informazioni, vedere Panoramica di Gruppi di disponibilità AlwaysOn (SQL Server). |
10 |
— |
Solo per uso interno |
11 |
— |
Solo per uso interno |
12 |
— |
Solo per uso interno |
13 |
OLDEST_PAGE |
Se un database è configurato per l'utilizzo dei checkpoint indiretti, la pagina meno recente del database potrebbe essere meno recente dell'LSN checkpoint. In questo caso, la pagina meno recente può causare il posticipo del troncamento del log. (Tutti i modelli di recupero) Per informazioni sui checkpoint indiretti, vedere Checkpoint di database (SQL Server). |
14 |
OTHER_TRANSIENT |
Questo valore non è attualmente utilizzato. |
[[Torna all'inizio]]
Operazioni per cui è possibile eseguire la registrazione minima
La registrazione minima implica la registrazione nel log delle transazioni delle sole informazioni necessarie per il recupero della transazione senza il supporto del recupero temporizzato. In questo argomento vengono identificate le operazioni con registrazione minima nel modello di recupero con registrazione minima delle operazioni bulk nonché nel modello di recupero con registrazione minima, ad eccezione dei momenti in cui è in esecuzione un backup.
[!NOTA]
In base al modello di recupero con registrazione completa tutte le operazioni bulk vengono registrate per intero. È tuttavia possibile ridurre al minimo la registrazione per un set di operazioni bulk passando temporaneamente il database al modello di recupero con registrazione minima delle operazioni bulk per le operazioni bulk. La registrazione minima è più efficiente della registrazione completa e riduce la possibilità che un'operazione bulk su larga scala esaurisca lo spazio disponibile per il log delle transazioni durante un'operazione bulk. Se tuttavia il database viene danneggiato o perso durante la registrazione minima, non è possibile recuperarlo fino al punto di errore.
Per le operazioni seguenti, con registrazione completa nel modello di recupero con registrazione completa, è prevista la registrazione minima nel modello di recupero con registrazione minima e in quello con registrazione minima delle operazioni bulk:
Operazioni di importazione bulk (bcp, BULK INSERT e INSERT... SELECT). Per ulteriori informazioni sui casi in cui viene eseguita la registrazione minima di un'importazione bulk in una tabella, vedere Prerequisiti per la registrazione minima nell'importazione bulk.
[!NOTA]
Quando la replica transazionale è abilitata, le operazioni BULK INSERT vengono registrate completamente persino nel modello di recupero con registrazione minima delle operazioni bulk.
Operazioni SELECT INTO.
[!NOTA]
Quando la replica transazionale è abilitata, le operazioni SELECT INTO vengono registrate completamente persino nel modello di recupero con registrazione minima delle operazioni bulk.
Aggiornamenti parziali a tipi di dati di valori di grandi dimensioni eseguiti mediante la clausola .WRITE nell'istruzione UPDATE quando si inseriscono o si aggiungono nuovi dati. Si noti che la registrazione minima non viene utilizzata per l'aggiornamento di valori esistenti. Per ulteriori informazioni sui tipi di dati per valori di grandi dimensioni, vedere Tipi di dati (Transact-SQL).
Istruzioni WRITETEXT e UPDATETEXT durante l'inserimento o l'aggiunta di nuovi dati nelle colonne con tipo di dati text, ntext e image. Si noti che la registrazione minima non viene utilizzata per l'aggiornamento di valori esistenti.
[!NOTA]
Poiché le istruzioni WRITETEXT e UPDATETEXT sono deprecate, è consigliabile evitare di utilizzarle nelle nuove applicazioni.
Se il database viene impostato sul modello di recupero con registrazione minima o con registrazione delle operazioni bulk, verrà eseguita la registrazione minima di alcune operazioni DDL sugli indici indipendentemente dal fatto che l'operazione venga eseguita online o offline. Le operazioni sugli indici con registrazione minima sono le seguenti:
Operazioni CREATE INDEX (incluse le viste indicizzate).
Operazioni ALTER INDEX REBUILD o DBCC DBREINDEX.
[!NOTA]
Poiché l'istruzione DBCC DBREINDEX è deprecata, è consigliabile evitare di utilizzarla nelle nuove applicazioni.
Ricompilazione del nuovo heap DROP INDEX (se pertinente).
[!NOTA]
Durante un'operazione DROP INDEX per la deallocazione delle pagine di un indice viene eseguita sempre la registrazione completa.
[[Torna all'inizio]]
Attività correlate
Managing the transaction log
Backup del log delle transazioni (modello di recupero con registrazione completa)
Ripristino del log delle transazioni (modello di recupero con registrazione completa)
[Inizio pagina]
Vedere anche
Concetti
Prerequisiti per la registrazione minima nell'importazione bulk
Backup e ripristino di database SQL Server
Checkpoint di database (SQL Server)