Ho un lungo processo che tiene aperta una transazione per l'intera durata.
Non ho alcun controllo sul modo in cui viene eseguito.
Poiché una transazione viene tenuta aperta per l'intera durata, quando il registro delle transazioni si riempie, SQL Server non può aumentare la dimensione del file di registro.
Quindi il processo fallisce con l'errore "The transaction log for database 'xxx' is full"
.
Ho tentato di impedirlo aumentando la dimensione del file di registro delle transazioni nelle proprietà del database, ma ottengo lo stesso errore.
Non sono sicuro di cosa dovrei provare dopo. Il processo dura diverse ore, quindi non è facile giocare per tentativi ed errori.
Qualche idea?
Se qualcuno è interessato, il processo è un'importazione dell'organizzazione in Microsoft Dynamics CRM 4.0.
C'è molto spazio su disco, abbiamo il registro in modalità di registrazione semplice e abbiamo eseguito il backup del registro prima di avviare il processo.
- = - = - = - = - AGGIORNAMENTO - = - = - = - = -
Grazie a tutti per i commenti finora. Quanto segue è ciò che mi ha portato a credere che il log non sarebbe cresciuto a causa della transazione aperta:
Ricevo il seguente errore ...
Import Organization (Name=xxx, Id=560d04e7-98ed-e211-9759-0050569d6d39) failed with Exception:
System.Data.SqlClient.SqlException: The transaction log for database 'xxx' is full. To find out why space in the log cannot be reused, see the log_reuse_wait_desc column in sys.databases
Quindi seguendo quel consiglio sono andato a " log_reuse_wait_desc column in sys.databases
" e ha tenuto il valore " ACTIVE_TRANSACTION
".
Secondo Microsoft: http://msdn.microsoft.com/en-us/library/ms345414(v=sql.105).aspx
Ciò significa quanto segue:
Una transazione è attiva (tutti i modelli di ripristino). • Potrebbe esistere una transazione di lunga durata all'inizio del backup del log. In questo caso, liberare lo spazio potrebbe richiedere un altro backup del log. Per ulteriori informazioni, vedere "Transazioni attive di lunga durata" più avanti in questo argomento.
• Viene differita una transazione (solo SQL Server 2005 Enterprise Edition e versioni successive). Una transazione differita è effettivamente una transazione attiva il cui rollback è bloccato a causa di una risorsa non disponibile. Per informazioni sulle cause delle transazioni differite e su come spostarle fuori dallo stato differito, vedere Transazioni differite.
Ho frainteso qualcosa?
- = - = - = - AGGIORNAMENTO 2 - = - = - = -
Ho appena avviato il processo con la dimensione del file di registro iniziale impostata su 30 GB. Questo richiederà un paio d'ore per completare.
- = - = - = - AGGIORNAMENTO finale - = - = - = -
Il problema era effettivamente causato dal file di registro che consumava tutto lo spazio disponibile su disco. Nell'ultimo tentativo ho liberato 120 GB e lo utilizzava ancora tutto e alla fine non è riuscito.
Non mi ero reso conto che ciò stesse accadendo in precedenza perché quando il processo era in esecuzione durante la notte, tornava indietro in caso di fallimento. Questa volta sono stato in grado di controllare la dimensione del file di registro prima del rollback.
Grazie a tutti per il vostro contributo.