Benutzerdefinierte Archivgruppen

Bisher hatten die Archivtabellen in WinCC OA eine fixe Struktur. Eine Tabelle enthielt immer die gleichen spezifischen Spalten. Durch benutzerdefinierte Archivgruppen können eigene Archivgruppen erstellt werden. Dieses Kapitel beschreibt, wie Sie benutzerdefinierte Archivgruppen erstellen und verwenden.

Sie können Archivtabellen nach Ihren eigenen Wünschen aufbauen sowie flexiblere und schnellere Datenbank-Abfragen erstellen.

Die Struktur einer Archivtabelle erstellen Sie mit der Hilfe von Vorlagen (Templates). Eine Vorlage wiederum enthält einen Datenpunkt-Knoten, der die Struktur einer Archivtabelle festlegt. Mit einer Vorlage erstellen Sie eine benutzerdefinierte Archivgruppe.

Abbildung 1. Datenpunktknoten "Node1", der die Elemente "A" und "C" enthält

Abbildung 2. Datenbanktabelle, welche die Spalten "A" und "C" enthält

Eine Tabelle enthält immer die Spalten ELEMENT_ID und TS (Primärschlüssel) sowie die Spalten SYS_ID (für Partitionierung) und BASE (für das Kopieren eines Bodensatzes von den exportierten Archiven in das älteste Online-Archiv). Die einzelnen Datenpunktelemente sind einzelne Spalten in der Datenbanktabelle.

VORSICHT:

Benutzerdefinierte Archivgruppen können nicht verändert, sondern nur gelöscht und neu angelegt werden. Dies betrifft auch die zugrunde liegende DP-Struktur.

VORSICHT:

Benutzerdefinierte-Archivgruppen können nur verwendet werden, wenn die Daten über Oracle Call Interface (OCCI) geschrieben werden. Für OCCI siehe Kapitel Voraussetzungen und Installation.

VORSICHT:

Die Spaltennamen (DP-Elemente) müssen mit einem alphanumerischen Zeichen (von a bis z (Groß-oder klein geschrieben)) beginnen.

VORSICHT:

Der Eintrag "writeWithBulk = 1" muss gesetzt werden um die Benutzerdefinierten Archivgruppen zu verwenden (siehe auch Voraussetzungen und Installation)!

VORSICHT:

Da eine Tabelle immer die Elemente ELEMENT_ID und TS (Primärschlüssel) sowie SYS_ID und BASE enthält, dürfen Sie keine Spalten mit diesen Namen hinzufügen. Zudem dürfen keine Schlüsselwörter verwendet werden (unterhalb finden Sie eine Liste der Wörter, die nicht als Tabellennamen verwendet werden dürfen). Beachten Sie zusätzlich, dass die Datenbank nicht zwischen Klein- und Großschreibung unterscheidet. Es dürfen keine zwei Spalten (zwei Datenpunkt-Elemente) z.B. mit den Namen "Id" und "ID" hinzugefügt werden.

Anfangsbuchstabe Schlüsselwörter
A ACCESS, ADD, ADMIN, AFTER, ALL, ALLOCATE, ALTER, ANALYZE, AND, ANY, ARCHIVE, ARCHIVELOG, AS, ASC, AUDIT, AUTHORIZATION, AVG
B BACKUP, BECOME, BEFORE, BEGIN, BETWEEN, BFILE, BINARY_DOUBLE, BINARY_FLOAT, BINARY_INTEGER, BLOB, BLOCK, BODY, BOOLEAN, BY
C

CACHE, CANCEL, CASCADE, CHANGE,

CHAR, CHARACTER, CHECK, CHECKPOINT, CLOB, CLOSE, CLUSTER, COBOL, COLUMN, COMMENT, COMMIT, COMPILE, COMPRESS, CONNECT, CONSTRAINT, CONSTRAINTS, CONTENTS, CONTINUE, CONTROLFILE, COUNT, CREATE, CURRENT, CURSOR, CYCLE

