Saltar al contenido

Leer el registro de transacciones de SQL Server

Puede que se de el caso de que encuentres algún fallo con tu código o trabajo, recuerda probar siempre en un ambiente de testing antes subir el código al proyecto final.

Solución:

Puedes 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 delete y insert operación IIRC la [RowLog Contents 0] contiene toda la fila insertada y eliminada. Las actualizaciones son un poco más complicadas porque solo se puede registrar una fila parcial.

Para decodificar este formato de fila, debe comprender cómo se almacenan internamente las filas en SQL Server. El libro Microsoft SQL Server 2008 Internals cubre esto con cierto detalle. También puede descargar SQL Server Internals Viewer para ayudar en este sentido (y creo que el código fuente de Orca MDF de Mark Rasmussen también está disponible, que presumiblemente tiene algún código para decodificar el formato de fila interna).

Para ver un ejemplo de cómo hacer esto en TSQL, consulte esta publicación de blog que demuestra que es perfectamente posible extraer información útil del registro siempre que el objetivo del proyecto sea limitado. Sin embargo, escribir un lector de registro completo que pueda hacer frente a los cambios de esquema en los objetos y cosas como columnas dispersas (e índices de almacenamiento de columnas en la próxima versión) probablemente sea una gran cantidad de trabajo.

Hay varias funciones y comandos de SQL Server (p. ej., fn_dblog, fn_dump_dblog y DBCC PAGE) que potencialmente proporcionan una forma de ver el contenido del archivo LDF. Sin embargo, se requiere un conocimiento significativo de T-SQL para usarlos, algunos no están documentados y los resultados que proporcionan son difíciles de convertir a un formato legible por humanos. Los siguientes son ejemplos de cómo ver el contenido del archivo LDF usando funciones y comandos de SQL Server:

1 – Aquí hay un ejemplo usando fn_dblog para leer un registro de transacciones en línea, con un resultado de 129 columnas (aquí solo se muestran 7)

ingrese la descripción de la imagen aquí

2: la función fn_dump_dblog se utiliza para leer copias de seguridad nativas o comprimidas de forma nativa del registro de transacciones. El resultado es similar:

ingrese la descripción de la imagen aquí

Desafortunadamente, no hay documentación oficial disponible para las funciones fn_dblog y fn_dump_dblog. Para traducir las columnas, debe estar familiarizado con la estructura interna y el formato de datos, las banderas y su número total en una fila de datos

3 – La PÁGINA DBCC se utiliza para leer el contenido de los archivos en línea de la base de datos: MDF y LDF. El resultado es una salida hexadecimal que, a menos que tenga un editor hexadecimal, será difícil de interpretar.

ingrese la descripción de la imagen aquí

Select * 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') 

obtiene toda la información relacionada con la transacción utilizando la consulta anterior … donde la columna de registro muestra su registro real que está en formato hexadecimal …

consulte este enlace para obtener sus datos en un formato legible por humanos. Chequea aquí

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *