Vendredi 6 août 2010
5
06
/08
/Août
/2010
12:35
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