1. ホーム
  2. sql

[解決済み] データベースのトランザクションログが満杯です

2022-08-30 09:30:18

質問

長時間実行するプロセスがあり、その期間中、トランザクションを開いたままにしています。

私はこれが実行される方法を制御することができません。

トランザクションは全期間開かれたままなので、トランザクションログが一杯になると、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 を解放しましたが、それでもまだそのすべてを使用しており、最終的には失敗しました。

プロセスが夜間に実行されているときは、失敗時にロールバックされていたので、以前はこれが起こっていることに気づきませんでした。 今回は、ロールバック前にログ ファイル サイズを確認することができました。

ご意見ありがとうございました。

どのように解決するのですか?

これは1回限りのスクリプトですか、それとも定期的に発生する仕事ですか?

過去には、ログ ファイル用に一時的に多くの容量を必要とする特別なプロジェクトのために、私は 2 つ目のログ ファイルを作成し、それを巨大なものにしました。プロジェクトが完了したら、余分なログ ファイルを削除しました。