2009年3月17日火曜日

「DBCC LOG」で SQLServer のトランザクションログを見る

SQLServer のアンドキュメンテッドコマンド、「DBCC LOG」を試す。
 

何のツールかと言うと、トランザクションログを閲覧することが出来るというものらしい。
トランザクションログを取っており、かつ切り捨ててなければ、更新状況が順を追ってわかるということになる。
 

使いこなすと便利そうだ。
とりあえず手元にあったSQLServer2000で実験、接続には2005のマネジメントスタジオを利用。
 
 

とりあえず簡単に解析できるよう、単純なサンプルを用意しよう。


  1. DB [sawatest01]作成

  2. テーブル[Table_1]作成、カラムはnchar(10)の[test]1つ

  3. [Table_1]に 'ABABAB' と文字列挿入(INSERT)


 

ではトランザクションがコミットされたところで、ログを出してみよう。

DBCC LOG (sawatest01,4)
4 の部分は出力の詳細度を示す、"-1から4" まであって、レコードの中身は4でしか出てこない。
 
サンプルの INSERT に関する出力はこんな感じ。
 

Current LSN,Operation,Context,Transaction ID,Tag Bits,Log Record Length,Previous LSN,Flag Bits,Data Offset,Record Data,Description
0000001d:00000046:0001,LOP_BEGIN_XACT,LCX_NULL,0000:00000951,0x0000,60,00000000:00000000:0000,0x0200,0,0x00003C000000000000000000000080005109000000000200010000003A000000010000000100BA421498C900CF9B00000100060044004D004C001800,DML
0000001d:00000046:0002,LOP_INSERT_ROWS,LCX_HEAP,0000:00000951,0x0000,84,0000001d:00000046:0001,0x1200,0,0x000054001D000000460000000100020151090000000012000F000000010002001F83D7751D00000045000000020000000000000001001B0010001800410042004100420041004200200020002000200001000000,
0000001d:00000046:0003,LOP_DELTA_SYSIND,LCX_CLUSTERED,0000:00000951,0x0000,80,0000001d:00000046:0002,0x0200,0,0x000050001D000000460000000200090251090000000002001800000001001F00020000001D00000045000000030000000000000000000000000000001F83D77501000000000000000100000000000000,
0000001d:00000046:0004,LOP_COMMIT_XACT,LCX_NULL,0000:00000951,0x0000,52,0000001d:00000046:0001,0x0200,0,0x000034001D000000460000000100810051090000000002001498C900CF9B00001D0000004600000001000000000000000000BA42,



なんのこっちゃ。。。
要は"Record Data" の部分が更新されたデータに当たり、それを解析すればいいみたいだが。
 

かろうじて "LOP_INSERT_ROWS" の行で "0041 0042 0041 0042 0041 0042" という文字列があるのが分かった。
ASCIIコードで 「0x41=A, 0x42=B」 なので、メソッド、更新されたデータともに確かに記述されているようだ。
 
 

さて、いくらトランザクションログから拾えるからといって、これを解析しろといわれるのはちょっと遠慮したいな。いっそ知らなかったことにしようか...
 
 
 

...と思ったところ、どうやら 株式会社ヴィバークさんの sarasa というツール が、DBCCの解析結果をきっちり見せてくれる模様。
 

180秒間使える体験版が あったので使ってみた、だいぶ快適にログを解析してくれるのでナイス。
FAQを見るに自前で解析、完全に独自使用という泣かせるつくりになっている。
 

解析が必要になるケースがあったら買ってもらおう。