Partager via


tablediff (utilitaire)

S’applique à :SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

L’utilitaire tablediff sert à comparer les données dans deux tables et à identifier une non-convergence. Il est utile pour résoudre des problèmes de non-convergence dans une topologie de réplication. Cet utilitaire peut être employé à partir de l'invite de commandes ou dans un fichier de commandes pour effectuer les tâches suivantes :

  • Comparez chaque ligne entre une table source dans une instance de SQL Server agissant en tant que serveur de publication de réplication et la table de destination à une ou plusieurs instances de SQL Server agissant en tant qu’Abonnés de réplication.

  • Comparaison rapide se limitant à la comparaison du nombre de lignes et du schéma.

  • Effectuer des comparaisons au niveau des colonnes.

  • Générez un script Transact-SQL pour corriger les différences au niveau du serveur de destination et amener les tables source et de destination dans la convergence.

  • Consignation des résultats dans un fichier de sortie ou dans une table de la base de données de destination.

Remarque

L’utilitaire tablediff fait partie des outils de réplication SQL Server. Dans SQL Server 2022 (16.x), vous pouvez trouver tablediff.exe à son emplacement C:\Program Files\Microsoft SQL Server\160\COM par défaut une fois la fonctionnalité de réplication installée.

Syntaxe

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 ]
}

Arguments

[ -? ]

Retour de la liste des paramètres pris en charge.

-sourceserver source_server_name[\instance_name]

Spécifie le nom du serveur source. Spécifiez source_server_name pour l’instance par défaut de SQL Server. Spécifiez source_server_name\instance_name pour une instance nommée de SQL Server.

-sourcedatabase source_database

Spécifie le nom de la base de données source.

-sourcetable source_table_name

Spécifie le nom de la table source en cours de vérification.

-sourceschema source_schema_name

Propriétaire du schéma de la table source. Par défaut, le propriétaire de la table est supposé être dbo.

-sourcepassword source_password

Spécifie le mot de passe de la connexion utilisée pour la connexion au serveur source avec l’authentification SQL Server.

Important

Lorsque cela est possible, fournissez les informations d'identification au moment de l'exécution. Si vous devez stocker des informations d'identification dans un fichier de script, sécurisez le fichier pour empêcher tout accès non autorisé.

-sourceuser source_login

Spécifie la connexion employée pour établir la connexion au serveur source avec l’authentification SQL Server. Si source_login n’est pas fourni, l’authentification Windows est employée lors de la connexion au serveur source. Lorsque c'est possible, utilisez l'authentification Windows.

-sourcelocked

Verrouille la table source pendant la comparaison à l’aide des TABLOCK et HOLDLOCK hints de table.

-destinationserver destination_server_name[\instance_name]

Spécifie le nom du serveur de destination. Spécifiez destination_server_name pour l’instance par défaut de SQL Server. Spécifiez <destination_server_name>\<instance_name> pour une instance nommée de SQL Server.

-destinationdatabase subscription_database

Spécifie le nom de la base de données de destination.

-destinationtable destination_table

Spécifie le nom de la table de destination.

-destinationschema destination_schema_name

Propriétaire du schéma de la table de destination. Par défaut, le propriétaire de la table est supposé être dbo.

-destinationpassword destination_password

Spécifie le mot de passe de la connexion utilisée pour établir une connexion au serveur de destination avec l’authentification SQL Server.

Important

Lorsque cela est possible, fournissez les informations d'identification au moment de l'exécution. Si vous devez stocker des informations d'identification dans un fichier de script, sécurisez le fichier pour empêcher tout accès non autorisé.

-destinationuser destination_login

Spécifie la connexion utilisée pour se connecter au serveur de destination à l’aide de l’authentification SQL Server. Si vous ne fournissez pas de destination_login, la connexion utilise l’authentification Windows. Lorsque c'est possible, utilisez l'authentification Windows.

-destinationlocked

Verrouille la table de destination pendant la comparaison à l’aide des hints de table TABLOCK et HOLDLOCK.

-b large_object_bytes

Spécifie le nombre d’octets à comparer pour les colonnes de type de données d’objet volumineux, qui incluent du texte, ntext, une image, varchar(max), nvarchar(max)et varbinary(max). La valeur par défaut de large_object_bytes est la taille de la colonne. Les données supérieures à large_object_bytes ne sont pas comparées.

-bf nombre_de_déclarations

Spécifie le nombre d’instructions Transact-SQL à écrire dans le fichier de script Transact-SQL actuel lorsque l’option -f est utilisée. Quand le nombre d’instructions Transact-SQL dépasse number_of_statements, un fichier de script Transact-SQL est créé.

-c

Compare les différences au niveau des colonnes.

-dt

Supprime la table de résultats spécifiée par table_name si la table existe déjà.

-et table_name

Spécifie le nom de la table de résultats à créer. Si cette table existe déjà, vous devez utiliser -DT ou l’opération échoue.

-f [ file_name ]

Génère un script Transact-SQL pour mettre en convergence la table du serveur de destination avec la table du serveur source. Vous pouvez éventuellement spécifier un nom et un chemin pour le fichier de script Transact-SQL généré. Si vous ne spécifiez pas file_name, l’utilitaire génère le fichier de script Transact-SQL dans le répertoire où il s’exécute.

-o output_file_name

Spécifie le nom complet et chemin d’accès du fichier de sortie.

-q

Effectue une comparaison rapide en comparant uniquement les nombres de lignes et le schéma.

-rc nombre_de_réessais

Nombre de fois où l'utilitaire retente une opération qui a échoué.

-ri retry_interval

Intervalle, en secondes, d'attente entre les tentatives.

-strict

Compare strictement le schéma source et de destination.

-t délais_d'expiration_de_connexion

Définit le délai d'attente de connexion, en secondes, pour les connexions au serveur source et au serveur de destination.

Valeur retournée

Valeur Description
0 Succès
1 Erreur critique
2 Différences entre les tables

Remarques

Vous ne pouvez pas utiliser l’utilitaire tablediff avec des serveurs non-SQL Server.

Les tables comprenant des colonnes de types de données sql_variant ne sont pas prises en charge.

Par défaut, l’utilitaire tablediff prend en charge les mappages de types de données suivants entre les colonnes source et de destination.

Type de données sources Type de données de destination
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)

Utilisez l’option -strict pour interdire ces mappages et effectuer une validation stricte.

La table source de la comparaison doit contenir au moins une clé primaire, une identité ou ROWGUID une colonne. Lorsque vous utilisez l’option -strict , la table de destination doit également avoir une clé primaire, une identité ou ROWGUID une colonne.

Le script Transact-SQL généré pour faire converger la table de destination n’inclut pas les types de données suivants :

  • varchar(max)
  • nvarchar(max)
  • varbinary(max)
  • timestamp
  • xml
  • text
  • ntext
  • image

Autorisations

Pour comparer des tables, vous avez besoin SELECT ALL d’autorisations sur les objets de table que vous comparez.

Pour utiliser l’option -et , vous devez être membre du rôle de base de données fixe db_owner , ou au moins disposer CREATE TABLE d’autorisations dans la base de données d’abonnement et ALTER l’autorisation sur le schéma du propriétaire de destination sur le serveur de destination.

Pour utiliser l’option -dt , vous devez être membre du rôle de base de données fixe db_owner , ou au moins disposer ALTER d’autorisations sur le schéma du propriétaire de destination sur le serveur de destination.

Pour utiliser l’option -o ou -f, vous devez posséder des autorisations d’écriture dans l’emplacement répertoire/fichier spécifié.