Wenn Sie die Archivierung für ein versioniertes Dataset aktivieren, wird die Archivklasse mit den aktuellen Daten aus der DEFAULT-Version erstellt und aufgefüllt. Die Archivklasse verwendet gdb_from_date und gdb_to_date, um den Zeitpunkt der Archivierung der Änderung zu verwalten. Durch die Aktivierung von nicht versionierten Daten werden die Felder "gdb_from_date" und "gdb_to_date" direkt in der Basistabelle der Klasse erstellt.
Darstellen der Zeit
Sie sollten sich bewusst sein, wie die Zeit beim Aufzeichnen von Änderungen in ArcGIS dargestellt wird. Zeitpunkte in der Vergangenheit können als gültige Zeit, Transaktionszeit oder koordinierte Weltzeit (Coordinated Universal Time, UTC) aufgezeichnet werden. Die gültige Zeit ist der eigentliche Moment, in dem eine Änderung tatsächlich geschah. Sie wird üblicherweise von dem Benutzer aufgezeichnet, der die Änderung erfasst. Die Transaktionszeit ist die Zeit, zu der ein Ereignis in der Datenbank erfasst wurde. Transaktionszeiten werden automatisch vom System generiert. UTC ist der Hauptstandard zum Steuern von Uhren und Uhrzeiten über das Internet.
Um die Archivierung für versionierte Daten auszuführen, verwendet ArcGIS die Transaktionszeit, die auf der aktuellen Serverzeit basiert, um Änderungen an den Daten aufzuzeichnen, wenn Änderungen gespeichert oder in die DEFAULT-Version zurückgeschrieben werden. Die Transaktionszeit und die Zeit, zu der das Ereignis tatsächlich eingetreten ist, stimmen selten überein. Zwischen dem tatsächlichen Auftreten eines Ereignisses und dessen Erfassung in der Datenbank verstreicht in der Regel einige Zeit. Beispielsweise wird am 14. Mai 2006 ein Flurstück verkauft. Die Änderung wird jedoch erst am 5. Juni 2006 in den Daten dokumentiert. Die Transaktionszeit vom 5. Juni 2006 wird für diese Änderung in der Archivklasse erfasst.
Beim Auftreten der Änderung archiviert ArcGIS die Transaktion in der Archivklasse. Die Differenz zwischen dem realen Zeitpunkt des Ereignisses und der Transaktionszeit kann unwesentlich erscheinen, aber es wird deutlicher, wenn Abfragen der archivierten Informationen ausgeführt werden. In Produktionssystemen sind Rückstände beim Bearbeiten und Aktualisieren von Daten nicht selten. Dies führt zu Zeitunterschieden und Verzögerungen zwischen der gültigen Zeit und der Transaktionszeit.
Die Differenz zwischen der gültigen Zeit und der Transaktionszeit stellt auch in Situationen ein Problem dar, in denen vergangene Ereignisse von vielen verschiedenen Benutzern oder Abteilungen aufgezeichnet werden, die gemeinsam eine Datenbank nutzen. Die Reihenfolge, in der die Änderungen in der Datenbank aufgezeichnet werden, stimmt möglicherweise nicht mit der Reihenfolge überein, in der diese Änderungen tatsächlich aufgetreten sind.
Beim Ausführen der Archivierung für nicht versionierte Daten wird UTC zum Darstellen der Uhrzeit verwendet. Änderungen an den Daten werden beim Speichern von Änderungen während einer Editiersitzung erfasst.
Aktivieren der Archivierung für nicht versionierte Daten
Beim Aktivieren der Archivierung werden die Attribute "gdb_from_date" und "gdb_to_date" der Basistabelle hinzugefügt. Das Attribut "gdb_from_date" erhält für alle Zeilen den Zeitstempel mit dem Datum und der Uhrzeit, zu der die Archivierung aktiviert wurde. Das Attribut "gdb_to_date" erhält für alle Zeilen den Zeitstempel vom 31.12.9999. Jedes Mal, wenn ein Attribut den Wert 31.12.9999 für "gdb_to_date" aufweist, handelt es sich um die aktuelle Repräsentation des Objekts. Wenn Änderungen gespeichert werden, werden diese folgendermaßen von der Geodatabase archiviert:
- Der Attributwert für das Attribut "gdb_from_date" ist bei neu erstellten Features auf den Zeitstempel des Archivierungsvorgangs festgelegt und das Attribut "gdb_to_date" ist auf den 31.12.9999 eingestellt.
- Wenn Features in einer Editiersitzung aktualisiert werden, wird die zugeordnete Zeile in der Basistabelle aktualisiert, indem der Attributwert für das Attribut "gdb_to_date" auf den Zeitstempel des Archivierungsvorgangs festgelegt wird. Es wird eine neue Zeile eingefügt, in der das Attribut "gdb_from_date" auf den Zeitstempel des Archivierungsvorgangs und das Attribut "gdb_to_date" auf den 31.12.9999 festgelegt wird.
- Wenn Features in einer Editiersitzung gelöscht werden, wird die zugeordnete Zeile in der Basistabelle aktualisiert, indem das Attribut "gdb_to_date" auf einen Wert festgelegt wird, der dem Zeitstempel des Archivierungsvorgangs entspricht.
Aktivieren der Archivierung für versionierte Daten
Beim Aktivieren der Archivierung werden alle Zeilen, die die DEFAULT-Version für die betreffende Klasse darstellen, mit demselben Zeitstempel in die Archivklasse kopiert. Das Attribut "gdb_from_date" erhält für alle Zeilen den Zeitstempel mit dem Datum und der Uhrzeit, zu der die Archivierung aktiviert wurde. Das Attribut "gdb_to_date" erhält für alle Zeilen den Zeitstempel vom 31.12.9999. Jedes Mal, wenn ein Attribut den Wert 31.12.9999 für gdb_to_date aufweist, handelt es sich um die aktuelle Repräsentation des Objekts in der DEFAULT-Version. Wenn Änderungen gespeichert oder in die DEFAULT-Version zurückgeschrieben werden, archiviert die Geodatabase automatisch die Änderungen in der Archivklasse. Dies bedeutet Folgendes:
- In der DEFAULT-Version erstellte Features werden in der Archivklasse als Zeilen mit einem Attributwert für das Attribut "gdb_from_date" dargestellt, der auf den Zeitstempel des Archivierungsvorgangs festgelegt ist, und das Attribut "gdb_to_date" wird auf den 31.12.9999 festgelegt.
- Wenn Features in der DEFAULT-Version aktualisiert werden, wird die zugeordnete Zeile in der Archiv-Klasse aktualisiert, indem der Attributwert für das Attribut "gdb_to_date" auf den Zeitstempel des Archivierungsvorgangs festgelegt wird. Es wird eine neue Zeile eingefügt, in der das Attribut "gdb_from_date" auf den Zeitstempel des Archivierungsvorgangs und das Attribut "gdb_to_date" auf den 31.12.9999 festgelegt wird.
- Wenn in der DEFAULT-Version ein Feature gelöscht wird, wird die zugeordnete Zeile in der Archivklasse aktualisiert, indem das Attribut gdb_to_date auf einen Wert festgelegt wird, der dem Zeitstempel des Archivierungsvorgangs entspricht.
Die Aktualisierung der Archivtabelle wird innerhalb einer einzelnen Datenbanktransaktion ausgeführt. Bei Fehlern während der Transaktion wird der gesamte Archivierungsvorgang rückgängig gemacht. Der Speicher- oder Zurückschreibungsvorgang wird in diesem Fall nicht abgeschlossen. Sobald der Fehler berichtigt wurde, führen Sie den Speicher- oder Zurückschreibungsvorgang erneut aus.
Bei jedem Archivierungsvorgang wird die historische Kennzeichnung der DEFAULT-Version mit dem Wert des Archivierungsvorgangs aktualisiert. Bei Verwendung einer historischen Version wird auf diese Weise sichergestellt, dass beim Auswählen eines historischen Markers in der DEFAULT-Version die aktuelle Repräsentation der Archivklasse der Repräsentation der versionierten Klasse in der DEFAULT-Version der Transaktion entspricht.
Beim Zugriff auf die Archivklasse werden unter Umständen weniger Datenbankressourcen benötigt als bei der Arbeit mit der entsprechenden versionierten Klasse.
Anwendungsentwickler, die an dem Ereignis interessiert sind, mit dem der Zeitpunkt des Archivierungsvorgangs erfasst wird, finden entsprechende Informationen im Software Developer Kit unter der Iversionevents2-Schnittstelle des OnarchiveUpdated-Ereignisses.
Abfragen für historische Versionen erfolgen auf der Archivklasse:
Abfragen für Transaktionsversionen erfolgen weiterhin auf den Basis- und Delta-Tabellen:
Hinzufügen eines Features
Dieses Feature in einem Parcel-Fabric zeigt die Flurstücknummer 116 und die zugehörige Zeile an. Für versionierte Daten wird diese Zeile in der Archivklasse angezeigt. Für nicht versionierte Daten wird diese Zeile in der Basistabelle für Flurstücke angezeigt. Das Attribut "gdb_from_date" enthält die Uhrzeit und das Datum der Erstellung, während "gdb_to_date" den 31.12.9999 enthält, weil das Feature seit der Aktivierung der Archivierung nicht geändert oder gelöscht wurde.
Wenn ein Feature eingefügt wird (Flurstück 117), wird eine Zeile mit dem Attribut "gdb_from_date" eingefügt, das mit dem Zeitstempel dieses Zurückschreibungsvorgangs aktualisiert wird. Das Attribut gdb_to_date in der neuen Zeile enthält den 31.12.9999, da dieses Feature noch nicht aktualisiert oder gelöscht wurde.
Aktualisieren eines Features
Wenn ein Feature aktualisiert wird, wird "gdb_to_date" auf den Zeitstempel dieses Archivierungsvorgangs festgelegt, und eine Zeile wird eingefügt, um die aktuelle Repräsentation des Features anzuzeigen. Das Attribut "gdb_from_date" in dieser neuen Zeile wird auf die Uhrzeit des Archivierungsvorgangs festgelegt, während "gdb_to_date" den 31.12.9999 enthält, weil das Attribut noch nicht geändert oder gelöscht wurde.
Im folgenden Diagramm werden zwei Flurstücke, 116 und 117, mit den entsprechenden Attributen "gdb_from_date" und "gdb_to_date" vor dem Aktualisierungsvorgang veranschaulicht.
Wenn die Flurstücksgrenze für Flurstück 117 ausgedehnt wird, wird "gdb_to_date" mit dem Zeitstempel des Archivierungsvorgangs aktualisiert, und eine neue Zeile wird erstellt. Das Attribut gdb_from_date in dieser neuen Zeile wird auf das Datum und die Uhrzeit des Archivierungsvorgangs festgelegt.
Bei Abfragen, die Zeiten vor der Aktualisierung (12.07.2005, 17:34:22) untersuchen, wird das Flurstück 117 in dem Zustand angezeigt, in dem es vor der Aktualisierung vorlag. Wenn Zeiten vor dem 09.07.2005, 14:23:43 abgefragt werden, wird das Flurstück 117 nicht angezeigt, da es noch nicht erstellt worden war. Für alle Momentabfragen nach der Aktualisierung (14.7.2005 3:45:23 Uhr) wird Flurstück 117 in der aktuellen Repräsentation mit der erweiterten Grenze angezeigt.
Löschen eines Features
Wenn ein Feature gelöscht wird, wird gdb_to_date mit dem Zeitstempel des Archivierungsvorgangs aktualisiert. Im folgenden Diagramm werden die Flurstücke 116 und 117 mit den entsprechenden Attributen "gdb_from_date" und "gdb_to_date" veranschaulicht.
Wenn das Flurstück 117 nun gelöscht wird, wird das Attribut "gdb_to_date" mit dem Zeitstempel des Archivierungsvorgangs aktualisiert.
Technischer Hinweis zum Archivieren mit versionierten Daten
Im folgenden Szenario kann in der Archivklasse eine zeitliche Lücke entstehen:
Ein Bearbeiter bearbeitet die DEFAULT-Version in einer Editiersitzung direkt und löscht ein Objekt.
Anschließend speichert der Bearbeiter die Änderungen, wodurch das Attribut gdb_to_date der Archivklasse mit dem Zeitstempel des Löschvorgangs für dieses Objekt aktualisiert wird.
Wenn dasselbe Objekt in einer Child-Version aktualisiert und mit der DEFAULT-Version abgeglichen wird, entsteht ein Konflikt.
Wenn während der Konfliktlösung ein Bearbeiter den Konflikt durch die aktualisierte Repräsentation der Zeile ersetzt, wird die Zeile beim Zurückschreiben der Version in der DEFAULT-Version wiederhergestellt. Mit dem Archivierungsvorgang wird in der Archivklasse eine neue Zeile eingefügt. Das Attribut gdb_from_date wird auf den Zeitstempel und gdb_to_date auf den 31.12.9999 festgelegt.
Wenn der Bearbeiter die Lineage des Objekts über den Zeitraum anzeigt, weisen die Datumsangaben eine Lücke zwischen gdb_to_date und gdb_from_date auf, als das Objekt in der DEFAULT-Version nicht vorhanden war.