Partilhar via


utilitário de diferenças de tabela

Aplica-se a:SQL ServerBanco de Dados SQL do AzureInstância Gerenciada SQL do Azure do Azure Synapse AnalyticsAnalytics Platform System (PDW)

O utilitário tablediff é usado para comparar os dados em duas tabelas para não convergência e é útil para solucionar problemas de não convergência em uma topologia de replicação. Este utilitário pode ser usado a partir do prompt de comando ou em um arquivo em lotes para executar as seguintes tarefas:

  • Compare cada linha entre uma tabela de origem numa instância do SQL Server que atua como um Publisher de replicação e a tabela de destino em uma ou mais instâncias do SQL Server que atuam como Subscritores de replicação.

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

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

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

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

Observação

O utilitário tablediff faz parte das ferramentas de replicação do SQL Server. No SQL Server 2022 (16.x), pode encontrar tablediff.exe na sua localização padrão de C:\Program Files\Microsoft SQL Server\160\COM após a instalação da funcionalidade de replicação.

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 suportados.

-sourceserver source_server_name[\instance_name]

Especifica o nome do servidor de origem. Especifique source_server_name para a instância padrão do SQL Server. Especifique source_server_name\instance_name para uma instância nomeada do SQL Server.

- sourcedatabase source_database

Especifica o nome do banco de dados de origem.

-sourcetable source_table_name

Especifica o nome da tabela de origem que está sendo verificada.

-sourceschema source_schema_name

O proprietário do esquema da tabela de origem. Por padrão, assume-se que o proprietário da tabela seja dbo.

- sourcepassword source_password

Especifica a senha para o logon usado para se conectar ao servidor de origem usando a Autenticação do SQL Server.

Important

Sempre que possível, forneça credenciais de segurança em tempo de execução. Se você precisar armazenar credenciais em um arquivo de script, proteja o arquivo para impedir o acesso não autorizado.

- sourceusersource_login

Especifica o logon usado para se conectar ao servidor de origem usando a Autenticação do SQL Server. Se source_login não for fornecido, a Autenticação do Windows será usada ao se conectar ao servidor de origem. Quando possível, use a autenticação do Windows.

-sourcelocked

Bloqueia a tabela fonte durante a comparação utilizando as pistas da tabela TABLOCK e HOLDLOCK.

-destinationserver destination_server_name[\instance_name]

Especifica o nome do servidor de destino. Especifique destination_server_name para a instância padrão do SQL Server. Especifique <destination_server_name>\<instance_name> para uma instância nomeada do SQL Server.

-destinationdatabase subscription_database

Especifica o nome do banco de dados de destino.

-DestinationTable destination_table

Especifica o nome da tabela de destino.

- destinationschema destination_schema_name

O proprietário do esquema da tabela de destino. Por padrão, assume-se que o proprietário da tabela seja dbo.

-destinationpassword destination_password

Especifica a senha para o logon usado para se conectar ao servidor de destino usando a Autenticação do SQL Server.

Important

Sempre que possível, forneça credenciais de segurança em tempo de execução. Se você precisar armazenar credenciais em um arquivo de script, proteja o arquivo para impedir o acesso não autorizado.

-destinationuser destination_login

Especifica o login usado para se ligar ao servidor de destino usando autenticação SQL Server. Se não fornecer destination_login, a ligação usa autenticação do Windows. Quando possível, use a autenticação do Windows.

-destinationlocked

Bloqueia a tabela de destino durante a comparação com as dicas de tabela TABLOCK e HOLDLOCK.

-b large_object_bytes

Especifica o número de bytes a comparar para colunas de tipos de dados de objetos grandes, que incluem texto, ntext, imagem, varchar(max), nvarchar(max) e varbinary(max). O valor padrão para large_object_bytes é o tamanho da coluna. Os dados maiores que large_object_bytes não são comparados.

-bf número_de_declarações

Especifica o número de instruções Transact-SQL para gravar no arquivo de script Transact-SQL atual quando a -f opção é usada. Quando o número de instruções Transact-SQL excede number_of_statements, um novo arquivo de script Transact-SQL é criado.

-c

Compara diferenças ao nível das colunas.

-dt

Elimina a tabela de resultados especificada por table_name se a tabela já existir.

-et table_name

Especifica o nome da tabela de resultados a ser criada. Se esta tabela já existir, deve usar -DT ou a operação falha.

-f [ file_name ]

Gera um script Transact-SQL para trazer a tabela no servidor de destino para convergência com a tabela no servidor de origem. Opcionalmente, você pode especificar um nome e um caminho para o arquivo de script de Transact-SQL gerado. Se não especificares file_name, a utilitária gera o ficheiro de script Transact-SQL no diretório onde é executado.

-o output_file_name

Especifica o nome completo e o caminho do arquivo de saída.

-q

Realiza uma comparação rápida apenas comparando as contagens de linhas e o esquema.

-rc número_de_tentativas

Número de vezes que o utilitário tenta novamente uma operação com falha.

- Ri retry_interval

Intervalo, em segundos, para esperar entre tentativas.

-strict

Compara estritamente o esquema de origem e destino.

-t tempos_de_espera_de_conexão

Define o período de tempo limite de conexão, em segundos, para conexões com o servidor de origem e o servidor de destino.

Valor de retorno

Value Descrição
0 Sucesso
1 Erro crítico
2 Diferenças de tabela

Observações

Não podes usar a utilidade tablediff com servidores que não sejam SQL Server.

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

Por padrão, o utilitário tablediff suporta os seguintes mapeamentos de tipo de dados entre colunas de origem e 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) texto
nvarchar(max) ntext
varbinary(max) imagem
texto varchar(max)
ntext nvarchar(max)
imagem varbinary(max)

Use a -strict opção para não permitir 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 ROWGUID coluna. Quando usar a -strict opção, a tabela de destino também deve ter uma chave primária, identidade ou ROWGUID coluna.

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

  • varchar(max)
  • nvarchar(max)
  • varbinary(max)
  • timestamp
  • xml
  • texto
  • ntext
  • imagem

Permissões

Para comparar tabelas, precisas SELECT ALL de permissões nos objetos de tabela que estás a comparar.

Para usar a -et opção, deve pertencer à função db_owner na base de dados fixa, ou pelo menos ter CREATE TABLE permissão na base de dados de subscrição e ALTER permissão no esquema do proprietário no servidor de destino.

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

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