トランザクションログファイルが大きくなったので、トランザクションログファイルをバックアップして、ファイルの圧縮をしたのですが、ファイルのサイズが小さくならないです。
どうすればよいでしょうか?
トランザクションログをバックアップしてもトランザクションログファイルが圧縮されない現象について紹介します。
SQL Serverでは通常トランザクションログをバックアップすれば、トランザクションログの切り捨てが行われ、
トランザクションログファイルのファイルサイズが縮小するはずですが、トランザクションログのバックアップをしても、トランザクションログのファイルサイズが小さくなりません。
一度目のトランザクションログバックアップ時にはファイル終端が以前の位置のままであることが原因となっている可能性があります。
次のSQLコマンドを実行します。
SELECT name, recovery_model_desc, log_reuse_wait_desc FROM sys.databases WHERE name = N'(対象のデータベース名)';
以下の結果が表示されます。
| name | recovery_model_desc | log_reuse_wait_desc |
|---|---|---|
| (データベース名) | FULL | LOG_BACKUP |
log_reuse_wait_desc の値が、"LOG_BACKUP"になっている場合は、再度のログバックアップが必要です。
表示される値は以下があります。
| 値 | 意味 |
|---|---|
| NOTHING | ログ再利用の妨げは基本なし |
| LOG_BACKUP | ログバックアップが必要 |
| ACTIVE_TRANSACTION | 未完了トランザクションが残っている |
| REPLICATION | レプリケーション関連で保持中 |
| AVAILABILITY_REPLICA | Always On関連で保持中 |
再度ログバックアップを実行して、結果がNOTHING であることを確認して、ファイルの圧縮を実行します。
| name | recovery_model_desc | log_reuse_wait_desc |
|---|---|---|
| (データベース名) | FULL | NOTHING |
log_reuse_wait_descの値がLOG_BACKUPであった場合、トランザクションログのバックアップをもう一度実行します。
バックアップ完了後、データベースの圧縮を実行すると、トランザクションログのファイルサイズを縮小できる場合があります。
データベースのバックアップ手順はこちらの記事を参照してください。
また、データベースの圧縮手順はこちらの記事を参照してください。