D DATABASE, DATAFILE, DATE, DBA, DEC, DECIMAL, DECLARE, DEFAULT, DELETE, DESC, DISABLE, DISMOUNT, DISTINCT, DOUBLE, DROP DUMP
E EACH, ELSE, ENABLE, END, ESCAPE, EVENTS, EXCEPT, EXCEPTIONS, EXCLUSIVE, EXEC, EXECUTE, EXISTS, EXPLAIN, EXTENT, EXTERNALLY
F FETCH, FILE, FLOAT, FLUSH, FOR, FORCE, FOREIGN, FORTRAN, FOUND, FREELIST, FREELISTS, FROM, FUNCTION
G GO, GOTO, GRANT, GROUP, GROUPS
H HAVING
I IDENTIFIED, IMMEDIATE, IN, INCLUDING, INCREMENT, INDEX, INDICATOR, INITIAL, INITRANS, INSERT, INSTANCE, INT, INTEGER, INTERSECT, INTO, IS
K KEY
L LANGUAGE, LAYER, LEVEL, LIKE, LINK, LISTS, LOCK, LOGFILE, LONG
M MANAGE, MANUAL, MAX, MAXDATAFILES, MAXEXTENTS, MAXINSTANCES, MAXLOGFILES, MAXLOGHISTORY, MAXLOGMEMBERS, MAXTRANS, MAXVALUE, MIN, MINEXTENTS, MINUS, MINVALUE, MLSLABEL, MODE, MODIFY, MODULE, MOUNT
N NATURAL, NATURALN, NCHAR, NCLOB, NEW, NEXT, NOARCHIVELOG, NOAUDIT, NOCACHE, NOCOMPRESS, NOCYCLE, NOMAXVALUE, NOMINVALUE, NONE, NOORDER, NORESETLOGS, NORMAL, NOSORT, NOT, NOTFOUND, NOWAIT, NULL, NUMBER, NUMERIC, NVARCHAR2
O OF, OFF, OFFLINE, OLD, ON, ONLINE, ONLY, OPEN, OPTIMAL, OPTION, OR, ORDER, OWN
P PACKAGE, PARALLEL, PCTFREE, PCTINCREASE, PCTUSED, PLAN, PLI, PLS_INTEGER, POSITIVE, POSITIVEN, PRECISION, PRIMARY, PRIOR, PRIVATE, PRIVILEGES, PROCEDURE, PROFILE, PUBLIC
Q QUOTA
R RAW, READ, REAL, RECORD, RECOVER, REFERENCES, REFERENCING, RENAME, RESETLOGS, RESOURCE, RESTRICTED, REUSE, REVOKE, ROLE, ROLES, ROLLBACK, ROW, ROWID, ROWLABEL, ROWNUM, ROWS
S

SAVEPOINT, SCHEMA, SCN, SECTION, SEGMENT, SELECT, SEQUENCE, SESSION, SET, SHARE, SHARED, SIGNTYPE, SIZE, SMALLINT, SNAPSHOT, SOME, SORT, SQL, SQLBUF, SQLCODE, SQLERROR, SQLSTATE, START, STATEMENT_ID, STATISTICS,

STOP, STORAGE, STRING, SUCCESSFUL, SUM, SWITCH, SYNONYM, SYSDATE, SYSTEM

T TABLE, TABLES, TABLESPACE, TEMPORARY, THEN, THREAD, TIME, TO, TRACING, TRANSACTION, TRIGGER, TRIGGERS, TRUNCATE
U UID, UNDER, UNION, UNIQUE, UNLIMITED, UNTIL, UPDATE,UROWID, USE, USER, USING
V VALIDATE, VALUES, VARCHAR, VARCHAR2, VARRAY, VIEW
W WHEN, WHENEVER, WHERE, WITH, WORK, WRITE

Wie erstelle ich eine Benutzerdefinierte Archivgruppe

  1. Überprüfen Sie, dass der Config-Eintrag useRDBArchive = 1 in der Config-Datei gesetzt ist. Benutzerdefinierte Archivgruppen können nur für die Archivierung in die Datenbank und nicht für die Verwendung von Value Archiven verwendet werden.

  2. Überlegen Sie sich eine Datenpunktstruktur und erstellen Sie diese über das PARA-Modul. In diesem Beispiel wird der Datenpunkttyp "Test" erstellt. Die Datenpunkt-Struktur enthält einen Hauptknoten (RootNode) und zwei Elemente "Element1" und "Element2". Der Datenpunkt "ArchiveGroup_DP" wurde erstellt.

