Service Broker für Benachrichtigungen bei Datenänderungen
Die Service Broker-Nachrichtenübermittlung ist eine Funktion des Microsoft SQL Server, mit der der OPC Router über Änderungen in einer Tabelle informiert werden kann.
Statt in einem festen Takt immer wieder zu prüfen, ob neue Daten vorhanden sind, erhält der OPC Router vom SQL Server eine Meldung, sobald sich relevante Daten geändert haben. Dadurch reagiert die Verbindung schneller und erzeugt weniger unnötige Abfragen.
Technisch arbeitet der SQL Server dabei mit internen Benachrichtigungen und Warteschlangen. Für die Projektierung im OPC Router ist vor allem wichtig, dass der SQL Server diese Funktion verwenden darf und dass der konfigurierte Benutzer die nötigen Rechte besitzt.
Wann ist diese Funktion sinnvoll?
Die Service Broker-Nachrichtenübermittlung ist vor allem dann sinnvoll, wenn:
- Polling-Last auf der Datenbank reduziert werden soll
- eine Tabelle nicht einfach nur zyklisch, sondern möglichst ereignisnah überwacht werden soll
Wenn diese Funktion nicht verfügbar ist oder nicht genutzt werden kann, arbeitet der OPC Router stattdessen mit Polling.
Um die Datenbankverbindung erfolgreich konfigurieren zu können, muss der verwendete Benutzer über bestimmte Berechtigungen verfügen. Prüfen Sie deshalb vorab, ob das Konto diese Rechte besitzt oder fordern Sie sie bei der Datenbankadministration an.
Für die Benachrichtigungsfunktion selbst werden in der Regel folgende Rechte benötigt:
SELECTauf die überwachten TabellenSUBSCRIBE QUERY NOTIFICATIONSRECEIVEauf die verwendete Queue für BenachrichtigungenREFERENCESauf den Contracthttp://schemas.microsoft.com/SQL/Notifications/PostQueryNotification
Wenn Queue und Service noch nicht vorhanden sind und vom verwendeten Benutzer selbst angelegt werden sollen, werden zusätzlich typischerweise diese Rechte benötigt:
CREATE QUEUECREATE SERVICE
Wenn der Service Broker für die Datenbank erst noch aktiviert werden muss, ist zusätzlich ALTER auf Datenbankebene erforderlich.
Benutzer und Berechtigungen vorbereiten
In vielen Projekten richtet die Datenbankadministration einen eigenen Benutzer für den OPC Router ein. Falls dieser Benutzer noch nicht existiert, kann er mit einem SQL-Skript angelegt werden.
Ein Benutzer für den OPC Router kann mit folgendem SQL-Skript erstellt werden:
CREATE LOGIN [<Nutzername>] WITH PASSWORD = '<Passwort>';
GO
-- Wechseln des Kontexts zu der Datenbank, die im OPC Router verwendet werden soll
USE <Datenbank>;
GO
-- Erstellen eines Nutzers für den Login
CREATE USER [<Nutzername>] FOR LOGIN [<Nutzername>];
GO
Wenn Sie die Service-Broker-Nachrichtenübermittlung ohne db_owner-Rechte nutzen möchten, führen Sie das folgende SQL-Skript aus und passen Sie die Werte an Ihre Umgebung an.
Das folgende Beispiel vergibt ein praxistaugliches Rechte-Set für die Benachrichtigungsfunktion. Es enthält die Rechte für den laufenden Betrieb sowie optionale Rechte für die Einrichtung, falls Queue, Service oder Broker noch nicht vorbereitet sind.
-- Wechseln des Kontexts zu der Datenbank, die im OPC Router verwendet werden soll
USE <Datenbank>;
GO
-- Optional: eigenes Schema für den Benutzer anlegen
CREATE SCHEMA [<Schema>] AUTHORIZATION [<Nutzername>];
GO
ALTER USER [<Nutzername>] WITH DEFAULT_SCHEMA = [<Schema>];
GO
-- Rechte für den laufenden Betrieb der Benachrichtigungsfunktion
GRANT SELECT to [<Nutzername>];
GO
GRANT SUBSCRIBE QUERY NOTIFICATIONS TO [<Nutzername>];
GO
GRANT RECEIVE ON QueryNotificationErrorsQueue TO [<Nutzername>];
GO
GRANT REFERENCES ON CONTRACT::[http://schemas.microsoft.com/SQL/Notifications/PostQueryNotification] TO [<Nutzername>];
GO
-- Optionale Rechte, falls Queue und Service vom Benutzer selbst angelegt werden sollen
-- GRANT CREATE QUEUE TO [<Nutzername>];
-- GO
-- GRANT CREATE SERVICE TO [<Nutzername>];
-- GO
-- Optional UPDATE für den die Nutzung des Datachange Triggers erlauben
-- GRANT UPDATE TO [<Nutzername>];
-- GO
-- Optionale Berechtigung, um den Broker für die Datenbank aktivieren zu können
-- GRANT ALTER TO [<Nutzername>];
-- GO
Voraussetzungen für die Benachrichtigungen
- Der im Plug-in konfigurierte Benutzer muss die notwendigen Berechtigungen besitzen, um den Broker für die Datenbank zu aktivieren, oder der Broker muss bereits aktiv sein.
Ob der Broker für eine Datenbank aktiv ist, können Sie mit folgendem Befehl prüfen:
SELECT IS_BROKER_ENABLED FROM SYS.DATABASES WHERE NAME = '<DatenbankName>'
- Die vom Trigger überwachte Tabelle darf keine View sein und keine berechneten Spalten enthalten.
Was bedeutet das für die Praxis?
Wenn alle Voraussetzungen erfüllt sind, kann der SQL Server den OPC Router direkt über relevante Änderungen informieren. Das ist besonders hilfreich bei Verbindungen, die schnell auf neue Datensätze reagieren sollen.
Wenn die Funktion nicht eingerichtet werden kann, ist das kein grundsätzlicher Blocker für das Projekt. Die Überwachung kann weiterhin über Polling erfolgen, nur eben mit zyklischen Abfragen statt mit ereignisnahen Meldungen.
Limitationen
Wenn die Verbindung zum Broker abbricht, zum Beispiel durch eine ID-Änderung, fällt der OPC Router auf Polling zurück. Eine neue Broker-Verbindung wird dann erst nach einem Neustart der Runtime aufgebaut.