sql >> Database teknologi >  >> RDS >> Sqlserver

Læs SQL Server transaktionslog

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.



  1. PHP/MySQL:Opret ny forbindelse for hver forespørgsel?

  2. Maksimalt (anvendeligt) antal rækker i en Postgresql-tabel

  3. Hvornår skal du bruge SQL Server med Access? (Tip:Næsten altid)

  4. Gem php datetime i mysql-databasen