VORSICHT:

Die Elemente eines Knotens (zu dem ein Archiv-Konfig hinzugefügt wird) dürfen keine Dyn- oder Blobelemente sein und der Knoten darf keine Unterknoten enthalten.

VORSICHT:

Benutzerdefinierte Archivgruppen können nur für DP-Typen, welche die gleiche Art vom DP-Struktur wie die Vorlage enthalten, verwendet werden.

  1. Erstellen Sie eine Vorlage. Öffnen Sie das RDB Dateiselektor-Panel (siehe unten) über System Management -> Datenbank -> RDB-Archivgruppen und klicken Sie auf Verwaltung Templates Schaltfläche.

Abbildung 3. RDB Dateiselektor-Panel

Das Panel für die Erstellung von Vorlagen (Templates) wird geöffnet:

Abbildung 4. Panel für die Erstellung von benutzerdefinierten Vorlagen (Templates)

VORSICHT:

Der Name einer Vorlage darf maximal 21 Zeichen enthalten.

Erstellen Sie eine neue Vorlage über die Neue Vorlage Schaltfläche. Das Panel für die Erstellung von neuen Vorlagen (Templates) wird geöffnet. Selektieren Sie den Hauptknoten des Datenpunktes, der vorher erstellt wurde, über den Datenpunktselektor. Die Unterknoten werden in der Spalte Tabellenspalten und die Knotentypen in der Typ-Spalte angezeigt. Der Index macht Datenbank-Abfragen schneller. Klicken Sie auf Erstellen. In diesem Beispiel wird die Vorlage ARCHIVEGROUP_DP_ROOTN erstellt.

VORSICHT:

Beachten Sie, dass maximal 9 Indices für eine History-Tabelle erstellt werden können.

Abbildung 5. Panel für die Erstellung einer neuen Vorlage (Template)
  1. Öffnen Sie das Panel für die Erstellung einer neuen Archivgruppe über die Schaltfläche Neue Archivgruppe.

Abbildung 6. RDB Dateiselektor-Panel

Das Panel für die Erstellung neuer Archivgruppen wird geöffnet.

VORSICHT:

Der Gruppenname darf maximal 7 Zeichen enthalten.

Abbildung 7. Panel für die Erstellung einer neuen Archivgruppe

Geben Sie den Gruppennamen an. Die Managernummer ist die Nummer des RDB Archivmanagers in der Konsole. Aktivieren Sie die Checkbox Benutzerdefinierte Archivgruppe (User Defined Archive Group) und selektieren Sie die erstellte Vorlage aus der Combobox. Klicken Sie auf OK. Die Archivgruppe "Group1" wird erstellt und wird im RDB Dateiselektor-Panel angezeigt. (siehe Abbildung oberhalb).

  1. Öffnen Sie das PARA-Modul. Fügen Sie ein Archiv-Konfig zu dem Knoten des erstellten Datenpunktes "ArchiveGroup_DP". Selektieren Sie die erstellte Archivgruppe "Group1" aus der Combobox und aktivieren Sie die Checkbox "Originalwert speichern". Klicken Sie auf OK. Überprüfen Sie, dass der RDB Archivmanager mit der Nummer 99 in der Konsole läuft.

Abbildung 8. Datenpunkt "ArchiveGroup_DP" mit einem Archiv-Konfig

VORSICHT:

Benutzerdefinierte Archivgruppen können ausschließlich zu Unterknoten (nicht zu Hauptknoten), die keine Unterknoten aber Blätter enthalten, (siehe Abbildung oberhalb) hinzugefügt werden.

VORSICHT:

_corr.._value oder _online.._value können nicht gespeichert werden, denn Korrekturwerte existieren nicht für Benutzerdefinierte Archivgruppen.

  1. Eine Datenbank-Tabelle mit der gewünschten Struktur wird erstellt.

Anmerkung:

