Der Wert für dbi_maxDbTimestampwird auf der Datenbankstartseite gespeichert. (Seite 9 in der Primärdatendatei).
Dies wird nicht jedes Mal geschrieben, wenn ein Zeitstempelwert zugewiesen wird. Stattdessen reserviert SQL Server jeweils einige Tausend.
Wenn beispielsweise @@DBTSis 2000und the dbi_maxDbTimestampis ist, 2000aktualisiert SQL Server den auf der Startseite geschriebenen Wert auf 6000das nächste Mal, wenn ein Zeitstempelwert benötigt wird.
Die Werte von 2001 - 5999werden im Speicher zugewiesen und "verloren", wenn die Datenbank offline und dann wieder online gesetzt wird.
Die Sicherung enthält die Kopie der Startseite, auf die aktualisiert wurde 6000. Nach dem Wiederherstellen beginnen die Zeitstempelwerte mit dieser Zahl. Es weiß nichts über verlorene Zwischenwerte.
Um das zu sehen
CREATE DATABASE DbtsTest
GO
USE DbtsTest
GO
DBCC TRACEON(3604);
CREATE TABLE T (X ROWVERSION)
SELECT CAST(@@dbts AS BIGINT);
DBCC PAGE(DbtsTest,1,9,1)
Auf meinem System für eine neu erstellte Datenbank @@dbtsist 2,000. Die DBCC PAGEAusgabe von oben ist

Ich habe den Zeitstempelwert hervorgehoben. CAST(CAST(REVERSE(0xD007000000000000) AS BINARY(8)) AS BIGINT)=2000
INSERT INTO T DEFAULT VALUES
SELECT CAST(@@dbts AS BIGINT);
DBCC PAGE(DbtsTest,1,9,1)
Jetzt wird das @@dbtsals 2001aber auf die Seite selbst schauend gemeldet .

Der Zeitstempelwert hat sich geändert. CAST(CAST(REVERSE(0x7017000000000000) AS BINARY(8)) AS BIGINT)= 6000.
Laufen
DBCC DBTABLE('DbtsTest')
Zu diesem Zeitpunkt zeigt die DBTABLEStruktur beide Werte an
dbt_maxDbTimestamp = 6000
dbt_dbTimestamp = 2001
Schließlich
BACKUP DATABASE [DbtsTest] TO
DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL11.SQL2012\MSSQL\Backup\DbtsTest.bak'
WITH NOFORMAT,
NOINIT,
NAME = N'DbtsTest-Full Database Backup',
SKIP,
NOREWIND,
NOUNLOAD,
STATS = 10
Ein Blick auf das Backup zeigt dann, dass es sich um die 6.000-Zahl handelt, die geschrieben wurde.

Das Wiederherstellen der Datenbank und das Abfragen von SELECT CAST(@@DBTS AS BIGINT)Retouren 6,000wie erwartet.