sys.dm_tran_version_store (Transact-SQL)

Gibt eine virtuelle Tabelle zurück, in der alle Versionsdatensätze im Versionsspeicher angezeigt werden. Die Ausführung von sys.dm_tran_version_store ist ineffizient, da der gesamte Versionsspeicher abgefragt wird und dieser sehr groß sein kann.

Jeder Versionsdatensatz wird als Binärdaten zusammen mit Protokollierungs- oder Statusinformationen gespeichert. Ähnlich wie Datensätze in Datenbanktabellen werden die Versionsspeicherdatensätze in 8192 Bytes umfassenden Seiten gespeichert. Falls ein Datensatz größer ist als 8192 Bytes, wird er in zwei unterschiedliche Datensätze geteilt.

Da der Versionsdatensatz als Binärdaten gespeichert wird, treten keine Probleme mit unterschiedlichen Sortierungen aus unterschiedlichen Datenbanken auf. Suchen Sie mit sys.dm_tran_version_store die vorherigen Versionen der Zeilen in der binären Darstellung, so, wie sie im Versionsspeicher vorhanden sind.

Syntax

sys.dm_tran_version_store

Zurückgegebene Tabelle

Spaltenname

Datentyp

Beschreibung

transaction_sequence_num

bigint

Sequenznummer der Transaktion, die die Datensatzversion generiert.

version_sequence_num

bigint

Sequenznummer des Versionsdatensatzes. Dieser Wert ist in der die Version generierenden Transaktion eindeutig.

database_id

int

Datenbank-ID des Versionsdatensatzes.

rowset_id

bigint

Rowset-ID des Datensatzes.

status

tinyint

Gibt an, ob ein Versionsdatensatz auf zwei Datensätze aufgeteilt wurde. Falls der Wert 0 beträgt, wird der Datensatz in einer Seite gespeichert. Falls der Wert 1 beträgt, ist der Datensatz auf zwei Datensätze aufgeteilt, die in zwei unterschiedlichen Seiten gespeichert sind.

min_length_in_bytes

smallint

Maximale Länge des Datensatzes (in Bytes).

record_length_first_part_in_bytes

smallint

Länge des ersten Teiles des Versionsdatensatzes (in Bytes).

record_image_first_part

varbinary(8000)

Binäres Bild des ersten Teiles des Versionsdatensatzes.

record_length_second_part_in_bytes

smallint

Länge des zweiten Teiles des Versionsdatensatzes (in Bytes).

record_image_second_part

varbinary(8000)

Binäres Bild des zweiten Teiles des Versionsdatensatzes.

Berechtigungen

Erfordert die VIEW SERVER STATE-Berechtigung auf dem Server.

Für das Anzeigen der Spalten record_image_first_part und record_image_second_part ist die CONTROL SERVER-Berechtigung erforderlich. Andernfalls geben diese Spalten NULL zurück.

Beispiele

Im folgenden Beispiel wird ein Testszenario verwendet, in dem vier gleichzeitige Transaktionen, die jeweils durch eine Transaktionssequenznummer (XSN) identifiziert werden, in einer Datenbank ausgeführt werden, für die die Optionen ALLOW_SNAPSHOT_ISOLATION und READ_COMMITTED_SNAPSHOT auf ON festgelegt sind. Die folgenden Transaktionen werden ausgeführt:

  • Bei XSN-57 handelt es sich um einen UPDATE-Vorgang unter der serialisierbaren Isolation.

  • XSN-58 entspricht XSN-57.

  • Bei XSN-59 handelt es sich um einen SELECT-Vorgang unter der Snapshotisolation.

  • XSN-60 entspricht XSN-59.

Die folgende Abfrage wird ausgeführt.

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;

Dies ist das Resultset.

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

Die Ausgabe zeigt an, dass XSN-57 drei Zeilenversionen aus einer Tabelle und XSN-58 eine Zeilenversion aus einer anderen Tabelle erstellt hat.