【解決方法】’ACTIVE_TRANSACTION’ のため、データベース ‘a_TEST’ のトランザクション ログがいっぱいです

プログラミングQA


3 つの異なる条件に基づいて、3 つの異なる更新クエリでテーブルの 3 つの列を更新しようとしています。

The transaction log for database 'A_TEST' is full due to 'ACTIVE_TRANSACTION'

誰かが問題の可能性があることを示唆できますか。 私はそれをグーグルで検索しましたが、プログラムでは何もできないようです。そのコマンドの実行中にSQLスクリプトでそれを処理する方法に関する入力

私のログは、自動拡張が有効になっている SQL サーバーの次のパスに書き込まれます

“D:\MSSQL\DATA”

しかし、私の D ドライブはいっぱいで、8MB のスペースしか残っていません。

これが問題の原因になる可能性はありますか?

私が試したこと:

データベースは顧客のものであり、ログ設定を変更する権限がないため、コードを介してアプローチする方法がわからないため、試していません

解決策 1

見積もり:

トランザクション ログ … がいっぱいです

Dドライブがいっぱいです

これが問題の原因になる可能性はありますか?

はい。

SQL Server のトランザクション ログに、トランザクションの詳細を書き込むための十分なスペースがない場合は、 「トランザクション ログがいっぱいです」 エラー。 トランザクション ログのサイズが固定されていなくても、格納されているディスクの容量が不足すると、トランザクション ログは大きくなり、それ以上トランザクションを処理できなくなります。

トランザクション ログ (SQL Server) – SQL Server | マイクロソフト ラーン[^]

Herman が言ったように、トランザクション ログがこれほど多くのスペースを占有している理由を突き止める必要があります。 さまざまな理由が考えられます。たとえば、データベースの復旧モードが「完全」に設定されていて、トランザクション ログのバックアップを作成していない場合などです。

Microsoft のドキュメントには、考えられる原因と、それらを修正するためにできることについての適切な説明があります。
完全なトランザクション ログ エラー 9002 のトラブルシューティング – SQL Server | マイクロソフト ラーン[^]

注意:ACTIVE_TRANSACTION reason は、コミットもロールバックもされていない長期実行トランザクションが少なくとも 1 つあることを示しています。 クエリ sys.dm_tran_database_transactions[^] アクティブなトランザクションを確認するための動的ビュー。

解決策 2

実行しているクエリの性質や影響を受けるデータの量を知らなければ、D: ドライブに 8MB しか残っていないことが原因であるかどうかを判断することはできませんが、可能性が高いことをお勧めします。

データベースが顧客のものである場合は、顧客の DBA に連絡し、トランザクション ログの管理について話し合う必要があります – Microsoft は推奨事項を提供します トランザクション ログ ファイルのサイズを管理する – SQL Server | マイクロソフト ラーン[^].
または、トランザクション ログを縮小または切り捨てるよう依頼することもできます。

しかし、あなたはそれを言います 君の D: ドライブがいっぱいです – これは、ローカル環境に顧客データベースのコピーがあることを意味します – この場合、ローカル トランザクション ログを管理するのはあなた次第です – 上のリンクを参照してください。 データベースが「A_TEST」と呼ばれていることを考えると、これらのログを非常に容赦なく扱う余裕があるでしょう。

特に Transact-SQL 機能に注目してください DBCC SHRINKFILE[^]

コメント

タイトルとURLをコピーしました