Protokollierung von Datensatzänderungen
Protokollierung von Datensatzänderungen (Version 23.1.48 bis 25.1.54)
Die Protokollierung funktioniert nur für MapEdit Datenmodelle und nur für MapEdit Desktop und Professional, nicht für MapEdit Mobile
Zu finden in der Datenstruktur unter "Tabelle -> Mehr".
Wird diese Option eingeschalten dann sorgt eine FeatureRule dafür das beim jedem ändern, einfügen und löschen eines Datensatzes in der Tabelle das Datum in Universal Time (GMT) in das Feld RECORD_LOG_DATE_UTC der Tabelle ME_TABLE geschrieben wird. Hiermit kann festgestellt werden wann zum letzten mal an den Datensätzen einer Tabelle etwas passiert ist. Dies kann unter anderem für die Synchronisierungsfunktion genutzt werden.
Beachten Sie das hier absichtlich das Datum in Universal Time (GMT) und nicht das Datum des Clients verwendet wird. Dies ist nötig weil es Kunden gibt deren Clients in unterschiedlichen Zeitzonen arbeiten.
Erweiterte Protokollierung:
Wenn in der Feature Tabelle (oder Domaintabelle) ein Feld mit dem Namen UFID vom Typ Text(36) vorhanden ist, dann wird zu einem das Feld mit einer eindeutigen GUID gefüllt.
Zum anderen wird bei jedem löschen oder ändern in der Tabelle ME_RECORD_LOG
ein Datensatz erzeugt der angibt:
- das Datum der Änderung in Universal Time
- Wer den Datensatz geändert hat
- Von welchem Type die Änderung war (I)nsert, (U)pdate, (D)elete
- die UFID des Datensatzes
- der Name der Tabelle
- Ein Kommentar mit Informationen auf was für Werte der Datensatz geändert wurde.
Diese Information ist jedoch auf 4000 Zeichen beschränkt. Informationen länger als 4000 Zeichen werden abgeschnitten und mit "..." dargestellt.
Das Feld UFID kann mit dem Schalter "UFID Spalte erzeugen" im mehr Dialog angelegt werden. Hierbei wird auserdem auch ein Index auf das Feld UFID angelegt.
Es wird hier mit Absicht eine UFID verwendet und keine FID. Zu einem können FIDs wieder verwendet werden wenn die FID Sequence zurück gesetzt wird. Zum anderen kann dieser Funktion auch zur Synchronisation mit anderen Datenbanken verwendet werden wo die gleichen Datensätze andere FIDs haben können.
Diese Feature Rules wird nur ausgeführt wenn die Aktion über den MapEdit Client/Professisonal ausgeführt wird. Händische Änderungen via SQL oder SQL Tools lösen keine Feature Rules aus. Wenn sie neue Datensätze händisch einfügen, können sie die UFID mittels dem Schalter "Leere UFIDs füllen und Datensatz Log aktualisieren" füllen.
Das aktivieren dieser Funktion verlangsamt alle Einfüge, Änderungs und Lösch Operationen auf die Tabelle!
Nur wenn das Logging eingeschalten ist und die Tabelle eine Spalte UFID vom Typ Text(36) hat wird ME_RECORD_LOG gefüllt.
Diese Option muss bei Versionen kleiner 25.1.41 für jede Tabellen einzeln eingeschaltet werden. Ab Version 25.1.41 gibt es eine Tabellenansicht in der diese für alle Tabellen gesetzt werden kann.
Tip:
Wenn sie die UTC Zeit zur Anzeige in die Lokale Zeit umwandeln wollen können Sie dies in Oracle mit folgendem SQL bewerkstelligen.
Das Beispiel ist für die Zeitzone "Berlin".
SELECT ID, LOG_DATE_UTC, TO_CHAR( FROM_TZ( CAST( LOG_DATE_UTC AS TIMESTAMP ), 'UTC' ) AT TIME ZONE 'EUROPE/BERLIN', 'YYYY-MM-DD HH24:MI:SS TZH:TZM TZR') AS berlin_time FROM ME_RECORD_LOG
Protokollierung von Datensatzänderungen (Ab Version 25.1.55)
Ab Version 25.1.55
zu finden in der Datenstruktur unter "Tabelle -> Protokollierung" und im Register "Mehr" unter "mehr"
Die Protokollierung funktioniert nur für MapEdit Datenmodelle und nur für MapEdit Desktop und Professional, nicht für MapEdit Mobile
Dies Feature Rules werden nur ausgeführt wenn die Aktion über den MapEdit Client/Professisonal ausgeführt wird. Händische Änderungen via SQL oder SQL Tools lösen keine Feature Rules aus.
Das Log Datum wird immer in Universal Time (GMT) geloggt und nicht mit dem Datum des Clients. Dies ist nötig weil es Kunden gibt deren Clients in unterschiedlichen Zeitzonen arbeiten.
Table Logging - Tabellenweise Protokollierung
Wird diese Option eingeschalten dann sorgt eine FeatureRule dafür das beim jedem ändern, einfügen und löschen eines Datensatzes in der Tabelle das Datum in Universal Time (GMT) in das Feld RECORD_LOG_DATE_UTC der Tabelle ME_TABLE geschrieben wird.
Hiermit kann festgestellt werden wann zum letzten mal an den Datensätzen einer Tabelle etwas passiert ist.
Dies kann unter anderem für die Synchronisierungsfunktion genutzt werden.
Dies ist die Performanteste der Logging Funktion da hier keine neuen Datensätze erzeugt werden.
Record Logging - Datensatzweise Protokollierung
Wird diese Option eingeschalten dann sorgt eine FeatureRule dafür das beim jedem ändern, einfügen und löschen jeweils eines Datensatz in die Tabelle ME_RECORD_LOG geschrieben.
In diesem Datensatz steht:
- ID gibt die Reihenfolge der Aktionen an.
- das Datum der Änderung in Universal Time
- Wer den Datensatz geändert hat
- Von welchem Type die Änderung war (I)nsert, (U)pdate, (D)elete
- die FID/ID des Datensatzes
- die UFID des Datensatzes (wenn vorhanden)
- der Name der Tabelle
- Alle geänderten Werte vor und nach dem ändern. (Spalte VALUE_NEW, VALUE_OLD bzw GEOM_OLD,GEOM_NEW) Diese Information ist auf 4000 Zeichen beschränkt. Informationen die länger als 4000 Zeichen werden mit "..." dargestellt. In 99% der Fälle reicht diese Protokillierung aus, wenn Ihnen diese nicht ausreichen ist verwenden Sie stattdessen das "Column Logging" Beim löschen von Datensätzen werden alle Spalten Werte geloggt.
select ID,LOG_DATE_UTC,LOG_TYPE,LOG_USER,TABLE_NAME,
KEY_VALUE,UFID,VALUE_OLD,VALUE_NEW,GEOM_OLD,GEOM_NEW,LOG_COMMENT
from ME_RECORD_LOG order by ID desc limit 1001
Stellen Sie genügen Speicherplatz zur Verfügung und löschen Sie die Tabelle von Zeit zu Zeit und setzen Sie die auch Sequenze "ME_NEXT_RECORD_LOG_ID" zurück wenn Sie diese händisch tun.
Column Logging - Spaltenweise Protokollierung
Wird diese Option eingeschalten dann sorgt eine FeatureRule dafür das beim jedem ändern, einfügen und löschen jeweils eines Datensatz je geänderterm Spaltenwert in die Tabelle ME_COLUMN_LOG geschrieben.
In diesem Datensatz steht:
- ID gibt die Reihenfolge der Aktionen an.
- GROUP_ID kennzeichnet alle zusammengehörigen Datensätze einer Aktion.
- das Datum der Änderung in Universal Time
- Wer den Datensatz geändert hat
- Von welchem Type die Änderung war (I)nsert, (U)pdate, (D)elete
- die FID/ID des Datensatzes
- die UFID des Datensatzes (wenn vorhanden)
- der Name der Tabelle
- der Name der Spalte
- Der Inhalt des Wertes vor und nach dem ändern. (Spalte VALUE_NEW, VALUE_OLD bzw GEOM_OLD,GEOM_NEW) Spalten Inhalte die länger als 4000 Zeichen sind werden abgeschnitten. Beim löschen von Datensätzen werden immer alle Spalten Werte geloggt.
Dies ist die wenigst Performanteste der Logging Funktion!! Wir raten dazu stattdessen immer das "Record Logging" zu verwenden.
Beim "Column Logging" wird für jedes geänderte Feld ein Datensatz in der Tabelle ME_COLUMN_LOG erzeugt. Schalten Sie diese Option nur ein wenn Sie sich bewusst sind das diese sehr viele Datensätze erzeugt!! Diese verlangsamt ausserdem alle Datenbank Aktionen (einfügen,aendern und löschen)!! Stellen Sie genügen Speicherplatz zur Verfügung und löschen Sie die Tabelle von Zeit zu Zeit und setzen Sie die auch Sequenze "ME_NEXT_COLUMN_LOG_ID" zurück wenn Sie diese händisch tun. Ansonsten wird die ID der Tabelle überlaufen.
select ID,LOG_DATE_UTC,LOG_USER,GROUP_ID,TABLE_NAME,COLUMN_NAME,LOG_TYPE,
KEY_VALUE,UFID,VALUE_OLD,VALUE_NEW,GEOM_OLD,GEOM_NEW
from ME_COLUMN_LOG order by ID desc limit 1001
Sync Logging (UFID)
Diese Funktion wird für das Synchronizieren verwendet.
Siehe:
https://help.mapedit.de/admin-guide/mapedit-appbuilder/database-connections/synchronization
Wird das Feld angehakt wird wenn die Tabelle noch keine Spalte UFID hat diese angelegt. Hierbei wird auserdem auch ein Index auf das Feld UFID angelegt.
Wird das Feld nicht angehakt wird wenn die Tabelle eine Spalte UFID hat diese gelöscht.
Warum werden beim Synchronisiene UFIDs verwendet?
Zu einem können FIDs wieder verwendet werden wenn die FID Sequence zurück gesetzt wird, d.h. diese sind ggf nicht eindeutig. Zum anderen kann dieser Funktion auch zur Synchronisation mit mehreren anderen Datenbanken verwendet werden wo die gleichen Datensätze andere FIDs haben können.
Update (UFID)
Diese Option füllt leere UFID Spalten und aktualisert den Datensatzlog. Dies wird nur benötigt wenn die Spalte UFID händisch via Spalte hinzufügen oder einem SQL Tool angelegt wurde oder wenn aus sonstigen Gründen Datensätze vorhanden sind in denen kein Wert für die Spalte UFID gesetzt ist.
Clear Table Log
Setz in der Tabelle ME_TABLE den Wert RECORD_LOG_DATE_UTC bei allen Datensätzen auf NULL.
Wenn Sie mit Sychronisierung arbeiten sollten Sie diese nicht machen da ansonsten die Synchronierung nicht korrekt funktioniert.
Clear Record Log
Löscht den Inhalt der Tabelle ME_RECORD_LOG und setzt die Sequenze "ME_NEXT_RECORD_LOG_ID" auf 1 zurück.
Wenn Sie mit Sychronisierung arbeiten sollten Sie diese nicht machen da ansonsten die Synchronierung nicht korrekt funktioniert.
Clear Column Log
Löscht den Inhalt der Tabelle ME_COLUMN_LOG und setzt die Sequenze "ME_NEXT_COLUMN_LOG_ID" auf 1 zurück.
Show Record Log
Zeigt die letzten 1000 Datensätze des Record Loggs (Tabelle ME_RECORD_LOG) an.
Show Column Log
Zeigt die letzten 1000 Datensätze des Column Loggs (Tabelle ME_COLUMN_LOG) an.
Hinweise für alle Loggings
Das aktivieren dieser Funktion verlangsamt alle Einfüge, Änderungs und Lösch Operationen auf die Tabelle!
Wenn sie die UTC Zeit zur Anzeige in die Lokale Zeit umwandeln wollen können Sie dies in Oracle mit folgendem SQL bewerkstelligen.
Das Beispiel unten ist für die Zeitzone "Berlin".
SELECT ID, LOG_DATE_UTC, TO_CHAR( FROM_TZ( CAST( LOG_DATE_UTC AS TIMESTAMP ), 'UTC' ) AT TIME ZONE 'EUROPE/BERLIN', 'YYYY-MM-DD HH24:MI:SS TZH:TZM TZR') AS berlin_time FROM ME_RECORD_LOG