SQL Server では、トランザクションログの内容を確認するための方法として、[DBCC LOG] [sys.fn_dblog] があります。
これらを使うと、トランザクションログファイルのログレコードの内容を以下のように確認することが可能です。
これらは、現状のログファイル内のログレコードを表示するものになりますので、トランザクションログのバックアップを行い、ログファイル上から切り捨てられたログに関しては内容を見ることができません。
今回はトランザクションログのバックアップに含まれるログレコードの確認方法をまとめてみたいと思います。
■トランザクションログのバックアップからログレコードを確認
トランザクションログのバックアップからログレコードを確認する場合は、[sys.fn_dump_dblog] を使用します。
この関数はかなり、引数が多いのですが指定しなくていけない個所は実は少ないです。
LSN を指定して特定の範囲のレコードを検索することもできるようなのですが、特定のログファイルの内容を確認するだけであれば、トランザクションログのバックアップファイル名を指定することで実行が可能です。
SELECT * FROM sys.fn_dump_dblog(NULL, NULL, NULL, 1 |
このような形式で実行すると、トランザクションログのバックアップに含まれているログレコードの内容を確認することができます。
複数のファイルを指定することも可能なのですが、これはバックアップファイルを分けていた時に使うもののようです。
SQL Server のバックアップは、ディスク負荷の分散のためバックアップ取得時に複数のバックアップ先に分散することが可能です。
BACKUP LOG TEST2 |
この場合、バックアップの内容が複数のファイルに分散され、複数のファイルを合わせて一つのバックアップとなります。
# ミラーで取得することもできますが、上記の指定ではバックアップを分散する方法になります。
このように取得したバックアップの内容を確認する際に、一つのファイルを指定しただけではエラーとなってしまいます。
バックアップ複数のバックアップが含まれる場合は 4 つ目の引数 (@seqnum) を変更すると、ファイル内のどのバックアップから情報を取得するかを変更することができます。
今回はトランザクションログのバックアップに対して実行していますが、通常のデータベースバックアップに含まれるログに関しても確認ができるようで、完全バックアップ内に含まれるログの状況を確認したいといったときにも利用ができそうです。
引数があまりにも多くて調べるのをスルーしていたのですが、改めて調べて使ってみると、なかなか便利な関数でした。