Compartilhar via


Utilitário tablediff

O utilitário tablediff é usado para comparar dados em duas tabelas para não convergência, e é especialmente útil para solução de problemas de não convergência em uma topologia de replicação. Esse utilitário pode ser usado no prompt de comando ou em um arquivo em lotes para executar as seguintes tarefas:

  • Uma comparação linha por linha entre uma tabela de origem em uma instância do Microsoft SQL Server agindo como um Publicador de replicação e a tabela de destino em uma ou mais instâncias do SQL Server agindo como Assinantes de replicação.

  • Executa uma comparação rápida comparando apenas contagens de linha e esquema.

  • Executar comparações em nível de coluna.

  • Gerar um script Transact-SQL para corrigir discrepâncias no servidor de destino a fim de que haja convergência entre as tabelas de origem e de destino.

  • Registrar resultados em um arquivo de saída ou em uma tabela no banco de dados de destino.

Sintaxe

tablediff 
[ -? ] | 
{
        -sourceserver source_server_name[\instance_name]
        -sourcedatabase source_database 
        -sourcetable source_table_name 
    [ -sourceschema source_schema_name ]
    [ -sourcepassword source_password ]
    [ -sourceuser source_login ]
    [ -sourcelocked ]
        -destinationserver destination_server_name[\instance_name]
        -destinationdatabase subscription_database  
        -destinationtable destination_table 
    [ -destinationschema destination_schema_name ]
    [ -destinationpassword destination_password ]
    [ -destinationuser destination_login ]
    [ -destinationlocked ]
    [ -b large_object_bytes ] 
    [ -bf number_of_statements ] 
    [ -c ] 
    [ -dt ] 
    [ -et table_name ] 
    [ -f [ file_name ] ] 
    [ -o output_file_name ] 
    [ -q ] 
    [ -rc number_of_retries ] 
    [ -ri retry_interval ] 
    [ -strict ]
    [ -t connection_timeouts ] 
}

Argumentos

  • [ -? ]
    Retorna a lista de parâmetros com suporte.

  • -sourceserver source_server_name[**\instance_name]
    É o nome do servidor de origem. Especifica source_server_name para a instância padrão do SQL Server. Especifica source_server_name
    \**instance_name para uma instância nomeada do SQL Server.

  • -sourcedatabase source_database
    É o nome do banco de dados de origem.

  • -sourcetable source_table_name
    É o nome da tabela de origem que está sendo verificada.

  • -sourceschema source_schema_name
    O proprietário de esquema da tabela de origem. Por padrão, supõe-se que o proprietário da tabela seja dbo.

  • -sourcepassword source_password
    É a senha para o logon usada para a conexão com o servidor de origem que usa Autenticação do SQL Server. 

    Observação sobre segurançaObservação sobre segurança

    Quando possível, forneça credenciais de segurança em tempo de execução. Se você precisar armazenar credenciais em um arquivo de script, deverá proteger o arquivo para evitar acesso não autorizado.

  • -sourceuser source_login
    É o logon usado para a conexão com o servidor de origem que usa Autenticação do SQL Server. Se source_login não for fornecido, então a autenticação do Windows será usada no momento da conexão com o servidor de origem. Quando possível, use a Autenticação do Windows.

  • -sourcelocked
    A tabela de origem é bloqueada durante a comparação que usa dicas de tabela TABLOCK e HOLDLOCK .

  • -destinationserver destination_server_name[**\instance_name]
    É o nome do servidor de destino. Especifica destination_server_name para a instância padrão do SQL Server. Especifica destination_server_name
    \**instance_name para uma instância nomeada do SQL Server.

  • -destinationdatabase subscription_database
    É o nome do banco de dados de destino.

  • -destinationtable destination_table
    É o nome da tabela de destino.

  • -destinationschema destination_schema_name
    O proprietário de esquema da tabela de destino. Por padrão, supõe-se que o proprietário da tabela seja dbo.

  • -destinationpassword destination_password
    É a senha para o logon usada para a conexão com o servidor de destino que usa Autenticação do SQL Server. 

    Observação sobre segurançaObservação sobre segurança

    Quando possível, forneça credenciais de segurança em tempo de execução. Se você precisar armazenar credenciais em um arquivo de script, deverá proteger o arquivo para evitar acesso não autorizado.

  • -destinationuser destination_login
    É a senha para o logon usada para a conexão com o servidor de destino que usa Autenticação do SQL Server. Se destination_login não for fornecido, então a autenticação do Windows será usada no momento da conexão com o servidor. Quando possível, use a Autenticação do Windows.

  • -destinationlocked
    A tabela de destino é bloqueada durante a comparação que usa dicas de tabela TABLOCK e HOLDLOCK .

  • -b large_object_bytes
    É o número de bytes a comparar para colunas de tipo de dados de objetos grandes, o que inclui padrões de: text, ntext, image, varchar(max), nvarchar(max) e varbinary(max). large_object_bytes segue o padrão do tamanho da coluna. Dados acima de large_object_bytes não serão comparados.

  • -bf number_of_statements
    É o número de instruções Transact-SQL a gravar no arquivo de script Transact-SQL atual quando a opção -f é usada. Quando o número de instruções Transact-SQL exceder number_of_statements, um arquivo de script Transact-SQL novo será criado.

  • -c
    Compare diferenças em nível de coluna.

  • -dt
    Descarte a tabela de resultado especificada por table_name, se a tabela já existir.

  • -et table_name
    Especifica o nome da tabela de resultado a ser criada. Se essa tabela já existir, -DT deverá ser usado ou ocorrerá falha na operação.

  • -f [ file_name ]
    Gera um script Transact-SQL para trazer a tabela ao servidor de destino em convergência com a tabela no servidor de origem. Pode-se optar por especificar um nome e caminho para o arquivo de script Transact-SQL gerado. Se file_name não for especificado, o arquivo de script Transact-SQL será gerado no diretório no qual o utilitário é executado.

  • -o output_file_name
    É o nome e caminho completo do arquivo de saída.

  • -q
    Executa uma comparação rápida comparando apenas contagens de linha e esquema.

  • -rc number_of_retries
    Número de vezes que o utilitário repete uma operação com falha.

  • -ri retry_interval
    Intervalo, em segundos, a esperar entre repetições.

  • -strict
    Esquema de destino e origem são comparados de forma rigorosa.

  • -t connection_timeouts
    Define o período de tempo limite da conexão, em segundos, para conexões para o servidor de origem e servidor de destino.

