sys.dm_tran_transacción_actual. ¿Qué tan único es transaction_id?

Estoy capturando el id_transacción de sys.dm_tran_current_transaction en mis disparadores de auditoría. Lo que me gustaría saber es la singularidad de transaction_id. La documentación solo dice "ID de transacción de la instantánea actual".

Solo puedo suponer que esta "ID" se reutilizará en un momento posterior, pero agradecería alguna confirmación al respecto.

preguntado el 12 de junio de 12 a las 19:06

Interesante pregunta, esta la página de wikipedia parece relevante -

No creo que sea probable que la identificación se reutilice y que usted alguna vez lo note. El id_transacción es un bigint que puede llegar hasta 9,223,372,036,854,775,807. También parece incrementarse solo hacia arriba. -

@Zhenny, tenga en cuenta que la identificación se reutilizará. id_transacción se restablece al reiniciar SQL. -

2 Respuestas

Respondido el 12 de junio de 12 a las 19:06

Esto no muestra que los identificadores de transacción sean únicos o no únicos. No tiene relación con esta pregunta. - usr

Estoy de acuerdo. El hecho de que el tipo de datos sea un bigint es útil, pero no parece haber ninguna documentación que indique que la identificación de la transacción es única durante la vida de la base de datos. - aaron hudon

Transaction_id se reinicia en 0 después de reiniciar el servidor. - Pankaj

Gracias @abcdefghi Después de reiniciar SQL Server y registrar una nueva transacción, la transacción_id está cerca de cero donde antes la última transacción_id auditada estaba en los 2 millones. - aaron hudon

La respuesta de @abcdefghi es buena, pero solo para agregarla;

  • Transaction_id es el mismo dentro de una transacción,
  • fuera de una transacción explícita, las actualizaciones de transaction_id en cada lote,
  • id_transacción se restablece cuando se reinicia el servidor, por lo que encontrará el mismo id_transacción con el tiempo.

A lo que esto lleva es a que no puede usar transaction_id en las tablas de auditoría, debido a este escenario;

registro de auditoría insertado con id_transacción = 42 reinicio del servidor sql... 41 nuevos lotes ejecutados... registro de auditoría insertado con id_transacción = 42

Además, no puede usar la transacción_id como una marca de tiempo (los valores más altos no implican cambios posteriores) y no puede decir que la misma ID implica la misma transacción.

Respondido 31 Jul 14, 11:07

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.