Вы можете использовать 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 Internals Viewer, чтобы помочь в этом отношении (И я считаю, что также имеется исходный код для Mark RasmussenOrca MDF, который предположительно имеет некоторый код для декодирования внутреннего формата строки).
Для примера этого в TSQL см. this blog post, который показывает, что вполне возможно извлечь полезную информацию из журнала до тех пор, пока цель проекта ограничена. Написание полностью обработанного журнала, который мог бы справиться с изменениями схемы в объектах и вещами, такими как разреженные столбцы (и индексы хранилища столбцов в следующей версии), скорее всего, будет огромным объемом работы.
Чтобы сделать то, что именно? –
Возможный дубликат [SQL Server Transaction Log Explorer/Analyzer] (http://stackoverflow.com/questions/3789443/sql-server-transaction-log-explorer-analyzer) –