トランザクションログの確認方法

トランザクションログとは

トランザクションログには、SQL Serverで実行されたすべてのトランザクションに関する情報が記録されます。トランザクションログは、デフォルトのデータベースフォルダー(C:\Program Files\Microsoft SQL Server\MSSQL)に単一のLDFファイルとして保存され、各ログエントリーには一意のログシーケンス番号(LSN)が割り当てられます。トランザクションログのファイルには大量のデータが保存されているため、手動による分析は困難です。

トランザクションログの確認方法

Microsoftは、SQL Serverのトランザクションログを表示・監視・監査するための専用ツールを提供していません。しかし、以下のような方法でトランザクションログを確認できます。

  • fn_dblog()関数
  • fn_dump_dblog()関数
  • DBCC PAGEコマンド

fn_dblog()を使用したトランザクションログの確認方法

fn_dblog()関数をデータベース内で呼び出すことで、オンラインかつアクティブなトランザクションログを表示できます。この関数は2つのパラメーターを受け取り、読み出す範囲の最初と最後のログエントリーをログシーケンス番号(LSN)で指定します。すべてのオンラインかつアクティブなログを表示したい場合は、fn_dblog()関数に(NULL, NULL)と入力することで対応できます。

fn_dblog()関数は、次のように実行できます。

SELECT * FROM fn_dblog(NULL,NULL)

この関数は、デフォルトで129列を含むテーブルを返します。

fn_dump_dblog()を使用したトランザクションログの確認方法

fn_dump_dblog()関数を使用すると、オンラインかつバックアップからのトランザクションログを表示できます。この関数は63個のパラメーターを受け取り、63個すべてを指定する必要があります。パラメーターにDEFAULTを使用すると、すべてのトランザクションログを取得できます。

fn_dump_dblog()関数は、次のように実行できます。

SELECT * FROM fn_dump_dblog
(NULL,NULL,NULL,NULL,DEFAULT,DEFAULT,DEFAULT,DEFAULT,DEFAULT,
DEFAULT,DEFAULT,DEFAULT,DEFAULT,DEFAULT,DEFAULT,DEFAULT,DEFAULT,DEFAULT,
DEFAULT,DEFAULT,DEFAULT,DEFAULT,DEFAULT,DEFAULT,DEFAULT,DEFAULT,DEFAULT,
DEFAULT,DEFAULT,DEFAULT,DEFAULT,DEFAULT,DEFAULT,DEFAULT,DEFAULT,DEFAULT,
DEFAULT,DEFAULT,DEFAULT,DEFAULT,DEFAULT,DEFAULT,DEFAULT,DEFAULT,DEFAULT,
DEFAULT,DEFAULT,DEFAULT,DEFAULT,DEFAULT,DEFAULT,DEFAULT,DEFAULT,DEFAULT,
DEFAULT,DEFAULT,DEFAULT,DEFAULT,DEFAULT,DEFAULT,DEFAULT,DEFAULT,DEFAULT,
DEFAULT,DEFAULT,DEFAULT,DEFAULT, DEFAULT)

この関数も、デフォルトで129列を含むテーブルを返します。

fn_dump_dblog()関数の利点は、WITH STOPBEFOREMARKステートメントを使用して、特定の時点までデータベースを復元できることです。WITH STOPBEFOREMARKステートメントを使用すれば、データーベース管理者は、データベースのパフォーマンスに影響を与える変更の取り消しや、トランザクションエラーの修正を実施できます。

データベース整合性チェッカー(DBCC)のPAGEコマンドを使用したトランザクションログの確認方法

DBCC PAGEコマンドで、SQL Serverの任意のページを調査できます。このコマンドを使用してトランザクションログを表示するには、結果ウィンドウに出力をリダイレクトするために、トレースフラグ3604を有効にする必要があります。以下のようにDBCC PAGEコマンドを実行します。

DBCC TRACEON (3604, -1)
DBCC PAGE ( {'Database name' | DB_ID}, File_number, Page_number [, output={0|1|2|3} ])

DBCC PAGEコマンドでトランザクションログのページを表示できますが、ログの解釈・分析は依然として困難です。

トランザクションログを効率的に監視するために

上記の方法はすべて、Microsoftの公式ドキュメントに記載されていないため、自己責任でご使用ください。fn_dblog()関数とfn_dump_dblog()関数は、どちらもデフォルトで129列という大量のログデータを返します。そのため、重要な情報を抽出するには、クエリによるログデータの絞り込みが必要です。結果として、データベース管理者がトランザクションログを確認・解釈・分析し異常を特定するのは困難になります。そこで、トランザクションログを効率的に表示・監査するための代替策が、ログ管理ソリューションです。

EventLog Analyzerは、トランザクションログの収集、解析、インデックス付け、分析を実施できるログ管理ソリューションです。EventLog Analyzerは、SQL Serverのトランザクションログに関する包括的なレポート(トランザクションログのバックアップレポートなど)を生成します。また、SQLインスタンスの異常なアクティビティを検知するリアルタイムアラートの設定も可能です。アラートにより、データベース管理者はSMSやメールで通知を受け取り、潜在的な脅威や攻撃について事前に把握できます。EventLog AnalyzerのSQL Server監査機能については、こちら をご確認ください。