Surveiller les Changements dans les Tables SQL Server

Cherchez-vous un moyen de surveiller votre base de données SQL Server pour des modifications au sein d’une table, mais souhaitez éviter d’utiliser des déclencheurs ou d’apporter des modifications à la structure de la base de données ? C’est un défi courant pour de nombreux développeurs, en particulier lors de la création d’applications qui s’intègrent avec des produits tiers où vous n’avez aucun contrôle sur la structure des tables. Dans ce guide, nous allons démontrer une solution simple en utilisant la fonction BINARY_CHECKSUM dans T-SQL, adaptée pour SQL Server 2000 SP4 et les versions plus récentes.

Le Défi

Il se peut que vous développiez un outil de visualisation de données dans le cadre d’un framework plus large et que vous souhaitiez vérifier les modifications dans les données d’une table sans activer des spécifications de déclencheur ou modifier les structures de table existantes. Le besoin ici est de détecter efficacement toute modification et de déclencher des réponses dans votre application sans impacter les performances.

Exigences Clés :

  • Surveiller les modifications des données, pas de la structure de la table.
  • Éviter les déclencheurs ou les modifications de base de données.
  • Utiliser une méthode compatible avec SQL Server 2000 SP4 et les versions plus récentes.
  • Maintenir de bonnes performances, même avec un nombre élevé d’utilisateurs.

La Solution : BINARY_CHECKSUM

La meilleure approche compte tenu des contraintes est d’utiliser la fonction BINARY_CHECKSUM disponible dans T-SQL. Cette fonction vous permet de calculer un checksum pour l’ensemble de la ligne, et en agrégeant ces checksums, vous pouvez surveiller efficacement les modifications des données de la table.

Mise en Œuvre Étape par Étape

  1. Configurer un Temporisateur : Décidez d’un intervalle (toutes les X secondes) pour vérifier les modifications. Cette approche aide à garder la trace des données sans surcharger le serveur.

  2. Requête Initiale pour le Checksum : Utilisez la requête T-SQL suivante pour calculer un checksum pour toutes les lignes de la table :

    SELECT CHECKSUM_AGG(BINARY_CHECKSUM(*))
    FROM sample_table
    WITH (NOLOCK);
    
    • CHECKSUM_AGG : Cette fonction retourne une seule valeur qui représente le checksum agrégé pour toutes les lignes de la table spécifiée.
  3. Stocker le Checksum Initial : Exécutez cette requête et stockez la valeur de checksum retournée. Cette valeur sera votre référence pour la comparaison lors des vérifications ultérieures.

  4. Surveiller les Changements : À l’intervalle que vous avez défini, exécutez à nouveau la requête de checksum et comparez la valeur nouvellement générée à la valeur stockée :

    • Si les checksums diffèrent, cela indique que certaines données dans la table ont changé.
    • Vous pouvez maintenant procéder à identifier les lignes qui ont changé en utilisant la requête suivante :
    SELECT row_id, BINARY_CHECKSUM(*)
    FROM sample_table
    WITH (NOLOCK);
    
  5. Comparer les Checksums des Lignes : Collectez les checksums de cette requête et comparez-les avec vos valeurs précédemment stockées pour identifier les lignes.

Conclusion

En mettant en œuvre cette stratégie, vous pouvez surveiller avec succès vos tables SQL Server pour des changements sans avoir besoin de déclencheurs ou de modifications intrusives. En utilisant la méthode BINARY_CHECKSUM, vous pouvez détecter les changements de données de manière efficace, vous permettant de réagir à ces modifications de manière programmatique au sein de votre application.

Cette solution de surveillance simple mais efficace peut optimiser les performances de votre application tout en assurant que vous maintenez une vue d’ensemble complète de vos données cruciales, même dans des environnements à forte demande.

Commencez à intégrer cette méthode dans vos flux de travail d’application dès aujourd’hui et obtenez un meilleur contrôle sur vos tâches de surveillance des données SQL Server !