J'ai un processus de longue durée qui maintient une transaction ouverte pendant toute sa durée.
Je n'ai aucun contrôle sur la façon dont cela est exécuté.
Comme une transaction est maintenue ouverte pendant toute sa durée, lorsque le journal des transactions se remplit, SQL Server ne peut pas augmenter la taille du fichier journal.
Le processus échoue donc avec l'erreur "The transaction log for database 'xxx' is full"
.
J'ai essayé d'empêcher cela en augmentant la taille du fichier journal des transactions dans les propriétés de la base de données, mais j'obtiens la même erreur.
Je ne sais pas ce que je dois essayer ensuite. Le processus dure plusieurs heures, il n'est donc pas facile de jouer aux essais et aux erreurs.
Des idées ?
Si cela intéresse quelqu'un, le processus est une importation de l'organisation en Microsoft Dynamics CRM 4.0.
Il y a beaucoup d'espace disque, le journal est en mode de journalisation simple et nous avons sauvegardé le journal avant de lancer le processus.
-=-=--=-- MISE À JOUR -=-=--=-=----
Merci à tous pour les commentaires jusqu'à présent. Ce qui suit est ce qui m'a amené à croire que le journal n'augmenterait pas en raison de la transaction ouverte :
J'obtiens l'erreur suivante...
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
En suivant ce conseil, je me suis rendu à " log_reuse_wait_desc column in sys.databases
"et il détenait la valeur " ACTIVE_TRANSACTION
".
Selon Microsoft : http://msdn.microsoft.com/en-us/library/ms345414(v=sql.105).aspx
Cela signifie ce qui suit :
Une transaction est active (tous les modèles de récupération). - Une transaction en cours depuis longtemps peut exister au début de la sauvegarde du journal. Dans ce cas, la libération de l'espace peut nécessiter une autre sauvegarde du journal. Pour plus d'informations, voir "Transactions actives de longue durée", plus loin dans cette rubrique.
- Une transaction est différée (SQL Server 2005 Enterprise Edition et versions ultérieures uniquement). Une transaction différée est en fait une transaction active dont le retour en arrière est bloqué en raison d'une ressource indisponible. Pour plus d'informations sur les causes des transactions différées et sur la manière de les sortir de l'état différé, voir Transactions différées.
Ai-je mal compris quelque chose ?
-=-=--- MISE À JOUR 2 -=-=--=---
Je viens de lancer le processus avec la taille initiale du fichier journal fixée à 30 Go. Cela prendra quelques heures pour terminer.
-=-=--- Final UPDATE -=-=-----.
Le problème était en fait causé par le fichier journal qui consommait tout l'espace disque disponible. Lors de la dernière tentative, j'ai libéré 120 Go, mais le fichier a tout utilisé et a finalement échoué.
Je n'avais pas réalisé que cela se produisait auparavant, car lorsque le processus était exécuté pendant la nuit, il revenait en arrière en cas d'échec. Cette fois, j'ai pu vérifier la taille du fichier journal avant le retour en arrière.
Merci à tous pour votre contribution.