Partilhar via


sys.dm_tran_version_store (Transact-SQL)

Aplica-se a:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceBase de dados SQL no Microsoft Fabric

Devolve uma tabela virtual que mostra todos os registos de versões na loja de versões. sys.dm_tran_version_store é ineficiente de executar porque consulta todo o armazenamento de versões, e o armazenamento de versões pode ser muito grande.

Cada registo versionado é armazenado como dados binários juntamente com alguma informação de rastreio ou estado. Semelhante aos registos em tabelas de bases de dados, os registos de armazenamento de versões são armazenados em páginas de 8192 bytes. Se um registo exceder 8192 bytes, o registo será dividido entre dois registos diferentes.

Como o registo versionado é armazenado como binário, não há problemas com diferentes colações de diferentes bases de dados. Use sys.dm_tran_version_store para encontrar as versões anteriores das linhas em representação binária tal como existem na loja de versões.

Sintaxe

sys.dm_tran_version_store  

Tabela retornada

Nome da coluna Tipo de dados Description
transaction_sequence_num bigint Número de sequência da transação que gera a versão do registo.
version_sequence_num bigint Número de sequência do registo de versão. Este valor é único dentro da transação geradora de versões.
database_id int ID da base de dados do registo versionado.

No Banco de Dados SQL do Azure, os valores são exclusivos em um único banco de dados ou pool elástico, mas não em um servidor lógico.
rowset_id bigint ID de rowset do registo.
Situação tinyint Indica se um registo versionado foi dividido entre dois registos. Se o valor for 0, o registo é armazenado numa página. Se o valor for 1, o registo é dividido em dois registos que são armazenados em duas páginas diferentes.
min_length_in_bytes smallint Comprimento mínimo do registo em bytes.
record_length_first_part_in_bytes smallint Comprimento da primeira parte do registo versionado em bytes.
record_image_first_part varbinary(8000) Imagem binária da primeira parte do registo de versão.
record_length_second_part_in_bytes smallint Duração da segunda parte do registo de versão em bytes.
record_image_second_part varbinary(8000) Imagem binária da segunda parte do registo de versão.

Permissions

No SQL Server e na Instância Gerenciada do SQL, requer VIEW SERVER STATE permissão.

No Banco de Dados SQL Basic, S0e S1 objetivos de serviço e para bancos de dados em pools elásticos , a conta de de administrador do servidor, a conta de de administrador do Microsoft Entra ou a associação aode função de servidor ##MS_ServerStateReader## é necessária. Em todos os outros objetivos de serviço do Banco de dados SQL, é necessária a permissão VIEW DATABASE STATE no banco de dados ou a associação à função de servidor ##MS_ServerStateReader##.

Permissões para SQL Server 2022 e posterior

Requer a permissão VIEW SERVER PERFORMANCE STATE no servidor.

Examples

O exemplo seguinte utiliza um cenário de teste em que quatro transações concorrentes, cada uma identificada por um número de sequência de transação (XSN), estão a correr numa base de dados que tem as opções ALLOW_SNAPSHOT_ISOLATION e READ_COMMITTED_SNAPSHOT definidas para ON. As seguintes transações estão a decorrer:

  • O XSN-57 é uma operação de atualização sob isolamento serializável.

  • O XSN-58 é igual ao XSN-57.

  • O XSN-59 é uma operação de seleção sob isolamento de instantâneos.

  • O XSN-60 é igual ao XSN-59.

A seguinte consulta é executada.

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;  

Aqui está o conjunto de resultados.

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  

A saída mostra que o XSN-57 criou três versões de linhas a partir de uma tabela e o XSN-58 criou uma versão de linha a partir de outra tabela.

Ver também

Visualizações e funções de gerenciamento dinâmico (Transact-SQL)
Visualizações e funções de gerenciamento dinâmico relacionadas a transações (Transact-SQL)