Puede usar sys.fn_dblog
para leer el registro de transacciones. Ejemplo a continuación.
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')
Para una IIRC delete
y insert
operación la [RowLog Contents 0]
contiene toda la fila insertada y eliminado. Las actualizaciones son un poco más complicadas ya que solo se puede registrar una fila parcial.
Para decodificar este formato de fila, debe comprender cómo se almacenan las filas internamente en SQL Server. El libro Microsoft SQL Server 2008 Internals cubre esto con cierto detalle. También puede descargar SQL Server Internals Viewer para obtener ayuda en este sentido (y creo que el código fuente para Mark Rasmussen 's Orca MDF también está disponible, lo que presumiblemente tiene algún código para decodificar el formato de fila interna).
Para ver un ejemplo de cómo hacerlo en TSQL, consulte this blog post, que demuestra que es perfectamente posible extraer información útil del registro siempre que el objetivo del proyecto sea limitado. Escribir un completo lector de registro que podría hacer frente a los cambios de esquema en los objetos y cosas como columnas dispersas (y los índices de almacén de columnas en la próxima versión) probablemente sería una gran cantidad de trabajo.
Para hacer qué exactamente? –
posible duplicado de [SQL Server Transaction Log Explorer/Analyzer] (http://stackoverflow.com/questions/3789443/sql-server-transaction-log-explorer-analyzer) –