sys.dm_tran_version_store (Transact-SQL)
Retorna uma tabela virtual que exibe todos os registros de versão no armazenamento de versão. sys.dm_tran_version_store é ineficiente para execução, pois requer o armazenamento de toda a versão, e isso pode ser muito grande.
Cada registro com controle de versão é armazenado como dados binários juntamente com algumas informações de rastreamento ou de status. Semelhante a registros em tabelas de banco de dados, os registros de armazenamento de versão são armazenados em páginas de 8.192 bytes. Se um registro exceder 8.192 bytes, ele será dividido em dois registros diferentes.
Porque o registro com controle de versão é armazenado como binário, não há nenhum problema com agrupamentos diferentes de bancos de dados diferentes. Use sys.dm_tran_version_store para encontrar as versões anteriores das linhas em representação binária como existem no armazenamento de versão.
Sintaxe
sys.dm_tran_version_store
Tabela retornada
Nome da coluna |
Tipo de dados |
Descrição |
---|---|---|
transaction_sequence_num |
bigint |
Número de seqüência da transação que gera a versão de registro. |
version_sequence_num |
bigint |
Número de seqüência da versão de registro. Este valor é exclusivo dentro da transação que gera a versão. |
database_id |
int |
ID do banco de dados do registro com controle de versão. |
rowset_id |
bigint |
ID do conjunto de linhas do registro. |
status |
tinyint |
Indica se um registro com controle de versão foi dividido em dois registros. Se o valor for 0, o registro será armazenado em uma página. Se o valor for 1, o registro será dividido em dois registros armazenados em duas páginas diferentes. |
min_length_in_bytes |
smallint |
Comprimento mínimo do registro em bytes. |
record_length_first_part_in_bytes |
smallint |
Comprimento em bytes da primeira parte do registro com controle de versão. |
record_image_first_part |
varbinary(8000) |
Imagem binária da primeira parte do registro com controle de versão. |
record_length_second_part_in_bytes |
smallint |
Comprimento em bytes da segunda parte do registro com controle de versão. |
record_image_second_part |
varbinary(8000) |
Imagem binária da segunda parte do registro com controle de versão. |
Permissões
Requer a permissão VIEW SERVER STATE no servidor.
Para exibir as colunas record_image_first_part e record_image_second_part, é necessária a permissão CONTROL SERVER. Caso contrário, essas colunas retornarão NULL.
Exemplos
O exemplo a seguir usa um cenário de teste no qual quatro transações simultâneas, cada uma identificada por um XSN (número de seqüência de transação), estão sendo executadas em um banco de dados no qual as opções ALLOW_SNAPSHOT_ISOLATION e READ_COMMITTED_SNAPSHOT estão definidas como ON. As seguintes transações estão sendo executadas:
XSN-57 é uma operação de atualização sob o isolamento serializável.
XSN-58 é o mesmo que XSN-57.
XSN-59 é uma operação de seleção sob o isolamento de instantâneo.
XSN-60 é o mesmo que XSN-59.
A consulta a seguir é 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 XSN-57 criou três versões de linha de uma tabela e XSN-58 criou uma versão da linha de outra tabela.