Datenbank-Transferobjekt
Datenbanken stehen Ihnen sowohl als Quellen und als Ziele zur Verfügung. Die benötigte Datenbank muss als Plug-in-Instanz konfiguriert sein. Erstellen Sie ein DB-Transferobjekt innerhalb der Verbindung wie beschrieben.
Stellen Sie nach Doppelklick auf das Transferobjekt folgende Eigenschaften ein:
DB-Anbindung | Hier stehen die konfigurierten Instanzen des DB-Plug-ins zur Verfügung. |
Typ | Select: Fragt einen oder mehrere Datensätze (aus einer Tabelle oder einer View) ab. Sie müssen entsprechend Filter- und Sortierkriterien definieren. Das Transferobjekt dient damit als Datenquelle. Insert: Während des Datentransfers wird ein neuer Datensatz an die Tabelle eingefügt. Das Transferobjekt fungiert damit als Transferziel. Bei einem Datenbank-Insert werden unvollständige Arrays aufgefüllt. Beispiel: Sollten in eine Datenbank ein einzelner Eintrag aus einem Zeitstempel und mehrere Einträge aus einem Array eingelesen werden, so kann der Zeitstempel für die einzelnen Variablen des Arrays erfolgen. Der Zeitstempel wird also automatisch so lange mehrfach genutzt, bis alle Variablen ausgelesen wurden. Daher gilt: Bei einem Insert wird immer der höchste InsertCount ermittelt. Einträge, die einen kleineren Count haben, werden dann um den Faktor X erweitert, so dass die Werte in der Tabelle aufgefüllt werden. Auch für Views auswählbar. Update: Während des Datentransfers wird ein (oder mehrere) vorhandener Datensatz in der Tabelle aktualisiert. Sie müssen dementsprechend einen Filter definieren. Das Transferobjekt fungiert damit als Transferziel. Auch für Views auswählbar. Delete: Der Datentransfer löscht einen Datensatz oder mehrere Datensätze aus der Tabelle. Sie müssen einen entsprechenden Filter definieren. Auch für Views auswählbar. Stored procedure: Stößt eine gespeicherte Prozedur an, sobald die Triggerbedingung zutrifft. Sie können hier Eingabeparameter und Rückgabewerte als Ziele bzw. Quellen nutzen. |
Wichtig: Wird als Typ „Stored Procedure“ gewählt, so ruft der OPC Router die Prozedur unmittelbar einmal mit Standardparametern (String = NULL; Int = 0 usw.) auf, um die Struktur des Result Sets auszulesen. Es erfolgt ein Rollback. Die Prozedur muss also transaktionssicher sein und darf beim Standardaufruf keine Fehler zurückgeben.
Registerkarte: Allgemein (alle Typen)
Tabelle | Tabelle, auf der die ausgewählte Operation ausgeführt wird, bzw. Name der gespeicherten Prozedur. Anmerkung: Die angegebene Tabelle muss einen Primärschlüssel besitzen. Tabellen ohne Primärschlüssel werden nicht unterstützt. |
Verfügbare Spalten/Verwendete Spalten | (Einfügen, Aktualisieren, Abfragen) Verfügbare Spalten: In der Tabelle vorhandene, noch nicht verwendete Spalten (Datenfelder). Verwendete Spalten: Spalten (Datenfelder), die als Elemente (Items) des Transferobjekts angezeigt werden und damit für Transfers zur Verfügung stehen. Diese Unterscheidung dient in erster Linie der Übersicht in der Projektierungsfläche – z. B. wenn nur eine Spalte von 30 vorhandenen für die Verbindung benötigt wird. Verschieben Sie die Spalten durch Doppelklick auf den Spaltennamen oder über die Schaltfläche „<“ und „>“ (nach Markieren der Spalte). „<<“ und „>>“ verschieben alle Spalten. Mit den Schaltflächen „Auf“ und „Ab“ sortieren Sie die verwendeten Spalten. Auch dies dient der Übersichtlichkeit in der Anzeige. gespeicherte Prozedur: Hier finden Sie die Eingabeparameter und Rückgabewerte in den Listen. |
Registerkarte: Filter (Abfragen, Aktualisieren, Löschen)
Filter | Stellt Filter und Filtergruppen grafisch dar. Aus diesem Baum wird zur Laufzeit das SQL-Statement konstruiert. Die Werte für die Filter werden zur Laufzeit dynamisch erzeugt. Feste Filterwerte legen Sie über Variablen fest (s. u.). Nutzen Sie die Schaltflächen, um einzelne Filterkriterien („Filter“) und gruppierte Filterkriterien („Filtergruppe“) hinzuzufügen. „Löschen“ löscht das markierte Kriterium. Filtertypen: EQUAL: Vergleicht, ob Werte gleich sind. GREATER: Vergleicht, ob der eingegebene Wert größer ist. GREATER_OR_EQUAL: Vergleicht, ob der eingegebene Wert größer oder gleich ist. SMALER: Vergleicht, ob der eingegebene Wert kleiner ist. SMALER_OR_EQUAL: Vergleicht, ob der eingegebene Wert kleiner oder gleich ist. NOT_EQUAL: Vergleicht, ob der eingegebene Wert nicht gleich ist. LIKE: Vergleicht Strings. LIKE_WILDCARD: Entspricht LIKE %WERT%. LIKE_WILDCARD_END: Entspricht LIKE WERT%. IN: Vergleicht mit mehreren Werten. Die Werte müssen als Array übergeben werden. NOT_LIKE: Vergleicht, ob Strings unterschiedlich sind. NOT_LIKE_WILDCARD: Entspricht LIKE_WILDCARD aber negiert. NOT_IN: Vergleicht, ob mehrere Werte nicht gleich sind. Die Werte müssen als Array übergeben werden. |
Filter/Filtergruppe bearbeiten | Die möglichen Einträge ändern sich je nachdem, welches Element unter „Filter“ markiert ist. Verknüpfung: Legt die Operatoren AND und OR zwischen den Filtern/Filtergruppen fest. Spalte: Spalte, nach der gefiltert wird Vergleichsoperator für den Wertevergleich |
Vorschau | Vorschau des SQL-Statements, z. B. WHERE (ZEITSTEMPEL >_ ?) AND (WERT = ?) . Im Beispiel würden alle Datensätze gewählt, deren Feld Zeitstempel größer als ein festzulegender Zeitstempel (= neuer als Datum/Uhrzeit) und deren Feld Wert gleich einem festzulegenden Wert ist. Die Werte für die Filter können Sie zur Laufzeit dynamisch festlegen (z. B. Werte aus OPC Items oder anderen Tabellen) oder bereits zur Entwurfszeit eine Variable definieren (die Sie wiederum zur Laufzeit ändern könnten). |
In der Projektierungsoberfläche sehen Sie die Filterkriterien als Elemente. Ziehen Sie Verbindungspfeile von beliebigen anderen Transferobjekten auf die Filterkriterien, um sie zu füllen. Für Zeitstempelfilter können auch relative Angaben verwendet werden („-1d“ für das Datum des Vortags zum Beispiel).
Registerkarte: Abfrage (Abfragen)
Sortierreihenfolge | Auf- oder absteigend. |
Sortierung nach Spalte | Spalte, nach der das Abfrageergebnis sortiert wird. |
Datensätze nicht verändern | (nur bei Abfragen aus Tabellen möglich) Es erfolgt keine Änderung der übertragenen Datensätze. |
Datensätze nach durchgeführtem Transfer markieren | (nur bei Abfragen aus Tabellen möglich) In einer entsprechenden Spalte der Quelltabelle wird für jeden transferierten Datensatz „1“ eingetragen, für einen fehlerhaften Transfer „2“. Anmerkung: In der betreffenden Tabelle wird hierfür ein einfacher Primärschlüssel auf die numerische Spalte "ID" benötigt. |
Spalte zum Markieren | (nur bei Abfragen aus Tabellen möglich) Spalte, in der der Marker für den erfolgten oder fehlerhaften Datentransfer eingetragen wird. Die Spalte sollte als Standardwert automatisch mit „0“ befüllt sein. |
Markierungswerte | Hier können die, in die Markierungsspalte zu schreibenden Werte, angegeben werden. Die Markierungswerte müssen eindeutig sein. |
Zähle fehlgeschlagene Transfers | Zählt die fehlgeschlagenen Transfers. Hinweis: Wählen Sie bei „Fehlerspalte“ die Spalte aus, in der die Anzahl der fehlgeschlagenen Transfers hochgezählt werden soll. |
Datensätze nach erfolgreichem Transfer löschen | (nur bei Abfragen aus Tabellen möglich) Natürlich können transferierte Datensätze auch aus der Tabelle gelöscht werden. Achtung: Die Datensätze werden in der Quelltabelle unwiderruflich gelöscht. |
Transfer abbrechen (bei leerem Abfrageergebnis) | Bricht den Datentransfer bei leerem Abfrageergebnis ab. |
Lesefehler auslösen (bei leerem Abfrageergebnis) | Bricht den Datentransfer bei leerem Abfrageergebnis ab und löst die Fehleraufzeichung aus (im Router Status und der Logdatei). |
Leeren Datensatz zurückgeben | Gibt bei einem leeren Abfrageergebnis einen leeren Datensatz zurück. |
Anzahl Datensätze begrenzen auf: | Transferiert nur die hier angegebene Anzahl der Datensätze. Die Sortierung muss entsprechend eingestellt sein. Beispiel: Aus einem Abfrageergebnis soll nur der neueste Datensatz transferiert werden. Die Sortierung müsste auf ein Feld mit einem „Zeitstempel“ mit der Reihenfolge „absteigend“ eingestellt werden, die Anzahl der Datensätze auf „1“ begrenzt werden. |
Anmerkung: Ist als Typ „Update“ eingestellt, stellt das Transferobjekt die Anzahl der aktualisierten Zeilen zur Verfügung (als Datenquelle).
Erwartete Anzahl eingehender Datensätze prüfen
Aktivieren Sie diese Option um die Daten, die für den Insert verwendet werden sollen, auf korrekte Größe zu prüfen. Wenn Sie z.B. ein Array an Daten empfangen, so können Sie hier definieren wie viele Datensätze das Array mindestens, maximal oder genau haben muss damit der Insert durchgeführt wird.
Select immer mit Filter
Verwenden Sie SQL-Select nur in Verbindung mit Filtern (WHERE-Klausel), um nicht die ganze Tabelle in den Arbeitsspeicher zu laden. In Verbindung mit Transfermarkierungen filtern Sie z. B. nach <Transferflag> <> 1
Transferierte Datensätze markieren
Markieren Sie transferierte Datensätze. Halten Sie in Ihren Tabellen Spalten vor, in denen der OPC Router transferierte Datensätze markieren kann („Transferflag“ nicht übertragen, übertragen, Transferfehler). Die Transferflag-Spalten sollten mit dem Standardwert „0“ belegt werden und nicht NULL annehmen dürfen, damit immer eine korrekte Zuordnung zu den drei Status gewährleistet ist.
Transferflag indizieren
Zur Verbesserung der Leistung sollte die Transferflag-Spalte wie folgt indiziert werden:
-
Wenn der OPC Router nach Transferflag
= 0
filtern soll:CREATE NONCLUSTERED INDEX [IX_TransferTable_Transferflag] ON [dbo].[TransferTable]
(
[Transferflag] ASC
)
WHERE ([Transferflag]=(0))
GO -
Wenn der OPC Router nach Transferflag
<> 1
filtern soll:CREATE NONCLUSTERED INDEX [IX_TransferTable_Transferflag] ON [dbo].[TransferTable]
(
[Transferflag] ASC
)
WHERE ([Transferflag]<>(1))
GO
Select-Ergebnisse sortieren
Sortieren Sie die Tabelle nach dem Transfer-Flag aufsteigend. So werden zuerst die nicht transferierten Datensätze übertragen; fehlerhafte Einzeltransfers werden erst am Ende des Transfers erneut versucht. Zur Leistungsoptimierung kann nach der Transfer-Flag-Spalte gefiltert werden (Transfer-Flag = 0 oder = 2). In der Datenbank kann dazu ein entsprechend gefilterter Index angelegt werden.