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.