Risolvere i problemi relativi a un log delle transazioni completo (Errore di SQL Server 9002)Troubleshoot a Full Transaction Log (SQL Server Error 9002)

In questo argomento vengono illustrate le risposte possibili a un log delle transazioni pieno e viene spiegato come evitare tale situazione in futuro.This topic discusses possible responses to a full transaction log and suggests how to avoid it in the future.

Quando il log delle transazioni è pieno, Motore di database di SQL ServerSQL Server Database Engine genera un errore 9002.When the transaction log becomes full, Motore di database di SQL ServerSQL Server Database Engine issues a 9002 error. Il log può riempirsi quando il database è online o in stato di recupero.The log can fill when the database is online, or in recovery. Se il log si riempie quando il database è online, quest'ultimo rimane online anche se potrà soltanto essere letto, non aggiornato.If the log fills while the database is online, the database remains online but can only be read, not updated. Se il log si riempie durante il recupero, in Motore di databaseDatabase Engine il database viene contrassegnato come RESOURCE PENDING.If the log fills during recovery, the Motore di databaseDatabase Engine marks the database as RESOURCE PENDING. In entrambi i casi, è richiesto che l'utente intervenga per liberare spazio nel log.In either case, user action is required to make log space available.

Risposta a un log delle transazioni completoResponding to a full transaction log

La risposta appropriata a un log delle transazioni pieno dipende in parte dalla condizione o dalle condizioni che hanno causato il riempimento del log.The appropriate response to a full transaction log depends partly on what condition or conditions caused the log to fill.

Per individuare la condizione che impedisce il troncamento del log in un caso specifico, usare le colonne log_reuse_wait e log_reuse_wait_desc della vista del catalogo sys.database.To discover what is preventing log truncation in a given case, use the log_reuse_wait and log_reuse_wait_desc columns of the sys.database catalog view. Per altre informazioni, vedere sys.databases (Transact-SQL).For more information, see sys.databases (Transact-SQL). Per le descrizioni dei fattori che possono ritardare il troncamento del log, vedere Log delle transazioni (SQL Server).For descriptions of factors that can delay log truncation, see The Transaction Log (SQL Server).

IMPORTANTEIMPORTANT!!
Se l'errore 9002 si è verificato durante il recupero del database, risolvere il problema, quindi recuperare il database tramite ALTER DATABASE nome_database SET ONLINE.If the database was in recovery when the 9002 error occurred, after resolving the problem, recover the database by using ALTER DATABASE database_name SET ONLINE.

Per gestire un log delle transazioni pieno sono disponibili le soluzioni alternative seguenti:Alternatives for responding to a full transaction log include:

  • Esecuzione del backup del logBacking up the log.

  • Aumento dello spazio libero su disco in modo che le dimensioni del log possano aumentare automaticamenteFreeing disk space so that the log can automatically grow.

  • Spostamento del file di log in un'unità disco con spazio sufficienteMoving the log file to a disk drive with sufficient space.

  • Aumento delle dimensioni di un file di logIncreasing the size of a log file.

  • Aggiunta di un file di log in un altro discoAdding a log file on a different disk.

  • Completamento o termine di una transazione con esecuzione prolungata.Completing or killing a long-running transaction.

    Queste soluzioni alternative verranno illustrate nelle sezioni successive.These alternatives are discussed in the following sections. Scegliere la risposta più appropriata a seconda della situazione.Choose a response that fits your situation best.

Eseguire il backup del logBack up the 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.Under the full recovery model or bulk-logged recovery model, if the transaction log has not been backed up recently, backup might be what is preventing log truncation. Se il backup del log non è mai stato eseguito, è necessario creare due backup del log per consentire a Motore di databaseDatabase Engine di troncare il log in corrispondenza del punto dell'ultimo backup.If the log has never been backed up, you must create two log backups to permit the Motore di databaseDatabase Engine to truncate the log to the point of the last backup. Il troncamento del log consente di rendere disponibile spazio per nuovi record del log.Truncating the log frees space for new log records. Per evitare che il log si riempia di nuovo, eseguire backup del log frequenti.To keep the log from filling up again, take log backups frequently.

