2012-01-26 54 views
8

Cómo podemos leer los registros de transacciones de SQL Server, sé usando el registro de DBCC (base de datos, 4) y generará el resultado de registro ahora quiero decodificar Log Record que es formato hexadecimal.Leer el registro de transacciones de SQL Server

0x00003E001C000000A500000001000200BE040000000006021D0000000100000018000000 (sólo una parte de los datos)

¿Hay algún método para leerlo en formato de texto o convertir los datos hexadecimales a text.i quieren hacer una herramienta que puede leerse herramientas de otros fabricantes están disponibles logs.third es decir, ApexSQL, pero son herramientas de pago.

+0

Para hacer qué exactamente? –

+0

posible duplicado de [SQL Server Transaction Log Explorer/Analyzer] (http://stackoverflow.com/questions/3789443/sql-server-transaction-log-explorer-analyzer) –

Respuesta

11

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.

0

No puedo entender sus necesidades, pero los datos de su registro se pueden extraer mediante herramientas como Lumigent LogExplorer. No sé nada de otra forma de hacer lo que quieres.

1
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') 

te transacción relacionada con toda la información a través de la columna anterior query..where registro de registro muestra el registro real que está en formato hexadecimal ..

verificación de este enlace para obtener sus datos en un formato legible por humanos. check here

+0

Fácilmente la mejor solución a esta pregunta. Acabo de guardar un par de cientos de filas para mí. –

+1

@MagicLasso - Contiene exactamente el mismo enlace y, en gran medida, el mismo código que publiqué tres meses antes. –

2

Hay varias funciones y comandos de SQL Server (por ejemplo, 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 importante 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. A continuación se presentan los ejemplos de visualización de contenido de archivos LDF usando funciones de SQL Server y comandos:

1 - Aquí hay un ejemplo usando fn_dblog para leer un registro de transacciones en línea, con un resultado de 129 columnas (sólo el 7 muestran aquí)

enter image description here

2 - La función fn_dump_dblog se utiliza para leer las copias de seguridad nativas o nativamente comprimidas del registro de transacciones. El resultado es similar:

enter image description here

Por desgracia, no hay documentación oficial está disponible para fn_dblog y funciones fn_dump_dblog.Para traducir las columnas, debe familiarizarse con la estructura interna y el formato de datos, los indicadores y su número total en una fila. Datos

3 - DBCC PAGE 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, va a ser difícil de interpretar

enter image description here

0

Paso 1. CREAR TABLA #hex ( [hex_Value] varbinary NULL )

Paso 2. insertar datos en la tabla, Ejemplo insertar en valores #hex (0x300008000F000000030000020015001B00536976754D79736F7265)

Paso 3. SELECCIONAR LTRIM (RTRIM (convert (varchar (max), SUSTITUIR (hex_Value, 0x00, 0x20)))) DE #hex

For more Information go through this link

Cuestiones relacionadas