Risoluzione dei problemi relativi a un log delle transazioni pieno (Errore 9002)

In questo argomento vengono illustrate le risposte possibili a un log delle transazioni pieno e viene spiegato come evitare tale situazione in futuro. Quando il log delle transazioni è pieno, in Motore di database di SQL Server viene generato un errore 9002. Il log può riempirsi quando il database è online o in stato di recupero. Se il log si riempie quando il database è online, quest'ultimo rimane online anche se potrà soltanto essere letto, non aggiornato. Se il log si riempie durante il recupero, in Motore di database il database viene contrassegnato come RESOURCE PENDING. In entrambi i casi, è richiesto che l'utente intervenga per liberare spazio nel log.

Nota

In genere, quando lo spazio su disco del log delle transazioni si esaurisce, è ancora possibile accedere al database in modalità di sola lettura. Tuttavia, quando il livello di isolamento dello snapshot è abilitato, se si elimina una riga in un heap, ovvero una tabella senza un indice cluster, e il log delle transazioni si esaurisce prima che il record di log per la riga fantasma sia persistente, il database viene portato offline. In tal caso, il database verrà riavviato automaticamente, sarà sottoposto a un recupero completo e verrà portato online.

Risposta a un log delle transazioni pieno

La risposta appropriata a un log delle transazioni pieno dipende in parte dalla condizione o dalle condizioni che hanno causato il riempimento del log. Per individuare la condizione che impedisce il troncamento del log in un determinato caso, utilizzare le colonne log_reuse_wait e log_reuse_wait_desc della vista del catalogo sys.database. Per ulteriori informazioni, vedere sys.databases (Transact-SQL). Per le descrizioni dei fattori che possono ritardare il troncamento del log, vedere Fattori che possono ritardare il troncamento del log..

Nota importanteImportante

Se l'errore 9002 si è verificato durante il recupero del database, risolvere il problema, dopodiché recuperare il database utilizzando ALTER DATABASE database_name SET ONLINE.

Per gestire un log delle transazioni pieno sono disponibili le soluzioni alternative seguenti:

  • Esecuzione del backup del log

  • Aumento dello spazio libero su disco in modo che le dimensioni del log possano aumentare automaticamente

  • Spostamento del file di log in un'unità disco con spazio sufficiente

  • Aumento delle dimensioni di un file di log

  • Aggiunta di un file di log in un altro disco

  • Completamento o termine di una transazione con esecuzione prolungata.

Queste soluzioni alternative verranno illustrate nelle sezioni successive. Scegliere la risposta più appropriata a seconda della situazione.

Backup del log

Nel modello di recupero con registrazione completa o nel modello di recupero con registrazione minima delle operazioni bulk, se non è stato eseguito il backup del log delle transazioni di recente, è possibile che sia il backup a impedire il troncamento del log. Se il backup del log non è mai stato eseguito, è necessario creare due backup del log per consentire a Motore di database di troncare il log in corrispondenza del punto dell'ultimo backup. Il troncamento del log consente di rendere disponibile spazio per nuovi record del log. Per evitare che il log si riempia di nuovo, eseguire backup del log frequenti.  

Per creare un backup del log delle transazioni

Nota importanteImportante

Se il database è danneggiato, vedere Backup della parte finale del log.

Aumento dello spazio disponibile su disco

Potrebbe essere possibile liberare spazio sull'unità disco contenente il file del log delle transazioni per il database, eliminando o spostando altri file. L'aumento dello spazio disponibile su disco consente al sistema di recupero di ingrandire automaticamente il file di log.

Spostamento del file di log in un altro disco

Se non é possibile liberare spazio su disco sufficiente nell'unità che attualmente contiene il file di log, prendere in considerazione lo spostamento del file in un'altra unità con spazio adeguato.

Nota importanteImportante

È consigliabile non memorizzare mai file di log in file system compressi.

Per spostare un file di log

Aumento delle dimensioni di un file di log

Se nel disco del log è disponibile spazio, è possibile aumentare le dimensioni del file di log. La dimensione massima per i file di log è due terabyte per file di log.

Per aumentare le dimensioni dei file

Se l'aumento automatico dimensioni è disabilitato, il database è online ed è disponibile spazio sufficiente sul disco, eseguire una delle operazioni seguenti:

  • Aumentare manualmente le dimensioni del file per produrre un incremento di crescita singolo.

  • Attivare l'aumento automatico dimensioni utilizzando l'istruzione ALTER DATABASE per impostare un incremento di crescita diverso da zero per l'opzione FILEGROWTH.

Nota

In entrambi i casi, se sono state raggiunte le dimensioni massime consentite correnti, aumentare il valore MAXSIZE.

Aggiunta di un file di log in un altro disco

Aggiungere un nuovo file di log al database in un altro disco contenente spazio sufficiente utilizzando ALTER DATABASE <database_name> ADD LOG FILE.

Per aggiungere un file di log

Identificazione e gestione di una transazione con esecuzione prolungata

Per ulteriori informazioni, vedere Gestione di transazioni con esecuzione prolungata.