Du kan bruge sys.fn_dblog
for at læse transaktionsloggen. Eksempel nedenfor.
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')
For en delete
og insert
operation IIRC [RowLog Contents 0]
indeholder hele rækken indsat og slettet. Opdateringer er lidt mere komplicerede, idet kun en delvis række kan logges.
For at afkode dette rækkeformat skal du forstå, hvordan rækker lagres internt i SQL Server. Bogen Microsoft SQL Server 2008 Internals a> dækker dette i nogle detaljer. Du kan også downloade SQL Server Internals Viewer for at hjælpe i denne henseende (Og jeg tror på kildekoden til Mark Rasmussen 's Orca MDF er også tilgængelig, som formentlig har en eller anden kode til at afkode det interne rækkeformat).
For et eksempel på at gøre dette i TSQL se dette blogindlæg hvilket viser, at det er udmærket muligt at udtrække nyttig information fra loggen, så længe projektets formål er begrænset. At skrive en komplet log-læser, der kunne klare skemaændringer i objekterne og ting som sparsomme kolonner (og kolonnelagerindekser i næste version), ville dog sandsynligvis være en enorm mængde arbejde.