Compartir a través de


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;

El conjunto de resultados es el siguiente.

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.