2012-03-29 6 views
4

Ich bin auf der Suche nach einer Best Practice oder einem Beispiel, wie ich möglicherweise Ereignisse für alle Update-Ereignisse in einer bestimmten SQL Server 2008 R2-Datenbank generieren kann. Um etwas beschreibender zu sein, arbeite ich an einem POC, wo ich im Wesentlichen Update-Ereignisse in einer Warteschlange veröffentlichen würde (in meinem Fall RabbitMq), die dann von verschiedenen Konsumenten konsumiert werden könnten. Dies wäre der erste Teil der Implementierung eines CQRS-Query-Only-Datenmodells über Event-Sourcing. Durch das Platzieren auf der Warteschlange kann jeder diese Ereignisse für die Replikation in einer beliebigen Anzahl von Nur-Abfrage-Datenmodellen abonnieren. Dieser Teil ist klar und ziemlich genau definiert. Das Problem, das ich habe, ist das Bestimmen des besten Ansatzes zum Generieren der Ereignisse von SQL Server. Ich habe ein paar Ideen wie die Überwachung des Transaktionsprotokolls und des SSIS erhalten. Ich bin mir jedoch nicht ganz sicher, ob diese Optionen ratsam oder sogar machbar sind.Erstellen von Ereignissen von SQL Server

Hat jemand irgendwelche Erfahrung mit dieser Art von Dingen oder irgendwelche Vorstellungen darüber, wie man so ein Abenteuer angehen kann? jede Hilfe oder Anleitung würde sehr geschätzt werden.

+0

Was verwenden Sie, um Dinge in SQL Server zu speichern? –

Antwort

9

Sie können das Protokoll nicht überwachen, weil, auch wenn Sie es zu verstehen, wäre in der Lage, haben Sie das Problem der Protokoll recycelt werden, bevor Sie eine Chance hatte, es zu lesen. Wenn das Protokoll nicht so markiert ist, dass es nicht abgeschnitten wird, wird es wiederverwendet. Wenn beispielsweise die Transaktionsreplikation aktiviert ist, wird das Protokoll angeheftet, bis es vom Replikations-Agent gelesen wird und nur , dann gekürzt wird.

SSIS ist ein sehr weit gefasster Begriff und besagt, dass die Verwendung von SSIS zur Erkennung von Änderungen dem Satz "Ich benutze eine Programmiersprache, um mein Problem zu lösen" ähnelt. Die Details sind wie würden Sie SSIS verwenden? Es gibt keine Möglichkeit, mit oder ohne SSIS Datenänderungen in einem beliebigen Schema zuverlässig zu erkennen. Selbst Datenmodelle, die speziell zur Erkennung von Änderungen entwickelt wurden, haben Probleme, insbesondere beim Erkennen von Löschvorgängen.

Aber es gibt brauchbare Alternativen. Sie können Change Data Capture bereitstellen und an die Engine delegieren, um die Änderungen zu verfolgen. Diese entdeckten Änderungen zu konsumieren und sie an die Verbraucher zu veröffentlichen (über RabbitMQ, wenn Sie das wollen) ist ein etwas SSIS würde gut sein. Aber Sie müssen verstehen, dass SSIS nicht zu kontinuierlichen Echtzeit-Aufgaben passt. Es ist so konzipiert, dass es regelmäßig in Batches ausgeführt wird, sodass Ihre Änderungsbenachrichtigungsbenachrichtigungen in Spikes mit langen Verzögerungen (Minuten) benachrichtigt werden, wenn die SSIS-Jobs ausgeführt werden.

Für einen Echtzeitansatz ist eine bessere Lösung Service Broker. Eine Möglichkeit ist, Service Broker-Nachrichten von Triggern, aber ich würde es nicht empfehlen. Ein besseres Design besteht darin, dass die Anwendung die Änderungen selbst veröffentlicht SEND - die Nachricht explizit zu lesen, wenn es die Datenänderung durchführt. Mit SQL Server 2012 ist es möglich, zu anderen SQL Server-Consumern (einschließlich SQL Server Express) multicast Service Broker messages. Die SSB-Nachrichtenübermittlung ist vollständig transaktional (es wird keine Nachricht gesendet, wenn die Transaktion rückgängig gemacht wird) und es ist kein Zwei-Phasen-Commit mit einem Nachrichtenspeicher-Ressourcenmanager erforderlich. Aber um über RabbitMQ zu senden, müssten Sie die Kommunikation, dh. RECEIVE die SSB-Nachrichten und wandeln sie in RabbitMQ-Benachrichtigungen um.

+0

Perfekt! Genau das, was ich gesucht habe. Ich glaube nicht, dass SSIS die Lösung für mich ist, da ich mehr Echtzeitdaten benötige. (nicht 100% Echtzeit aber nahe). Die Anwendung, die die Änderung veröffentlicht, wäre ideal. Allerdings haben wir derzeit viele verschiedene Einstiegspunkte in verschiedenen Sprachen und unterschiedlichen Supportstufen. All dies zu ändern kann als zu belastend angesehen werden. Ich werde die Datenerfassung zuerst untersuchen, da sie am ehesten zu dem passt, wonach ich suche. Vielen Dank! – RockyMountainHigh