2015-07-13 19 views
5

Wir haben eine Anforderung für die Benachrichtigung externer Systeme von Änderungen in Daten in verschiedenen Tabellen in einer SQL Server-Datenbank. Die Auswahl der zu überwachenden Daten liegt etwas unter der Kontrolle des Benutzers (er kann aus einer Liste auswählen, was wir unterstützen). Die Empfänger der Benachrichtigungen können sich in einem lokal verbundenen Netzwerk befinden (d. H. In demselben Datenzentrum) oder sie können entfernt sein."Real Time" Datenänderungserkennung in SQL Server

Gegenwärtig verarbeiten wir dies anhand des Anwendungscodes innerhalb unserer Datenzugriffsebene, der Änderungen und Warteschlangenbenachrichtigungen in einer Service Broker-Warteschlange erkennt, die von einem Windows-Dienst überwacht wird, der die eigentliche Benachrichtigung ausführt. Nicht ganz in Echtzeit, aber nahe genug.

Es hat sich gezeigt, dass einige Wartungsprobleme aufgetreten sind. Deshalb untersuchen wir einen der Mechanismen zur Änderungserkennung, die in SQL Server integriert sind. Leider scheint keiner von denen, die ich angeschaut habe (ich glaube, ich habe sie alle angeschaut), sehr gut zu passen:

Ändern von Datenerfassung und Änderungsverfolgung: Hauptproblem ist, dass sie die erfasste Information abfragen müssen, um Änderungen festzustellen die an die Empfänger weitergegeben werden sollen. Ich vermute, das wird zu viel Overhead bringen.

Notification Services: Im Wesentlichen verwendet SQL Server als Webserver, was eine schreckliche Verschwendung von Lizenzen ist. Es erfordert auch Zugriff durch mindestens zwei Firewalls im Netzwerk, was aus Sicherheitsgründen nicht akzeptabel ist.

Abfragebenachrichtigung: Scheint der wahrscheinlichste Kandidat scheint aber nicht besonders gut zur dynamischen Auswahl der Datenelemente zu passen. Die Notwendigkeit, die Abfrage neu zu registrieren, nachdem jede Benachrichtigung bedeutet gesendet, dass wir SQL Server beschäftigt mit Verwaltung der Registrierungen

Ereignisbenachrichtigung halten würde: Entwickelt auf Datenbank- oder Instanzebene Ereignisse zu informieren, nicht wirklich für Datenänderung Erkennung.

Über die beste Idee, die ich mir ausgedacht habe, ist, CDC zu verwenden und Einfügeauslöser in die Änderungsdatentabellen zu setzen. Die Trigger würden etwas in eine Service Broker-Warteschlange einreihen, die von einem anderen Code verarbeitet würde, um die Benachrichtigungen auszuführen. Dies ist im Wesentlichen das, was wir jetzt tun, außer dass eine SQL Server-Funktion für die Änderungserkennung verwendet wird. Ich bin mir nicht einmal sicher, ob Sie diesen Tabellen Trigger hinzufügen können, aber ich dachte, ich würde Feedback bekommen, bevor ich viel Zeit mit einem POC verbringe.

Das scheint wie ein schrecklicher Umweg, um den Job zu erledigen. Gibt es etwas, das ich übersehen habe, das die Arbeit erleichtern wird oder habe ich eine dieser Funktionen falsch interpretiert?

Danke und ich entschuldige mich für die Länge dieser Frage.

+0

Welche Probleme sehen Sie mit Service Broker? Ich hätte es anders vorgeschlagen ... –

+0

Wir sehen nicht besonders Probleme mit Service Broker. Der Punkt dieser Frage ist, wie man die Änderungserkennung auf eine sauberere, universellere Weise durchführt. –

Antwort

0

Warum verwenden Sie keine Update- und Insert-Trigger? Ein Trigger kann den clr-Code ausführen, der erklärt wird enter link description here

+0

Ich habe sie betrachtet und sie können sich als die beste Lösung herausstellen. Sie sind wahrscheinlich akzeptabel, weil sie keine Daten ändern würden - einfach etwas in eine Service Broker-Warteschlange oder etwas ähnliches einfügen. Ich hatte gehofft, dass eines der anderen Features entweder einen signifikanten Vorteil bringen oder zumindest die Diskussion "Warum in aller Welt benutzt man Trigger" vermeiden würde. –

+0

Auslöser sind nicht schlecht, aber wie die meisten Dinge können sie schlecht verwendet werden. Wenn Trigger auf eine schlechte Art und Weise verwendet werden, kann dies zu großen Leistungsproblemen und den seltsamsten Fehlern führen. Aber wenn Sie sie richtig verwenden, können sie sehr hilfreich sein. – Luc