Wie

2009-08-30 8 views
2

This question für Änderungen Tabellen in SQL Server zu überwachen, wurde vor geraumer Zeit gefragt, und während es möglich, Lösungen für SQL 2005 und 2008 umfasst, es fehlt eine gute Lösung für SQL 2000, die immer noch viel zu häufig ist.Wie

Ich brauche eine Möglichkeit, bestimmte Felder einer Datenbanktabelle auf Änderungen zu überwachen und meine Anwendung zu benachrichtigen, wenn diese Änderungen auftreten, so dass ich sie im lokalen Netzwerk als Broadcast-Nachrichten ausgeben kann, wo jeder mit einem Client auf sie hören kann und sie als Warnungen anzeigen (denke etwas Ähnliches wie Aktienmarktdaten bestimmte Schwellenwerte erreichen).

Ich möchte nicht auf die Datenbank aus mehreren Gründen abzufragen. 1) Ich möchte den Servern keine zusätzliche Last hinzufügen. 2) Ich möchte lieber Benachrichtigungen fast in Echtzeit erhalten, anstatt darauf zu warten, dass die Abrufhäufigkeit abläuft.

Jetzt könnte ich Logik in die Anwendungen setzen, die die Datenbank aktualisieren, aber die Daten können aus verschiedenen Quellen aktualisiert werden, einschließlich des Internets und ich möchte nicht mit Webservern umgehen, die Benachrichtigungen über DMZ-Grenzen senden usw. Und ich möchte das nicht in 20 verschiedenen Anwendungen (das überwältigendere Thema) beibehalten müssen.

Ich habe gesehen, dass dies auf SQL 2000 mit erweiterten gespeicherten Procs und Triggern getan, aber die XP scheinen plattformübergreifend schwierig zu sein, und sie brechen, wenn auf SQL 2005 und 2008 installiert. Vielleicht ist das nur schlechter Code in der Beispiele, die ich gesehen habe, bin ich nicht sicher, aber ich suche nach etwas, das in SQL 2000 und späteren Versionen funktioniert.

Irgendwelche Ideen?

EDIT:

dachte ich habe über die Unterstützung für das Jahr 2000 fallen, aber das wirklich mein Problem nicht lösen. Ich würde mir eine Lösung wünschen, die auch in den kommenden Jahren noch funktionieren wird. Ein Problem mit vielen Microsoft-Technologien ist, dass sie die Unterstützung für sie fallen lassen. Zum Beispiel haben Benachrichtigungsdienste, was ich brauche es zu tun, aber sie beschlossen, dass im Jahr 2008 verbitten, und es wird in der nächsten Version nicht zur Verfügung. Also suche ich nach einer Lösung, die gute Chancen hat, dabei zu bleiben.

Antwort

5

Sehr einfache Lösung

Sie einen Trigger haben könnte, die eine Webseite aufruft, anmelde eines Updates.

Dies kann ziemlich schlecht sein, denn wenn der Server nicht auf die Bahn bekommen, aus irgendeinem Grunde, es den Einsatz Betrieb langsam ganz machen kann. Abhängig von der Häufigkeit der Einsätze könnte es ebenso schlecht sein.

Alternativplan

in einem Trigger, in eine Warteschlange schreiben. (Ich bin zufällig in MSMQ verliebt). Dann warten Sie etwas gegen diese Warteschlange, und Sie erhalten die Nachrichten in Echtzeit. Auch hier ist die Häufigkeit der Aktualisierungen wie oben beschrieben hoch.

Besserer Plan

Haben Sie einen Auslöser, dass die Stellen, die Daten zu einer ‚tblUpdatedThings‘ Tabelle, die Sie dann Umfrage. Aber ich weiß, dass du nicht abfragen willst. Unabhängig davon halte ich das aus den Gründen, die ich beschreibe, für besser.

2

Sie möchten Ihre Lösung in der Datenbank sein, aber Sie wollen es Datenbank-unabhängig sein. Du kannst es nicht auf beide Arten haben. Wähle eins.Wenn Sie unabhängig von der Datenbank sein möchten, erlauben Sie den Quellen nicht, direkt in die Datenbank zu schreiben, sondern einen von Ihnen gesteuerten zentralen Dienst aufzurufen, und Sie können alle für Sie interessanten Ereignisse abfangen. Wenn Sie die Datenbankfunktionalität ohne Abfragen verwenden möchten, müssen Sie den Code bereitstellen, den die Datenbank aufruft, und Sie werden eine Abhängigkeit von zukünftigen Versionen haben, die Ihren Code unterstützen.