sp_table_validation (Transact-SQL)
Aplica-se: SQL Server
Retorna informações de número de linhas e soma de verificação em uma tabela ou exibição indexada, ou compara as informações de número de linhas e soma de verificação com a tabela ou exibição indexada. Esse procedimento armazenado é executado no Publicador no banco de dados de publicação e no Assinante, no banco de dados de assinatura.
Observação
sp_table_validation
não tem suporte para Publicadores Oracle.
Convenções de sintaxe de Transact-SQL
Sintaxe
sp_table_validation [ @table = ] 'table'
[ , [ @expected_rowcount = ] type_of_check_requested OUTPUT ]
[ , [ @expected_checksum = ] expected_checksum OUTPUT ]
[ , [ @rowcount_only = ] rowcount_only ]
[ , [ @owner = ] 'owner' ]
[ , [ @full_or_fast = ] full_or_fast ]
[ , [ @shutdown_agent = ] shutdown_agent ]
[ , [ @table_name = ] 'table_name' ]
[ , [ @column_list = ] 'column_list' ]
[ ; ]
Argumentos
@table [ = ] 'tabela'
O nome da tabela. table é sysname, sem padrão.
@expected_rowcount [ = ] expected_rowcount SAÍDA
Especifica se o número de linhas esperado na tabela deve ser retornado. @expected_rowcount é int, com um padrão de NULL
. Se NULL
, a contagem de linhas real é retornada como um parâmetro de saída. Se um valor for fornecido, esse valor será verificado no número de linhas atual para identificar qualquer diferença.
@expected_checksum [ = ] expected_checksum SAÍDA
Especifica se a soma de verificação esperada da tabela deve ser retornada. @expected_checksum é numérico, com um padrão de NULL
. Se NULL
, a soma de verificação real é retornada como um parâmetro de saída. Se um valor for fornecido, esse valor será verificado na soma de verificação atual para identificar qualquer diferença.
@rowcount_only [ = ] type_of_check_requested
Especifica o tipo de soma de verificação ou contagem de linhas a ser executada. @rowcount_only é smallint, com um padrão de 1
.
Se 0
, execute uma contagem de linhas e uma soma de verificação compatível com o SQL Server 7.0.
Se 1
, execute apenas uma verificação de contagem de linhas.
Se 2
, execute uma contagem de linhas e uma soma de verificação binária.
@owner [ = ] 'proprietário'
O nome do proprietário da tabela. @owner é sysname, com um padrão de NULL
.
@full_or_fast [ = ] full_or_fast
O método usado para calcular a contagem de linhas. @full_or_fast é tinyint, com um padrão de 2
, e pode ser um desses valores.
Valor | Descrição |
---|---|
0 |
Efetua contagem completa usando COUNT (*). |
1 |
O jejum conta a partir de sysindexes.rows . A contagem de linhas é sysindexes muito mais rápida do que a contagem de linhas na tabela real. No entanto, como sysindexes é atualizado preguiçosamente, a contagem de linhas pode não ser precisa. |
2 (padrão) |
Efetua contagem rápida condicional tentando primeiro o método rápido. Se o método rápido mostrar diferenças, reverterá ao método completo. Se expected_rowcount for NULL e o procedimento armazenado estiver sendo usado para obter o valor, um full COUNT(*) sempre será usado. |
@shutdown_agent [ = ] shutdown_agent
Se o Distribution Agent estiver em execução sp_table_validation
, especifica se o Distribution Agent deve ser desligado imediatamente após a conclusão da validação. @shutdown_agent é bit, com um padrão de 0
. Se 0
, o agente de replicação não for desligado. Se 1
, o erro 20578 for gerado e o agente de replicação for sinalizado para desligar. Este parâmetro é ignorado quando sp_table_validation
é executado diretamente por um usuário.
[ @table_name = ] 'table_name'
O nome da tabela da exibição usada para mensagens de saída. table_name é sysname, com um padrão de @table.
@column_list [ = ] 'column_list'
A lista de colunas que devem ser usadas na função de soma de verificação. column_list é nvarchar(4000), com um padrão de NULL
. Habilita validação de artigos de mesclagem para especificar uma lista de colunas que exclui colunas computadas e colunas de carimbo de data e hora.
Valores do código de retorno
Se estiver executando uma validação de soma de verificação e a soma de verificação esperada for igual à soma de verificação na tabela, sp_table_validation
retornará uma mensagem informando que a tabela passou na validação da soma de verificação. Caso contrário, ele retornará uma mensagem informando que a tabela pode estar fora de sincronização e relatará a diferença entre o número esperado e o número real de linhas.
Se estiver executando uma validação de contagem de linhas e o número esperado de linhas for igual ao número na tabela, sp_table_validation
retornará uma mensagem informando que a tabela passou na validação de contagem de linhas. Caso contrário, ele retornará uma mensagem informando que a tabela pode estar fora de sincronização e relatará a diferença entre o número esperado e o número real de linhas.
Comentários
sp_table_validation
é usado em todos os tipos de replicação. sp_table_validation
não tem suporte para Publicadores Oracle.
A soma de verificação computa uma CRC (verificação e redundância cíclica) de 32 bits em toda a imagem de linha na página. Ele não verifica seletivamente as colunas e não pode operar em uma exibição ou partição vertical da tabela. Além disso, a soma de verificação ignora o conteúdo das colunas de texto e imagem (por design).
Ao fazer uma soma de verificação, a estrutura da tabela deve ser idêntica entre os dois servidores; ou seja, as tabelas devem ter as mesmas colunas existentes na mesma ordem, os mesmos tipos e comprimentos de dados e as mesmas NULL
/NOT NULL
condições. Por exemplo, se o Publicador fez um CREATE TABLE
, depois um ALTER TABLE
para adicionar colunas, mas o script aplicado no Assinante é uma tabela simples CREATE
, a estrutura não é a mesma. Se você não tiver certeza de que a estrutura das duas tabelas é idêntica, examine sys.syscolumns e confirme se o deslocamento em cada tabela é o mesmo.
Os valores de ponto flutuante provavelmente gerarão diferenças de soma de verificação se o bcp no modo de caractere tiver sido usado, o que é o caso se a publicação tiver assinantes não SQL Server. Isso se deve a diferenças menores e inevitáveis na precisão ao efetuar conversão para e do modo de caractere.
Permissões
Para executar sp_table_validation
o , você deve ter permissões SELECT na tabela que está sendo validada.