SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

トランザクションログのバックアップからログレコードの内容を確認

leave a comment

SQL Server では、トランザクションログの内容を確認するための方法として、[DBCC LOG] [sys.fn_dblog] があります。
これらを使うと、トランザクションログファイルのログレコードの内容を以下のように確認することが可能です。

image

これらは、現状のログファイル内のログレコードを表示するものになりますので、トランザクションログのバックアップを行い、ログファイル上から切り捨てられたログに関しては内容を見ることができません。

今回はトランザクションログのバックアップに含まれるログレコードの確認方法をまとめてみたいと思います。

■トランザクションログのバックアップからログレコードを確認


トランザクションログのバックアップからログレコードを確認する場合は、[sys.fn_dump_dblog] を使用します。

この関数はかなり、引数が多いのですが指定しなくていけない個所は実は少ないです。
image

LSN を指定して特定の範囲のレコードを検索することもできるようなのですが、特定のログファイルの内容を確認するだけであれば、トランザクションログのバックアップファイル名を指定することで実行が可能です。

SELECT * FROM sys.fn_dump_dblog(NULL, NULL, NULL, 1
, N’C:Program FilesMicrosoft SQL ServerMSSQL11.SQL2011MSSQLBackupTEST2_LOG1.trn’
, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
, NULL, NULL, NULL)

このような形式で実行すると、トランザクションログのバックアップに含まれているログレコードの内容を確認することができます。
image

複数のファイルを指定することも可能なのですが、これはバックアップファイルを分けていた時に使うもののようです。
SQL Server のバックアップは、ディスク負荷の分散のためバックアップ取得時に複数のバックアップ先に分散することが可能です。

BACKUP LOG TEST2
TO
DISK=N’TEST2_LOG1.trn’
, DISK=N’TEST2_LOG2.trn’
WITH INIT, FORMAT

この場合、バックアップの内容が複数のファイルに分散され、複数のファイルを合わせて一つのバックアップとなります。
# ミラーで取得することもできますが、上記の指定ではバックアップを分散する方法になります。

このように取得したバックアップの内容を確認する際に、一つのファイルを指定しただけではエラーとなってしまいます。
image

この場合は、以下のように指定をします。
image

バックアップ複数のバックアップが含まれる場合は 4 つ目の引数 (@seqnum) を変更すると、ファイル内のどのバックアップから情報を取得するかを変更することができます。

今回はトランザクションログのバックアップに対して実行していますが、通常のデータベースバックアップに含まれるログに関しても確認ができるようで、完全バックアップ内に含まれるログの状況を確認したいといったときにも利用ができそうです。

引数があまりにも多くて調べるのをスルーしていたのですが、改めて調べて使ってみると、なかなか便利な関数でした。

Written by masayuki.ozawa

10月 26th, 2011 at 7:49 am

Posted in SQL Server

Tagged with

Leave a Reply

*