Ich habe einen lang laufenden Prozess, der eine Transaktion für die gesamte Dauer offen hält.
Ich habe keine Kontrolle darüber, wie dies ausgeführt wird.
Da eine Transaktion für die gesamte Dauer offen gehalten wird, kann SQL Server beim Füllen des Transaktionsprotokolls die Größe der Protokolldatei nicht erhöhen.
Der Prozess schlägt also mit dem Fehler fehl "The transaction log for database 'xxx' is full"
.
Ich habe versucht, dies zu verhindern, indem ich die Größe der Transaktionsprotokolldatei in den Datenbankeigenschaften erhöht habe, erhalte jedoch den gleichen Fehler.
Ich bin mir nicht sicher, was ich als nächstes versuchen soll. Der Prozess läuft mehrere Stunden, daher ist es nicht einfach, Versuch und Irrtum zu spielen.
Irgendwelche Ideen?
Wenn jemand interessiert ist, ist der Prozess ein Organisationsimport in Microsoft Dynamics CRM 4.0.
Es gibt viel Speicherplatz, wir haben das Protokoll im einfachen Protokollierungsmodus und haben das Protokoll vor dem Start des Prozesses gesichert.
- = - = - = - = - UPDATE - = - = - = - = -
Vielen Dank für die bisherigen Kommentare. Folgendes hat mich zu der Annahme geführt, dass das Protokoll aufgrund der offenen Transaktion nicht wachsen würde:
Ich erhalte die folgende Fehlermeldung ...
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
Also ging ich nach diesem Rat zu " log_reuse_wait_desc column in sys.databases
" und es hatte den Wert " ACTIVE_TRANSACTION
".
Laut Microsoft: http://msdn.microsoft.com/en-us/library/ms345414(v=sql.105).aspx
Das bedeutet folgendes:
Eine Transaktion ist aktiv (alle Wiederherstellungsmodelle). • Zu Beginn der Protokollsicherung ist möglicherweise eine Transaktion mit langer Laufzeit vorhanden. In diesem Fall erfordert das Freigeben des Speicherplatzes möglicherweise eine weitere Protokollsicherung. Weitere Informationen finden Sie unter "Langfristig aktive Transaktionen" weiter unten in diesem Thema.
• Eine Transaktion wird zurückgestellt (nur SQL Server 2005 Enterprise Edition und spätere Versionen). Eine zurückgestellte Transaktion ist effektiv eine aktive Transaktion, deren Rollback aufgrund einer nicht verfügbaren Ressource blockiert ist. Informationen zu den Ursachen für zurückgestellte Transaktionen und zum Verschieben aus dem zurückgestellten Zustand finden Sie unter Zurückgestellte Transaktionen.
Habe ich etwas falsch verstanden?
- = - = - = - UPDATE 2 - = - = - = -
Der Prozess wurde gerade mit einer anfänglichen Protokolldateigröße von 30 GB gestartet. Dies dauert einige Stunden.
- = - = - = - Endgültiges UPDATE - = - = - = -
Das Problem wurde tatsächlich dadurch verursacht, dass die Protokolldatei den gesamten verfügbaren Speicherplatz belegt. Beim letzten Versuch habe ich 120 GB freigegeben und es hat immer noch alles verbraucht und ist letztendlich gescheitert.
Ich wusste nicht, dass dies zuvor geschah, da der Prozess, wenn er über Nacht ausgeführt wurde, bei einem Fehler zurückgesetzt wurde. Diesmal konnte ich die Größe der Protokolldatei vor dem Rollback überprüfen.
Vielen Dank für Ihre Eingabe.