sys.dm_tran_version_store (Transact-SQL)
Devuelve una tabla virtual en la que se muestran todos los registros de versiones en el almacén de versiones. sys.dm_tran_version_store no se ejecuta de forma eficaz, ya que consulta todo el almacén de versiones, que puede ser muy grande.
Cada registro de versión se almacena como datos binarios junto con alguna información de estado o seguimiento. Al igual que los registros en tablas de base de datos, los registros del almacén de versiones se almacenan en páginas de 8.192 bytes. Si un registro supera los 8.192 bytes, se dividirá en dos registros diferentes.
Puesto que el registro de versiones se almacena como binario, no existen problemas con las diferentes intercalaciones de bases de datos distintas. Use sys.dm_tran_version_store para buscar las versiones anteriores de las filas en representación binaria como existen en el almacén de versiones.
Sintaxis
sys.dm_tran_version_store
Tabla devuelta
Nombre de columna |
Tipo de datos |
Descripción |
---|---|---|
transaction_sequence_num |
bigint |
Número de secuencia de la transacción que genera la versión de registro. |
version_sequence_num |
bigint |
Número de secuencia del registro de versión. Este valor es único en la transacción que genera la versión. |
database_id |
int |
Id. de la base de datos del registro de versiones. |
rowset_id |
bigint |
Id. del conjunto de filas del registro. |
status |
tinyint |
Indica si un registro de versiones se ha dividido en dos registros. Si el valor es 0, el registro está almacenado en una página. Si el valor es 1, el registro está dividido en dos registros almacenados en dos páginas diferentes. |
min_length_in_bytes |
smallint |
Longitud mínima del registro en bytes. |
record_length_first_part_in_bytes |
smallint |
Longitud de la primera parte del registro de versiones en bytes. |
record_image_first_part |
varbinary(8000) |
Imagen binaria de la primera parte del registro de versiones. |
record_length_second_part_in_bytes |
smallint |
Longitud de la segunda parte del registro de versiones en bytes. |
record_image_second_part |
varbinary(8000) |
Imagen binaria de la segunda parte del registro de versiones. |
Permisos
Se requiere el permiso VIEW SERVER STATE en el servidor.
Para ver las columnas record_image_first_part y record_image_second_part se necesita el permiso CONTROL SERVER. En caso contrario, estas columnas devolverán NULL.
Ejemplos
En el ejemplo siguiente se utiliza un escenario de prueba con cuatro transacciones simultáneas, identificadas con un número de secuencia de transacción (XSN), que se ejecutan en una base de datos con las opciones ALLOW_SNAPSHOT_ISOLATION y READ_COMMITTED_SNAPSHOT establecidas en ON. Se están ejecutando las siguientes transacciones:
XSN-57 es una operación de actualización con aislamiento serializable.
XSN-58 es igual que XSN-57.
XSN-59 es una operación de selección con aislamiento de instantáneas.
XSN-60 es igual que XSN-59.
Se ejecuta la siguiente consulta.
SELECT
transaction_sequence_num,
version_sequence_num,
database_id rowset_id,
status,
min_length_in_bytes,
record_length_first_part_in_bytes,
record_image_first_part,
record_length_second_part_in_bytes,
record_image_second_part
FROM sys.dm_tran_version_store;
Éste es el conjunto de resultados.
transaction_sequence_num version_sequence_num database_id
------------------------ -------------------- -----------
57 1 9
57 2 9
57 3 9
58 1 9
rowset_id status min_length_in_bytes
-------------------- ------ -------------------
72057594038321152 0 12
72057594038321152 0 12
72057594038321152 0 12
72057594038386688 0 16
record_length_first_part_in_bytes
---------------------------------
29
29
29
33
record_image_first_part
--------------------------------------------------------------------
0x50000C0073000000010000000200FCB000000001000000270000000000
0x50000C0073000000020000000200FCB000000001000100270000000000
0x50000C0073000000030000000200FCB000000001000200270000000000
0x500010000100000002000000030000000300F800000000000000002E0000000000
record_length_second_part_in_bytes record_image_second_part
---------------------------------- ------------------------
0 NULL
0 NULL
0 NULL
0 NULL
En la salida se muestra que XSN-57 ha creado tres versiones de fila de una tabla y que XSN-58 ha creado una versión de fila de otra tabla.