Możesz użyć sys.fn_dblog
czytać dziennik transakcji. Przykład poniżej.
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')
Dla delete
i insert
operacja IIRC [RowLog Contents 0]
zawiera cały wstawiony i usunięty wiersz. Aktualizacje są nieco bardziej skomplikowane, ponieważ można zarejestrować tylko częściowy wiersz.
Aby zdekodować ten format wiersza, musisz zrozumieć, w jaki sposób wiersze są przechowywane wewnętrznie w SQL Server. Książka Microsoft SQL Server 2008 Internals omówi to szczegółowo. Możesz też pobrać Przeglądarka danych wewnętrznych serwera SQL aby pomóc w tym zakresie (I wierzę, że kod źródłowy Mark Rasmussen Orka MDF jest również dostępny, który prawdopodobnie zawiera kod do dekodowania wewnętrznego formatu wiersza).
Aby zapoznać się z przykładem wykonania tego w TSQL, zobacz ten post na blogu co pokazuje, że uzyskanie przydatnych informacji z dziennika jest jak najbardziej możliwe, o ile cel projektu jest ograniczony. Napisanie pełnowymiarowego czytnika dzienników, który poradzi sobie ze zmianami schematu w obiektach i rzeczami, takimi jak rzadkie kolumny (i indeksy magazynu kolumn w następnej wersji), prawdopodobnie wymagałoby ogromnej pracy.