Partilhar via


Gerenciar o controle de alterações (SQL Server)

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

Este artigo descreve como gerenciar o controle de alterações. Ele também descreve como configurar a segurança e determinar os efeitos no armazenamento e no desempenho quando o controle de alterações é usado.

Gerenciar o controle de alterações

As seções a seguir listam modos de exibição, permissões e configurações de catálogo que são relevantes para gerenciar o controle de alterações.

Visualizações do catálogo

Para determinar quais tabelas e bancos de dados têm o controle de alterações habilitado, você pode usar as seguintes exibições de catálogo:

Além disso, a vista de catálogo sys.internal_tables lista as tabelas internas que são criadas quando o rastreio de alterações está habilitado para uma tabela de utilizador.

Segurança

Para aceder às informações de acompanhamento de alterações usando as funcionalidades de acompanhamento de alterações, os principais devem ter as seguintes permissões:

  • SELECT permissão em pelo menos as colunas de chave primária na tabela com controle de alterações para a tabela que está sendo consultada.

  • VIEW CHANGE TRACKING permissão na tabela para a qual as alterações estão sendo obtidas. A VIEW CHANGE TRACKING permissão é necessária pelos seguintes motivos:

    • Os registros de controle de alterações incluem informações sobre linhas que foram excluídas. Os registros usam os valores de chave primária das linhas que foram excluídas. Uma parte interessada poderia ter recebido SELECT permissão para uma tabela com controle de alterações depois de alguns dados confidenciais terem sido eliminados. Nesse caso, você não gostaria que esse principal tivesse a capacidade de acessar essas informações excluídas usando o controle de alterações.

    • As informações de controle de alterações podem armazenar informações sobre quais colunas foram alteradas por operações de atualização. Pode ser recusada permissão a um agente para uma coluna que contenha informações confidenciais. No entanto, como as informações de controle de alterações estão disponíveis, um principal pode determinar que um valor de coluna foi atualizado, mas o principal não pode determinar o valor da coluna.

Compreender a sobrecarga de controle de alterações

Quando o controle de alterações está habilitado para uma tabela, algumas operações de administração são afetadas. A tabela a seguir lista as operações e os efeitos que você deve considerar.

Funcionamento Quando o controlo de alterações está ativado
DROP TABLE Todas as informações de controle de alterações da tabela eliminada são removidas.
ALTER TABLE DROP CONSTRAINT Uma tentativa de eliminar a PRIMARY KEY restrição falha. O controle de alterações deve ser desativado antes que uma PRIMARY KEY restrição possa ser descartada.
ALTER TABLE DROP COLUMN Se uma coluna que está a ser eliminada fizer parte da chave primária, a remoção da coluna não é permitida, independentemente do rastreamento de alterações.

Se a coluna a ser removida não fizer parte da chave primária, remover a coluna é bem-sucedida. No entanto, o efeito em qualquer aplicativo que esteja sincronizando esses dados deve ser entendido primeiro. Se o controle de alterações de coluna estiver habilitado para a tabela, a coluna descartada ainda poderá ser retornada como parte das informações de controle de alterações. É responsabilidade da aplicação gerir a coluna eliminada.
ALTER TABLE ADD COLUMN Se uma nova coluna for adicionada à tabela com alterações acompanhadas, a adição da coluna não será registada. Somente as atualizações e alterações feitas na nova coluna são acompanhadas.
ALTER TABLE ALTER COLUMN As alterações de tipo de dados de uma coluna de chave não primária não são registadas.
ALTER TABLE SWITCH A comutação de uma partição falhará se uma ou ambas as tabelas tiverem o controlo de alterações ativado.
DROP INDEX, or ALTER INDEX DISABLE O índice que impõe a chave primária não pode ser descartado ou desativado.
TRUNCATE TABLE O truncar uma tabela pode ser executado em uma tabela que tenha o controle de alterações habilitado. No entanto, as linhas que são excluídas pela operação não são rastreadas e a versão mínima válida é atualizada. Quando um aplicativo verifica sua versão, a verificação indica que a versão é muito antiga e uma reinicialização é necessária. Isso é o mesmo que o controle de alterações ser desativado e, em seguida, reativado para a tabela.

O uso do controle de alterações adiciona alguma sobrecarga às operações DML devido às informações de controle de alterações que estão sendo armazenadas como parte da operação.

Efeitos no DML

O controle de alterações foi otimizado para minimizar a sobrecarga de desempenho nas operações DML. A sobrecarga de desempenho incremental associada ao uso do controle de alterações em uma tabela é semelhante à sobrecarga incorrida quando um índice é criado para uma tabela e precisa ser mantido.

Para cada linha alterada por uma operação DML, uma linha é adicionada à tabela interna de controle de alterações. O efeito disso em relação à operação DML depende de vários fatores, tais como:

  • O número de colunas de chave primária

  • A quantidade de dados que está sendo alterada na linha da tabela do usuário

  • O número de operações que estão sendo executadas em uma transação

O isolamento de instantâneo, se usado, também tem um efeito sobre o desempenho de todas as operações DML, seja o controle de alterações esteja habilitado ou não.

Efeitos na armazenagem

Os dados de controle de alterações são armazenados nos seguintes tipos de tabelas internas:

  • Tabela de alterações internas

    Há uma tabela de alterações interna para cada tabela de usuário que tem o controle de alterações habilitado.

  • Tabela de operações internas

    Há uma tabela de transações interna para o banco de dados.

Essas tabelas internas afetam os requisitos de armazenamento das seguintes maneiras:

  • Para cada alteração em cada linha na tabela do usuário, uma linha é adicionada à tabela de alterações interna. Esta linha tem uma pequena sobrecarga fixa mais uma sobrecarga variável igual ao tamanho das colunas de chave primária. A linha pode conter informações de contexto opcionais definidas por um aplicativo. E, se o rastreamento de coluna estiver habilitado, cada coluna alterada exigirá 4 bytes na tabela de controle.

  • Para cada transação confirmada, uma linha é adicionada a uma tabela de transações interna.

Como acontece com outras tabelas internas, você pode determinar o espaço usado para as tabelas de controle de alterações usando o procedimento armazenado sp_spaceused . Os nomes das tabelas internas podem ser obtidos usando a exibição de catálogo sys.internal_tables , conforme mostrado no exemplo a seguir.

sp_spaceused 'sys.change_tracking_309576141'  
sp_spaceused 'sys.syscommittab'