sys.fn_dblog
を使用できます トランザクションログを読み取ります。以下の例。
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')
delete
の場合 およびinsert
操作IIRC[RowLog Contents 0]
挿入および削除された行全体が含まれます。更新は、一部の行のみをログに記録できるという点で、もう少し複雑です。
この行形式をデコードするには、行がSQLServerの内部にどのように格納されているかを理解する必要があります。本
TSQLでこれを行う例については、このブログ投稿 これは、プロジェクトの目的が限定されている限り、ログから有用な情報を抽出することが完全に可能であることを示しています。ただし、オブジェクトのスキーマ変更やスパース列(および次のバージョンの列ストアインデックス)などに対処できる本格的なログリーダーを作成することは、膨大な量の作業になる可能性があります。