2009-08-30 7 views
2

This question a été posée il y a un certain temps, et même si elle couvre des solutions possibles pour SQL 2005 et 2008, il manque une bonne solution pour SQL 2000, qui est encore trop commune. J'ai besoin d'un moyen de surveiller certains champs d'une table de base de données pour les changements, et notifier mon application lorsque ces changements se produisent afin que je puisse les diffuser sur le réseau local comme des messages diffusés où tout le monde peut les écouter et les afficher comme des alertes (pensez quelque chose de similaire à des données boursières atteignant des seuils spécifiques).Comment surveiller les tables dans SQL Server pour les modifications

Je ne souhaite pas interroger la base de données pour plusieurs raisons. 1) Je ne souhaite pas ajouter de charge supplémentaire aux serveurs. 2) Je préfère recevoir les notifications en temps quasi réel plutôt que d'attendre que la fréquence d'interrogation expire. Maintenant, je pourrais mettre de la logique dans les applications qui mettent à jour la base de données, mais les données peuvent être mises à jour à partir de plusieurs sources, y compris le web et je ne veux pas traiter avec les serveurs web. Et je ne veux pas avoir à le maintenir dans 20 applications différentes (le problème le plus accablant). J'ai vu cela fait sur SQL 2000 en utilisant des procs et des triggers stockés étendus, mais les xp semblent difficiles à faire multi-plateforme, et ils se cassent lorsqu'ils sont installés sur SQL 2005 et 2008. Peut-être que c'est juste un mauvais code dans le exemples que j'ai vu, je ne suis pas sûr, mais je cherche quelque chose qui fonctionne dans SQL 2000 et versions ultérieures.

Des idées?

EDIT:

J'ai pensé à abandonner le support de 2000, mais cela ne résout pas vraiment mon problème. Je voudrais une solution qui va continuer à fonctionner pour les années à venir. Un problème avec de nombreuses technologies Microsoft est qu'ils abandonnent le support pour eux. Par exemple, les services de notification font ce que j'ai besoin de faire, mais ils ont décidé de déprécier cela en 2008 et il ne sera pas disponible dans la prochaine version. Donc, je suis à la recherche d'une solution qui a de bonnes chances de rester.

Répondre

5

solution très simple

Vous pourriez avoir un déclencheur qui appelle une page Web, une mise à jour de la notification.

Cela peut être très mauvais, car si le serveur ne peut pas accéder au Web, pour une raison quelconque, cela peut ralentir l'opération d'insertion. Aussi, en fonction de la fréquence des insertions, cela pourrait être tout aussi mauvais.

plan alternatif

Dans un trigger, écrire dans une file d'attente. (Je suis amoureux de MSMQ) Ensuite, ayez quelque chose qui attend dans cette file d'attente, et vous recevrez les messages en "temps réel". Encore une fois, il est sujet à la fréquence des mises à jour, comme ci-dessus.

meilleur plan

Avoir un déclencheur qui les messages de données à une table '' tblUpdatedThings, que vous ensuite sondage. Mais je sais que vous ne voulez pas interroger. Peu importe, je considère cela mieux, en raison des raisons que je décris.

2

Vous souhaitez que votre solution figure dans la base de données, mais vous souhaitez qu'elle soit indépendante de la base de données. Vous ne pouvez pas l'avoir dans les deux sens. Choisissez-en un.Si vous voulez être indépendant de la base de données, n'autorisez pas les sources à écrire directement dans la base de données, mais à appeler un service central que vous contrôlez, et où vous pouvez piéger tous les événements qui vous intéressent. Si vous souhaitez utiliser la fonctionnalité de base de données sans interrogation, vous devez déployer le code que la base de données appelle et vous dépendez des futures versions prenant en charge votre code.