Mit dem Config-Eintrag sendUDAGNullValues geben Sie an, ob der Data-Manager eine Null ((sendUDAGNullValues =1) oder den letzten Wert (sendUDAGNullValues =0) an die RDB-Datenbank bei einer Änderung von einem einzelnen Wert senden soll. Das bedeutet, dass, wenn es mehrere Datenpunkt-Elemente gibt und der Wert von nur einem Element geändert wird, der Wert der anderen Elemente auf den Letztwert oder auf 0 gesetzt wird. Fügen Sie den Eintrag sendUDAGNullValues zu der [data]-Sektion der Config-Datei.

Die folgende Abbildung zeigt Ihnen die Werte von einzelnen Elementen (der group1.History-Ansicht) wenn der Config-Eintrag sendUDAGNullValues sowohl auf 0 als auch auf 1 gesetzt wurde.

Abbildung 9. Datenbank-Tabelle

Die Zeilen 3 und 4 zeigen eine Wertänderung wenn sendUDAGNullValues auf 0 gesetzt wurde (der Wert eines einzelnen Elements wurde geändert und der Wert von anderen Elementen wurde auf den Letztwert gesetzt). Die Zeile 5 wiederum zeigt eine Wertänderung eines einzelnen Elements wenn sendUDAGNullValues auf 1 gesetzt wurde. Der Wert des anderen Elements wurde auf 0 gesetzt.

VORSICHT:

Benutzerdefinierte-Archivgruppen _original.._status und _original.._text existieren nicht in der RDB, denn die Spalten existieren nicht in der Oracle-Tabelle.

Abfragen

VORSICHT:

Beim "externen" Abfragen der RDB (nicht über WinCC OA) ist zu beachten, dass alle Zeitstempel in UTC gespeichert sind!

Anmerkung:

Beachten Sie, dass Abfrage-Funktionen wie dpGetPeriod usw. nicht für benutzerdefinierte Archivgruppen funktionieren. Um Daten abzufragen, verwenden Sie entweder ADO oder die Funktion runRealSQLQuery (siehe unten). Beachten Sie, dass, wenn Sie Daten einer benutzerdefinierten Archivgruppe abfragen, die history-Ansicht [archiveGroupName].History selektiert werden muss.

VORSICHT:

Beachten Sie, dass Alarme - mit oder ohne Alarmkonfiguration - nicht im Alarm- oder Eventschirm angezeigt werden können.

Anmerkung:

Die Funktion runRealSQLQuery verwendet die Config-Einträge der valueArchiveRDB-Sektion (""DbUser", "DB" and "DbType"). Siehe Kapitel Mögliche config-Einträge bei der RDB-Archivierung. Das Passwort muss über die RDB-Panels eingegeben werden.

main()
{
  dyn_dyn_anytype ret;
  DebugN(runRealSQLQuery("select
  el.element_name,h.element_id,h.ts, h.Element1, 
  h.Element2 from elements el, GROUP1HISTORY h where 
  el.element_id = h.element_id order by h.ts,h.element_id
  desc",ret));
  for (int i = 1; i <= dynlen(ret); i++)
  {
    string val = ret[i];
    DebugN(val);
  }
}

/*

Selektiert den Element-Namen, die Element-ID, den Zeitstempel sowie die Elemente "Element1" und "Element2" (Datenpunkt-Elemente die bei der Erstellung vom Template verwendet wurden. Siehe weiter oben), aus der Elements-Tabelle "el" und [archiveGroupName] h-Tabelle = "GROUP1HISTORY h" wo die Element-ID der Elements-Tabelle gleich wie die Element-ID der ArchiveGroupName-Tabelle ist. Sortiere nach Zeitstempel und Element-ID.

"GROUP1HISTORY" ist der Name der Benutzerdefinierten Archivgruppe, die vorher erstellt wurde.

In der Elements-Tabelle sind alle Datenpunktelemente des WinCC OA Projektes mit Zusatzinformationen enthalten. Eine genauere Beschreibung der Elements-Table finden Sie im Kapitel Beschreibung der Tabellen und Views)

Wie die [archiveGroupName] h-Tabelle aussieht, hängt von der Struktur des Templates und des dafür verwendeten Datenpunktes ab. Die Tabelle enthält jedoch immer die Spalten
ELEMENT_ID und TS (Zeitstempel) (welche Primärschlüssel sind) sowie SYS_ID 
(für Partitionierung) und BASE
letzter Wert (Bodensatz) vom zuvor ausgelagerten Zeitbereich. Zusätzlich gibt es die
Spalten:

ARCHIVE# = Die Nummer des Archivsatzes und

ROWID = Die Zeilen-ID.

Die Funktion runRealSQLQuery funktioniert wie dpGetPeriod. Der Vorteil ist, dass Sie kein Password eingeben müssen wie bei der Verwendung vom ADO */

VORSICHT:

Beachten Sie, dass um die runRealSQLQuery-Funktion verwenden zu können, müssen Sie die CtrlRDBArchive.dll zu der [ctrl] Sektion der config.level Datei hinzufügen.

VORSICHT:

Beachten Sie, dass die Abfrage "SELECT *" nicht verwendet werden darf.

Manuelle Bereinigung des RDB Schemas nach fehlgeschlagenem UDAG

  1. Bei Erfolg wird 0 geliefert. Die Gruppe wurde erstellt und das erste Archiv in der Gruppe.

  2. Das erste Archiv in der Gruppe bekommt die Default-Startzeit 1.1.1970.

  3. Wenn die Gruppe nicht erstellt werden kann, wird -1 zurückgeliefert.

  4. Wenn die Gruppe erstellt wurde, aber nicht das erste Archiv, wird -2 zurückgeliefert. Prüfen Sie in diesem Fall die Tabelle ARC_LOG. In der Tabelle ARC_LOG werden detailliertere Fehlermeldungen ausgegeben.

  5. Wenn Sie die Gruppe löschen wollen, führen Sie die DB-Funktion "ArchiveControl.DeleteArcGroup" direkt aus der Datenbank durch.

  6. Wenn die Erstellungsstartzeit des ersten Archivs nicht auf 1.1.1970 gesetzt wurde, wird -3 zurückgeliefert. Dies könnte später beim Eintragen oder Lesen der Werte Probleme verursachen. Prüfen Sie in diesem Fall die Tabelle ARC_LOG. In der Tabelle ARC_LOG werden detailliertere Fehlermeldungen ausgegeben.

  7. Wenn das Archiv gelöscht werden sollte, löschen Sie es über die DB-Funktion ArchiveControl.DeleteArcGroupTable direkt aus der Datenbank.

  8. Wenn eine ganze Gruppe gelöscht werden sollte, führen Sie ArchiveControl.DeleteArcGroup aus.

Speichern von Strings, die mehr als 4000 Zeichen enthalten in der Datenbank

  • Es können Strings nur in Benutzerdefinierten Archivgruppen gespeichert werden.

  • Es muss der Eintrag „maxStringUDAG“ in der Tabelle ARC_CONFIG gesetzt werden. Der Defaultwert ist 4000. Der Wert sollte ein Vielfaches von 4000 sein (8000, 20000, 32000, …).

  • Die maximale String-Größe ist 64000 Zeichen.

  • Bestehende UDAG-Tabellen können nicht konvertiert werden.

Um Strings zu parametrieren, öffnen Sie das Panel „RDB Erstellung und Parametrierung benutzerdefinierter Templates“ über das System Management-Panel->Datenbank->RDB Archive-Gruppen->Verwaltung Templates-Schaltfläche -> Neues Template-Schaltfläche).

Abbildung 10. Benutzerdefinierte Templates mit der Option LangString

Für jede DB-Tabellen-Spalte des Typs ‚STRING’ kann in der Spalte „LongString“ angegeben werden, ob es sich um einen erweiterten String handelt. In der Datenbank werden dann beispielsweise für „maxStringUDAG=12000“ folgende Spalten angelegt:

LONGTEXT Varchar2(4000), LONGTEXT_1 Varchar2(4000) und

LONGTEXT_2 Varchar2(4000)

Die Spaltenbezeichnung ist mit 27 Zeichen begrenzt. Beim Schreiben werden die „LongStrings“ auf 4000-Byte große aufgeteilt und in den entsprechenden Datenbankspalten gespeichert.

Da es keine RDB-Lesefunktion für UDAGs gibt, sind Sie selbst verantwortlich beim Lesen der „LongString“-Spalten die betroffenen Spalten auszulesen (z.B. Beispiel: „Select LONGTEXT || LONGTEXT_1 from UDAG where ….“).