全期間にわたってトランザクションを開いたままにしておく長時間実行プロセスがあります。
これが実行される方法を制御することはできません。
トランザクションは全期間開いたままになるため、トランザクション ログがいっぱいになると、SQL Server はログ ファイルのサイズを増やすことができません。
したがって、プロセスはエラーで失敗します"The transaction log for database 'xxx' is full"
。
データベースのプロパティでトランザクション ログ ファイルのサイズを大きくして、これを防止しようとしましたが、同じエラーが発生します。
次に何を試すべきかわからない。このプロセスには数時間かかるため、試行錯誤を繰り返すのは簡単ではありません。
何か案は?
誰かが興味を持っている場合、プロセスは組織のインポートですMicrosoft Dynamics CRM 4.0.
十分なディスク容量があり、単純なログ モードでログがあり、プロセスを開始する前にログをバックアップしました。
-=-=-=-=- 更新 -=-=-=-=-
これまでのすべてのコメントに感謝します。以下は、開いているトランザクションが原因でログが大きくならないと私が信じるに至った理由です。
次のエラーが表示されます...
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
そのアドバイスに従って " log_reuse_wait_desc column in sys.databases
" に行ったところ、" " という値が保持されていましたACTIVE_TRANSACTION
。
マイクロソフトによると: http://msdn.microsoft.com/en-us/library/ms345414(v=sql.105).aspx
つまり、次のことを意味します。
トランザクションがアクティブです (すべての復旧モデル)。• ログ バックアップの開始時に、実行時間の長いトランザクションが存在する可能性があります。この場合、スペースを解放するには、別のログ バックアップが必要になる場合があります。詳細については、このトピックで後述する「実行時間の長いアクティブ トランザクション」を参照してください。
• トランザクションが延期されます (SQL Server 2005 Enterprise Edition 以降のバージョンのみ)。据え置きトランザクションは、事実上、使用できないリソースのためにロールバックがブロックされているアクティブなトランザクションです。遅延トランザクションの原因と、それらを遅延状態から移動する方法については、「遅延トランザクション」を参照してください。
私は何かを誤解しましたか?
-=-=-=- 更新 2 -=-=-=-
初期ログ ファイル サイズを 30GB に設定してプロセスを開始しました。これには数時間かかります。
-=-=-=- 最終更新 -=-=-=-
この問題は、実際にはログ ファイルが使用可能なすべてのディスク領域を消費したことが原因でした。前回の試行で 120GB を解放しましたが、それでもすべてを使用し、最終的に失敗しました。
プロセスが夜間に実行されていたときに、失敗時にロールバックしていたため、これが以前に発生していることに気づきませんでした。今回はロールバック前のログファイルサイズを確認できました。
ご意見をお寄せいただきありがとうございます。