2.6.3 Datenbankserver
Datenbankdateien mit Systemfeldern (7402)
Die im neuen DataDictionary durch den Generator SIBDDGEN erzeugten Systemfelder werden bei einer Reorganisation automatisch in der jeweiligen Datenbankdatei angelegt und vom Server-Datenbanksystem genutzt.
Neben der eindeutigen Satz-ID (UUID) werden auch Informationen über Erzeugung und Änderung eines Datensatzes im Systembereich des Datensatzes gespeichert.
Hinweis: Mit dem Eintrag „OldDBFormat=Yes“ in einer Datenquellen-Sektion der SBASESRV.INI kann die Generierung der Systemfelder beim Reorganisieren einer Datenbankdatei bei Bedarf unterbunden werden. Achtung, sind in einer Datenbankdatei bereits Systemfelder vorhanden, gehen die darin gespeicherten Informationen und damit ggf. vorhandene Verbindungen zum Datenbank-Journal verloren!
Datenbank-Journal (7402)
Der infra-Datenbankserver erlaubt das Führen eines Änderungsjournals, in dem alle verändernden Operationen an ausgewählten Tabellen bis auf Feldebene protokolliert werden. Dabei werden neben der eigentlichen Feldänderung auch Verursacher, Ursprung und Zeiten protokolliert.
Voraussetzung für den Einsatz des Datenbank-Journals ist die Verwendung des neuen DataDictionary-Formats und die vorbereitende Reorganisation der zu protokollierenden Datenbankdateien. Dieser Schritt ist notwendig, um in den jeweiligen Datenbankdateien Systemfelder anzulegen, die unter anderem eine eindeutige Satz-ID (UUID) enthalten, über die die Verbindung zum Änderungsjournal hergestellt wird. Das heißt, im Datenbank-Journal wird die Satz-ID eines veränderten Datensatzes zur Identifikation des Satzes gespeichert.
Das Datenbank-Journal ist als Datenbankdatei 999 im infra-DataDictionary definiert. Sie wird bei Bedarf automatisch vom Datenbankserver angelegt. Über die Replikation steht das Datenbank-Journal auch in der SQL-Datenbank zur Verfügung und kann so (zum Beispiel per infraADO) komfortabel ausgewertet werden. In infra-Query steht eine Auskunft zum Datenbank-Journal zur Verfügung.
Aktivierung des Datenbank-Journals
Durch den Eintrag „JournalTableName=SYSDBJOURNAL“ in einer Datenquellen-Sektion der SBASESRV.INI des Datenbankservers wird das Journal aktiviert. Die Journal-Tabelle „SYSDBJOURNAL“ muss im DataDictionary bereits vor Aktivieren von „JournalTableName=SYSDBJOURNAL“ definiert sein. Die entsprechende Datenbankdatei wird automatisch angelegt.
Damit die neuen bzw. geänderten INI-Einträge erkannt und somit das Datenbank-Journal gestartet wird, muss nach Änderung der INI-Einträge die betroffene Datenquelle neu initialisiert (alle Benutzer abgemeldet) oder der Datenbankserver neu gestartet werden.
Welche infra-Datenbankdateien im Datenbank-Journal protokolliert werden sollen, wird mit dem Eintrag „JournalTables=…“ in der Datenquellen-Sektion angegeben.
Analog zum Eintrag „ReplicateTables“ in der SBASESQL.INI können hier einzelne Dateien oder Dateibereiche durch Kommata getrennt oder „All“ für „Alle Dateien“ eingetragen werden.
Beispiel:
[DS_ECHT]
JournalTableName=SYSDBJOURNAL
JournalTables=6,41
Beispiele für SQL-Abfragen
Welche Änderungen wurden am Teilestammsatz „0110012“ vorgenommen?
SELECT * FROM SYSDBJOURNAL AS sj INNER JOIN
TEILE AS t ON t.SYSUUID = sj.SatzUUID
WHERE (t.Teil = '0110012')
ORDER BY sj.Zeitpunkt
Welche Teilestamm-Datensätze wurden wann von Benutzer „infra“ manipuliert?
SELECT t.Teil, sj.Operation, sj.Zeitpunkt
FROM SYSDBJOURNAL AS sj INNER JOIN
TEILE AS t ON t.SYSUUID = sj.SatzUUID
WHERE (sj.Benutzer = 'infra')
ORDER BY sj.Zeitpunkt
Anzeige einer SatzUUID (SYSUUID)
SELECT sys.fn_sqlvarbasetostr(SYSUUID), Teil
FROM TEILE
Hinweis: Die Felder Tabellenname oder Tabellenindex der Tabelle SYSDBJOURNAL können bei Abfragen vernachlässigt werden, da die verwendeten SYSUUIDs über die gesamte Datenbank (mit hoher Wahrscheinlichkeit sogar weltweit) eindeutig sind.