Partager l'article ! l'Utilitaire "TableDiff.exe": L'utilitaire tablediff (disponible à partir de Microsoft SQL server 2005) sert à comparer les données de deux ta ...
L'utilitaire tablediff (disponible à partir de Microsoft SQL server 2005) sert à comparer les données de deux tables dans le but de détecter une non-convergence ; il est particulièrement utile pour résoudre les 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 :
- Une comparaison ligne par ligne entre une table source dans une instance de Microsoft SQL Server agissant comme serveur de publication de réplication et la table de destination dans une ou plusieurs instances de SQL Server agissant comme abonnés de réplication.
- Comparaison rapide se limitant à la comparaison du nombre de lignes et du schéma.
- Comparaisons au niveau des colonnes.
- Génération d'un script Transact-SQL pour corriger les différences sur le serveur de destination afin de mettre en convergence les tables source et de destination.
- Consignation des résultats dans un fichier de sortie ou dans une table de la base de données de destination.
Dans le cadre de mon activté professionnelle, j’ai eu à utiliser cet utilitaire lors d’une montée de version de notre outil ETL (de Genio 4.7 vers Genio 7.0). En effet, le travail a consisté à :
- Recharger les données des bases de données opérationnelles dans le Datawarehouse de production en utilsant le version 4.7 de Genio;
- Recharger les données des bases de données opérationnelles dans le Datawarehouse de test en utilsant le version 7.0 de Genio;
- Tester la non convergence entre les tables chargées dans les deux Datawarehouses précédents
Et très objectivement, sans l’aide de cet l’outil, il m’aurait fallu au moins dix fois de temps pour tester la non convergence des tables.
Limites de cet outil
- Il ne peut pas être utilisé avec des serveurs de bases de données non SQL-Server
- Les tables comprenant des colonnes de types de données sql_variant ne sont pas prises en charge
Syntaxe complète
Vous trouverez la syntaxe complète sur ce lien : http://msdn.microsoft.com/fr-fr/library/ms162843.aspx
Résultat (valeur de retour)
|
Valeur |
Description |
|
0 |
Réussite |
|
1 |
Erreur critique |
|
2 |
Tables différentes |
Quelques remarques sur la confidentialité
Une mauvaise utilisation de cet utilitaire peut rapidement générer des problèmes de confidentialité. En effet, lors de l’exécution de cet utilitaire, vous devez fournir les informations de connexion aux bases de données, notamment le mot de passe. Lors d’un lancement directement en ligne de commande, le problème ne se pose pas vraiment. En revanche, lors d’un lancement à partir d’un fichier de commandes, le problème lié à la confidentialité du mot de passe se pose alors. En effet, généralement, l’on saisi « en dur » le mot de passe dans le fichier de commande !
Une solution à ce problème consiste à définir le mot de passe comme un paramètre du fichier de commandes. Vous trouverez ci-après, un exemple de fichier de commandes avec le mot de passe en paramètre.
|
@echo off cls echo ********************************************************************** echo Fichier de commandes pour un Lancement plus "sécurisé" echo de l’utilitaire tablediff.exe echo Par Ing. Benjamin EPEE NGANDO echo **********************************************************************
echo. if "%1"=="" goto Erreur pause Appuyez sur une touche pour commencer la test de non-convergence
echo ************************************************************** echo Comparaison proprement dite de la table SALARIE
tablediff.exe -sourceserver SRV-FRANCE -sourcedatabase DWH-RH -sourcetable SALARIE -sourceuser EPEE -sourcepassword %1 -destinationserver SRV-FRANCE -destinationdatabase DWH-RH-TEST -destinationtable SALAIRE -destinationuser EPEE -destinationpassword %1 -c -dt -et TABLERESULTAT_TDIFF_SALARIE
REM echo Comparaison terminée goto Fin
:Erreur Rem aucun paramètre (le mot de passe donc) n’as été passé echo Le mot de passe n'a pas été passe en paramètre
:Fin pause Appuyez sur une touche pour quitter l'écran MS-DOS
|
Quelques explications sur ce fichier de commandes
SRV-FRANCE : c’est le nom du serveur qui héberge la base de données source (dans notre exemple il héberge aussi la base de données cible)
DWH-RH : c’est le nom de la base de données source
EPEE : c’est le nom de connexion à la base de données source (dans notre exemple, il est identique à celui utilisé pour se connecter à la base de données cible).
DWH-RH-TEST : c’est le nom de la base de données cible
%1 : Représente le premier (et unique dans notre exemple) paramètre passé au fichier de commande
TABLERESULTAT_TDIFF_SALARIE : c’est le nom de la table qui contiendra le résultat. Cette table sera créée automatiquement - par l'utilitaire en utilisant les informations de connexion fournies - dans la base de données cible.
Exemple d’utilisation de notre fichier de commande
Derniers Commentaires