Giá trị cho dbi_maxDbTimestampđược lưu trữ trên trang khởi động cơ sở dữ liệu. (trang 9 trong tệp dữ liệu chính).
Điều này không được ghi vào mỗi lần giá trị dấu thời gian được phân bổ. Thay vào đó, SQL Server dự trữ vài nghìn mỗi lần.
Ví dụ nếu @@DBTSlà 2000và dbi_maxDbTimestampcũng là 2000sau đó SQL Server cập nhật các giá trị văn bản trong trang khởi động để 6000lần sau nó cần một giá trị dấu thời gian.
Các giá trị từ 2001 - 5999được phân bổ trong bộ nhớ và "mất" nếu cơ sở dữ liệu được đặt ngoại tuyến và sau đó trực tuyến lại.
Bản sao lưu chứa bản sao của trang khởi động đã được cập nhật 6000. Vì vậy, khi khôi phục nó, các giá trị dấu thời gian sẽ bắt đầu từ số này. Nó không biết gì về bất kỳ giá trị trung gian bị mất.
Để thấy điều này
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)
Trên hệ thống của tôi cho một cơ sở dữ liệu mới được tạo ra @@dbtslà 2,000. Đầu DBCC PAGEra từ phía trên là

Tôi đã nhấn mạnh giá trị dấu thời gian. 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)
Bây giờ @@dbtsđược báo cáo như 2001nhưng nhìn vào trang chính nó.

giá trị dấu thời gian đã thay đổi. CAST(CAST(REVERSE(0x7017000000000000) AS BINARY(8)) AS BIGINT)= 6000.
Đang chạy
DBCC DBTABLE('DbtsTest')
tại thời điểm này để xem DBTABLEcấu trúc hiển thị cả hai giá trị
dbt_maxDbTimestamp = 6000
dbt_dbTimestamp = 2001
Cuối cùng
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
Sau đó nhìn vào bản sao lưu cho thấy nó là con số 6.000 được viết.

Khôi phục cơ sở dữ liệu và SELECT CAST(@@DBTS AS BIGINT)trả về truy vấn 6,000như mong đợi.