sys.dm_tran_version_store (Transact-SQL)

Retourne une table virtuelle qui affiche tous les enregistrements de version dans la banque des versions. L'exécution de sys.dm_tran_version_store n'est pas efficace, car elle interroge l'intégralité de la banque des versions qui peut être très volumineuse.

Chaque enregistrement avec gestion des versions est stocké sous forme de données binaires, avec des informations de suivi ou d'état. À l'instar des enregistrements des tables de la base de données, ceux de la banque des versions sont stockés dans des pages de 8 192 octets. Si un enregistrement excède ces 8 192 octets, il est réparti sur deux enregistrements.

Comme l'enregistrement avec gestion des versions est stocké sous forme binaire, cela ne pose pas de problème avec les différents classements des différentes bases de données. Utilisez sys.dm_tran_version_store pour trouver les versions précédentes des lignes sous forme binaire, puisqu'elles existent dans la banque des versions.

Syntaxe

sys.dm_tran_version_store

Table retournée

Nom de colonne

Type de données

Description

transaction_sequence_num

bigint

Numéro de séquence de la transaction qui produit la version de l'enregistrement.

version_sequence_num

bigint

Numéro de séquence de l'enregistrement avec version. Cette valeur est unique dans la transaction produisant la version.

database_id

int

ID de base de données de l'enregistrement avec gestion des versions.

rowset_id

bigint

ID d'ensemble de lignes de l'enregistrement.

status

tinyint

Indique si un enregistrement avec version a été réparti sur deux enregistrements. Si la valeur est 0, l'enregistrement est stocké sur une seule page. Si la valeur est 1, l'enregistrement est réparti sur deux enregistrements, lesquels sont stockés sur deux pages différentes.

min_length_in_bytes

smallint

Longueur minimale de l'enregistrement, en octets.

record_length_first_part_in_bytes

smallint

Longueur de la première partie de l'enregistrement avec gestion des versions, en octets.

record_image_first_part

varbinary(8000)

Image binaire de la première partie de l'enregistrement avec gestion des versions.

record_length_second_part_in_bytes

smallint

Longueur de la deuxième partie de l'enregistrement avec gestion des versions, en octets.

record_image_second_part

varbinary(8000)

Image binaire de la deuxième partie de l'enregistrement avec gestion des versions.

Autorisations

Nécessite l'autorisation VIEW SERVER STATE sur le serveur.

Pour afficher les colonnes record_image_first_part et record_image_second_part, l'autorisation CONTROL SERVER est nécessaire. Sinon, ces colonnes retourneront NULL.

Exemples

L'exemple suivant illustre un scénario de test dans lequel quatre transactions simultanées, chacune étant identifiée par un numéro de séquence de transaction, sont exécutées dans une base de données où les options ALLOW_SNAPSHOT_ISOLATION et READ_COMMITTED_SNAPSHOT sont définies avec la valeur ON. Les transactions suivantes sont exécutées :

  • XSN-57 est une opération Update exécutée avec le niveau d'isolement sérialisable.

  • XSN-58 est identique à XSN-57.

  • XSN-59 est une opération Select exécutée avec le niveau d'isolement de capture instantanée.

  • XSN-60 est identique à XSN-59.

La requête suivante est exécutée :

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;

Voici l'ensemble des résultats.

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

Le résultat indique que XSN-57 a créé trois versions de ligne à partir d'une table et que XSN-58 a créé une version de ligne à partir d'une autre table.