Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Base 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)