2012-01-26 99 views
8

DBCCログ(データベース、4)を使用していることを知っており、ログ出力を生成するようになりましたが、今は16進形式のログレコードをデコードします。SQL Serverのトランザクションログを読み取る

0x00003E001C000000A500000001000200BE040000000006021D0000000100000018000000(データの一部のみ)

テキスト形式でそれを読んだりtext.iに進データを変換するための任意の方法があるlogs.thirdパーティのツールを読むことができるツールを作りたいご利用いただけますつまりApexSQLですが、それらは有料ツールです。

+0

#hex FROMを選択? –

+0

[SQL Serverトランザクションログエクスプローラ/アナライザ]の複製が可能です。(http://stackoverflow.com/questions/3789443/sql-server-transaction-log-explorer-analyzer) –

答えて

11

sys.fn_dblogを使用すると、トランザクションログを読み取ることができます。以下の例。 deleteinsert動作について

SELECT [RowLog Contents 0], 
     [RowLog Contents 1], 
     [Current LSN], 
     Operation, 
     Context, 
     [Transaction ID], 
     AllocUnitId, 
     AllocUnitName, 
     [Page ID], 
     [Slot ID] 
FROM sys.fn_dblog(NULL,NULL) 
WHERE Context IN ('LCX_MARK_AS_GHOST', 'LCX_HEAP', 'LCX_CLUSTERED') 
AND Operation IN ('LOP_DELETE_ROWS', 'LOP_INSERT_ROWS') 

IIRC [RowLog Contents 0]は、行全体を挿入、削除が含まれています。更新は、一部の行のみをログに記録できるという点で少し複雑です。

この行形式をデコードするには、行がSQ​​L Serverの内部でどのように格納されているかを理解する必要があります。本書Microsoft SQL Server 2008 Internalsでこれについて詳しく説明しています。この点については、SQL Server Internals Viewerをダウンロードすることもできます(Mark RasmussenOrca MDFのソースコードも利用可能ですが、おそらく内部の行形式をデコードするコードがあると思います)。

TSQLでこれを行う例については、this blog postを参照してください。これは、プロジェクトの目的が限定されている限り、ログから有用な情報を完全に抽出できることを示しています。オブジェクトのスキーマの変更やスパース列(次のバージョンでは列ストアのインデックス)のようなものに対処できる完全なログリーダーを書くことは、おそらく膨大な作業になるでしょう。トランザクションレコード列をログquery..where以上使用して、すべての関連情報を取得

0

あなたのニーズは理解できませんが、ログのデータはLumigent LogExplorerのようなツールで抽出できます。私はあなたが望むことをする別の方法について何も知らない。

1
Select * from sys.fn_dblog(NULL,NULL) 
WHERE Context IN ('LCX_MARK_AS_GHOST', 'LCX_HEAP', 'LCX_CLUSTERED') 
AND Operation IN ('LOP_DELETE_ROWS', 'LOP_INSERT_ROWS') 

は16進形式である、あなたの実際のレコード..

チェック人間が読める形式にデータを取得するには、このリンクを表示します。 check here

+0

この質問に対する簡単な解決策は簡単です。ちょうど私のために数百行を保存しました。 –

+1

@MagicLasso - これは、3ヶ月前に投稿したのとまったく同じリンクとほぼ同じコードを含んでいます。 –

2

LDFファイルの内容を表示する方法を提供するSQL Serverの関数とコマンド(fn_dblog、fn_dump_dblog、DBCC PAGEなど)がいくつかあります。しかし、それらを使用するにはT-SQLの重要な知識が必要であり、文書化されていないものと、人間が読める形式に変換するのが難しいものがあります。 は

ここで(ここで示すのみ7)129列の結果で、オンライン・トランザクション・ログを読み取るためにfn_dblogを使用した例である -

1:以下のSQL Serverの機能とコマンドを使用して、LDFファイルの内容を表示する例であること

enter image description here

2 - fn_dump_dblog関数は、トランザクションログのネイティブまたはネイティブに圧縮されたバックアップを読み取るために使用されます。結果は似ています

enter image description here

残念ながら、公式ドキュメントはfn_dblogとfn_dump_dblog機能のために利用可能ではありません。列を翻訳するには、内部構造とデータ形式、フラグ、およびその行番号の合計数に精通している必要があります。

3 - DBCC PAGEは、データベースのオンラインファイル(MDFとLDF)の内容を読み取るために使用されます。その結果、あなたがバイナリエディタを持っていない限り、表#hex( [hex_Value] varbinary型のNULL )

をCREATE

enter image description here

0

ステップ1. を解釈するのは難しいだろう進数出力であり、 挿入データテーブルに、ステップ2は、実施例 は#hex値(0x300008000F000000030000020015001B00536976754D79736F7265)

ステップ3. に挿入します正確に何を行うにはLTRIM(RTRIM(CONVERT(VARCHAR(MAX)、(hex_Value、0x00に、0x20のを)))REPLACE) For more Information go through this link

関連する問題