Valor de retorno

Value

Descrição

0

Êxito

1

Erro crítico

2

Diferenças de tabela

Comentários

O utilitário tablediff não pode ser usado com servidores não SQL Server.

Não há suporte para tabelas com colunas de tipo de dados sql_variant.

Por padrão, o utilitário tablediff oferece suporte para os seguintes mapeamentos de tipo de dados entre colunas de origem e de destino.

Tipo de dados de origem

Tipo de dados de destino

tinyint

smallint, int ou bigint

smallint

int ou bigint

int

bigint

timestamp

varbinary

varchar(max)

text

nvarchar(max)

ntext

varbinary(max)

image

text

varchar(max)

ntext

nvarchar(max)

image

varbinary(max)

Use a opção -strict para desabilitar esses mapeamentos e executar uma validação rigorosa.

A tabela de origem na comparação deve conter pelo menos uma chave primária, identidade ou coluna ROWGUID. Quando você usa a opção -strict, a tabela de destino também deve ter uma chave primária, identidade ou coluna ROWGUID.

O script Transact-SQL gerado para trazer a tabela de destino em convergência não inclui os seguintes tipos de dados:

  • varchar(max)

  • nvarchar(max)

  • varbinary(max)

  • timestamp

  • xml

  • text

  • ntext

  • image

Permissões

Para comparar tabelas, é preciso ter permissões SELECT ALL nos objetos de tabela que são comparados.

Para usar a opção -et, é preciso ser membro da função de banco de dados fixa db_owner ou pelo menos ter a permissão CREATE TABLE no banco de dados de assinatura e a permissão ALTER no esquema do proprietário do destino no servidor de destino.

Para usar a opção -dt, é preciso ser membro da função de banco de dados fixa db_owner ou pelo menos ter a permissão ALTER no esquema do proprietário do destino no servidor de destino.

Para usar as opções -o ou -f, é preciso ter permissão de gravação para o local de diretório de arquivos especificado.

Consulte também

Tarefas

Comparar tabelas replicadas para descobrir diferenças (Programação de replicação)