Per creare un backup del log delle transazioniTo create a transaction log backup

IMPORTANTEIMPORTANT
Se il database è danneggiato, vedere Backup della parte finale del log (SQL Server).If the database is damaged, see Tail-Log Backups (SQL Server).

Aumento dello spazio disponibile su discoFreeing disk space

Potrebbe essere possibile liberare spazio sull'unità disco contenente il file del log delle transazioni per il database, eliminando o spostando altri file.You might be able to free disk space on the disk drive that contains the transaction log file for the database by deleting or moving other files. L'aumento dello spazio disponibile su disco consente al sistema di recupero di ingrandire automaticamente il file di log.The freed disk space allows the recovery system to enlarge the log file automatically.

Spostare il file di log in un altro discoMove the log file to a different disk

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.If you cannot free enough disk space on the drive that currently contains the log file, consider moving the file to another drive with sufficient space.

IMPORTANTEIMPORTANT!! È consigliabile non memorizzare mai file di log in file system compressi.Log files should never be placed on compressed file systems.

Spostare un file di logMove a log file

Aumentare le dimensioni del file di logIncrease log file size

Se nel disco del log è disponibile spazio, è possibile aumentare le dimensioni del file di log.If space is available on the log disk, you can increase the size of the log file. La dimensione massima per i file di log è due terabyte per file di log.The maximum size for log files is two terabytes (TB) per log file.

Aumentare le dimensioni del fileIncrease the file size

Se l'aumento automatico dimensioni è disabilitato, il database è online ed è disponibile spazio sufficiente sul disco, eseguire una delle operazioni seguenti:If autogrow is disabled, the database is online, and sufficient space is available on the disk, either:

  • Aumentare manualmente le dimensioni del file per produrre un incremento di crescita singolo.Manually increase the file size to produce a single growth increment.

  • Abilitare l'aumento automatico dimensioni utilizzando l'istruzione ALTER DATABASE per impostare un incremento di crescita diverso da zero per l'opzione FILEGROWTH.Turn on autogrow by using the ALTER DATABASE statement to set a non-zero growth increment for the FILEGROWTH option.

NOTA: in entrambi i casi, se sono state raggiunte le dimensioni massime consentite correnti, aumentare il valore MAXSIZE.NOTE In either case, if the current size limit has been reached, increase the MAXSIZE value.

Aggiungere un file di log a un altro discoAdd a log file on a different disk

Aggiungere un nuovo file di log al database in un altro disco contenente spazio sufficiente utilizzando ALTER DATABASE ADD LOG FILE.Add a new log file to the database on a different disk that has sufficient space by using ALTER DATABASE ADD LOG FILE.

Aggiungere un file di logAdd a log file

Terminare una transazioneKill a transaction

In alcuni casi è necessario terminare il processo usando l'istruzione KILL .Sometimes you just have to end the process; you may have to use the KILL statement. Usare l'istruzione con cautela, soprattutto quando sono in esecuzione processi importanti che non vanno terminati.Please use this statement very carefully, especially when critical processes are running that you don't want to kill. Per altre informazioni, vedere KILL (Transact-SQL)For more information, see KILL (Transact-SQL)

Vedere ancheSee also

Articolo di supporto della Knowledge Base - Il log delle transazioni aumenta in modo imprevisto o diventa pieno in SQL Server ALTER DATABASE (Transact-SQL) KB support article - A transaction log grows unexpectedly or becomes full in SQL Server ALTER DATABASE (Transact-SQL)
Gestione delle dimensioni del file di log delle transazioni Manage the Size of the Transaction Log File
Backup di log delle transazioni (SQL Server) Transaction Log Backups (SQL Server)
sp_add_log_file_recover_suspect_db (Transact-SQL)sp_add_log_file_recover_suspect_db (Transact-SQL)