Database Compare avec Kankuru

Qui n’a jamais été confronté à des bases de données SQL de différents environnements qui n’ont pas la même structure ?

Je travaille actuellement sur un projet de BI dans mon entreprise. Je ne suis pas seul dans l’équipe qui est composée de plusieurs développeurs. Chacun est sysadmin de l’instance de développement donc tout le monde modifie la structure des bases. Dans le DataWareHouse, certains créent des tables, d’autres modifient des vues, des indexs, des jobs, etc…

Le jour de la livraison, je découvre souvent que certaines modifications n’ont pas été scriptées et c’est à ce moment que les problèmes commencent… Sans outil adapté pour déterminer les différences entre l’environnement de développement et celui de production, je perds beaucoup de temps à déployer la nouvelle release.

Simple à réaliser ?

J’ai donc décidé d’ajouter un outil qui me convient à l’application Kankuru. A première vue, le challenge est assez simple, il suffit pour chaque objet de la base de données source de le scripter et de le comparer au script de l’objet correspondant dans la base de données cible. Oui mais :

    • Comment afficher le résultat pour que ce soit exploitable ? En effet, si je compare des centaines ou des milliers d’objets, il me faut une interface simple et efficace.
    • L’outil doit être rapide : sur une base avec des centaines d’objets, je ne peux pas attendre quelques heures pour obtenir un résultat !
    • Détecter les différences c’est bien, mais je veux voir les différences réels. Trouver un composant de différence de script s’est avéré plus compliqué que prévu.
    • L’utilisateur doit avoir un minimum de paramètres de configuration. Certains veulent certains objets, d’autres veulent faire des comparaison « Case Sensitive » ou sans les commentaires
    • Si je peux comparer les DDL des tables ou des procédures stockées, pourquoi ne pas proposer aussi de comparer également la sécurité, les jobs de l’agent, la configuration de l’instance..
    • .Et les données dans tout ça ? Si 2 tables de dimension sont identiques mais que les données ne le sont pas, ma mise en production va surement échouer, non ?

Bref, je me suis heurté à beaucoup de difficultés sur cet outil. Ce fut long mais je suis maintenant satisfait !

Ca ressemble à quoi ? Comment on s’en sert ?

L’outil est entièrement intégré à Kankuru, En ouvrant Database Compare, on retrouve donc toutes nos instances et les bases de données. Il suffit de sélectionner 2 bases et de cliquer sur le bouton « Compare » et c’est parti ! Pour l’affichage des résultats, j’ai trouvé un composant qui permet de mixer un Treeview et un GridView :

Database Compare TreeListView

Comment les objets sont scriptés ?

L’application utilise les bibliothèques SMO de Microsoft (SQL Server Management Objects) pour scripter les objets. C’est grâce à ce choix de technologie que l’outil est fiable et rapide. Bien évidemment, une fois que je récupère le script des objets il reste à trouver les éventuelles différences. Ca m’a permis de réviser mes connaissances sur les classes String, StringBuilder, etc…

Quel est le composant graphique utilisé pour surligner les différences ?

Après avoir passé de nombreuses heures de recherches et de tests de quelques composants existant, j’ai du me faire une raison : « Greg, tu vas devoir te débrouiller tout seul et mettre le nez dans les algorithmes ! »

Si dans un bloc de 10 lignes de textes j’ai un mot de différence, la ligne en question est très simple à surligner. Mais comment faire si une ligne est insérée en plein milieu ? Le décalage ne permet plus de comparer le script ligne à ligne. Je n’avais déjà pas beaucoup de cheveux sur la tête mais j’en ai quand même trouvé quelques uns pour me les arracher !

Database Compare différence des scripts

Et si je veux comparer les objets en supprimant les commentaires ?

Ou en ignorant la collation, la casse ou encore les espaces ? C’est facile, il suffit de cocher/décocher des cases !

Beaucoup d’objets à comparer

La plupart des objets SQL Server sont comparables. Je pense que vous devriez trouver votre bonheur dans la liste que je propose. L’outil permet de comparer :

  • La configuration globale de l’instance/base
  • La structure des objets
  • La sécurité
  • Les objets du SQL Agent (job, planification, opérateur, …)

Database Compare Objets à comparer

Et les données ?

Kankuru peut comparer les données de 2 tables. Mais contrairement à bon nombre d’outils, Kankuru est rapide et peu couteux en terme de ressources grâce à la magie des checksum.

Envie de le tester ?

Pour le moment, l’application est seulement en test pour quelques utilisateurs, mais elle ne devrait plus trop tarder à arriver…

Database Compare Overview

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Time limit is exhausted. Please reload CAPTCHA.