Можете да използвате 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]
съдържа целия ред, вмъкнат и изтрит. Актуализациите са малко по-сложни, тъй като само частичен ред може да бъде регистриран.
За да декодирате този формат на ред, трябва да разберете как редовете се съхраняват вътрешно в SQL Server. Книгата Microsoft SQL Server 2008 Internals обхваща това в някои подробности. Можете също така да изтеглите инструмента за преглед на вътрешните елементи на SQL Server да помогне в това отношение (И вярвам, че изходният код за Марк Расмусен Orca MDF на също е наличен, който вероятно има някакъв код за декодиране на вътрешния формат на ред).
За пример за извършване на това в TSQL вижте тази публикация в блог което показва, че е напълно възможно да се извлече полезна информация от дневника, стига целта на проекта да е ограничена. Написването на пълноценен четец на журнали, който би могъл да се справи с промените в схемата в обектите и неща като редки колони (и индекси за съхраняване на колони в следващата версия), вероятно ще бъде огромно количество работа.