NOBTAの気ままにITブログ

Azure全般 / SQL Serverに関する情報を発信していきます。

トランザクションログ肥大化の対処方法 (log_reuse_wait_desc : LOG_BACKUP) [SQL Server]


スポンサーリンク

SQL Server トランザクション ログ (.ldf) の肥大化は様々な要因により発生しますが、今回は、トランザクションログファイル (.ldf) 肥大化の要因が、「log_reuse_wait_desc : LOG_BACKUP」の場合の対処方法について紹介していきたいと思います。

 

 本ブログ内容は、SQL Server 2019 をベースにしていますが、SQL Server 2019 以前のバージョンでも同様の方法で確認可能です。

 

log_reuse_wait_desc : 「LOG_BACKUP」 は、トランザクションログのバックアップが行われていないことに起因し、ログレコードの切り捨てが行えない状態であるため、トランザクション ログのバックアップを実施することでログの切り捨てが行える状態になります。

データベース復旧モデルが「完全 (FULL)」 の場合、このステータスによって、トランザクションログ ファイルサイズが肥大化する可能性があります。

トランザクションログのバックアップを実行する方法として、「Transact-SQL から実行する方法」「SQL Server Management Studio (以下 SSMS) から実行する方法」について紹介します。

 

 

トランザクションログのバックアップ (Transact-SQL) 

1) 「dbcc sqlperf('logspace')」コマンドを実行し、該当データベース(本例では「db10」)の「Log Space Used (%)」(ログ使用率) を確認します。

dbcc sqlperf('logspace')

[結果例] 

Database Name Log Size (MB) Log Space Used (%)
db10 2951.992 100.0001

※ データベース「db10」のログ使用率が 100% になっていることが確認できます。 

 

2)  以下のコマンドを実行し、該当のデータベースのトランザクション ログのバックアップを実施します。

use db10
go
CHECKPOINT
go
BACKUP LOG [db10] TO  DISK = 'E:\temp\db10.bak'
go

 

3) 「dbcc sqlperf('logspace')」コマンドを再度実行し、該当データベースの「Log Space Used (%)」(ログ使用率) が下がっていることを確認します。

dbcc sqlperf('logspace')

 [結果例] 

Database Name Log Size (MB) Log Space Used (%)
db10 2951.992 0.5000

※ データベース「db10」のログ使用率が 0% に近い値になっていることが確認できます。本例の場合、Log Size (MB)が 約 2950 MBであるため、再利用可能なログサイズが 約 2950 MBに増えた状態に改善したと言えます。

 

トランザクションログのバックアップ (SSMS) 

1) SSMSを起動し、管理者権限(sysadmin)が付与されたログイン(saなど)で該当のインスタンスに接続します。
2) データベース - 該当のデータベース - 右クリック -「タスク」- 「バックアップ」を選択します。 

f:id:nobtak:20200412035927p:plain

3) 「ページの選択」:全般、データベース:「該当のデータベース」、バックアップの種類:「トランザクション ログ」、バックアップ先:「任意のバックアップパスを指定 」を指定し、「OK」ボタンを押下します。

f:id:nobtak:20200412040724p:plain

 

詳細なトランザクションログバックアップのオプション設定については、以下URLを参照

 

 

まとめ 

今回は、トランザクションログファイル (.ldf) 肥大化の要因が、「log_reuse_wait_desc : LOG_BACKUP」の場合の対処方法についてまとめてみました。

「log_reuse_wait_desc : LOG_BACKUP」のステータスは、トランザクションログのバックアップを実行することで解消することができます。
しかしながら、既存のバックアップ処理の中でトランザクションログのバックアップを採取している場合に個別にトランザクションログのバックアップを実施すると、障害直前までリカバリする際に個別に採取したトランザクションログのバックアップが必要になる場合がある点に気を付ける必要があります。
そのため、既存のバックアップ処理の中でトランザクションログのバックアップを採取している場合は、既存のバックアップ処理を実施することを検討したほうが良いかもしれません。

 

SQL Server トランザクション ログ肥大化対策 関連ブログ 

1) トランザクションログ (LDFファイル) 肥大化の原因確認方法

2) トランザクションログを肥大化させているクエリの特定方法

3) トランザクションログ肥大化の対処方法 (log_reuse_wait_desc : ACTIVE_TRANSACTION)

4) トランザクションログ肥大化の対処方法 (log_reuse_wait_desc : LOG_BACKUP)

5) エラー 9002、17053 の対処方法

6) トランザクションログ肥大化の対処方法 (log_reuse_wait_desc : DATABASE_MIRRORING)

 

※ 2022年1月 更新