チームのASP.NETアプリケーションのデータアクセス層で、.NET SQLClientを使用して、データベースに対してストアドプロシージャを実行します。データベースでの挿入操作を可能にする新しいコードを追加した後、コードをテストしたところ、次の例外が発生しました。
The transaction log for database 'DBName' is full. To find out why space in the log cannot be reused, see the log_reuse_wait_desc column in sys.databases
MS SQL Server Management Studio内から挿入操作を試行したときに、同じメッセージが表示されることを確認しました。最近、データベースに3つの2つのトリガー2つを追加して、特定のテーブルへの挿入と更新に基づいてデータの挿入を実行し、無限ループまたはそのような性質が発生した可能性があると考えたため、心配しました。
ただし、オンラインでのこの問題の他のインスタンスに基づくと、トリガーまたは回転するクエリによって一般的に引き起こされる問題のようには見えません。log_reuse_wait
と列に対してクエリを実行しlog_reuse_wait_desc
、次を返しました。
2 | LOG_BACKUP
また、クエリは次を返します。SELECT [name], recovery_model_desc, log_reuse_wait_desc
FROM sys.databases
name | recovery_model_desc| log_reuse_wait_desc
DBName| FULL | LOG_BACKUP
最初の列はlog_reuse_wait
で、2番目の列はですlog_reuse_wait_desc
。msdnのコードの定義に基づいて、ログのバックアップを実行する必要があります。そうすると、ログが自動的に切り捨てられ、データベースでさらに操作できるようになります。それは正しい仮定ですか?これは、トリガーが正しくコーディングされていないことが原因である可能性がありますか、それともデータベース上の多数のトランザクションによって発生する日常的なメンテナンスタスクである可能性がありますか?
編集:
クエリは次をselect type_desc, size, max_size from sys.database_files
返します。
type_desc | size | max_size
1| ROWS | 512 | -1
2| LOG | 64 | -1