Pfui. Die Antwort ist wirklich kompliziert und erfordert viel ArcSDE-Hintergrund. Ich werde versuchen, mich so kurz wie möglich zu fassen.
Hinweis: Ich beziehe mich auf einige Diagramme aus dem Super Awesome Versioning Whitepaper, das Sie auf der ESRI-Website finden . Wenn Sie sich mit der Versionierung beschäftigen, empfehle ich Ihnen dringend, diese gründlich durchzulesen.
Dann müssen Sie die Beziehung zwischen einem Zustand (dh einem Knoten aus dem Zustandsbaum) und einer benannten Version (dh einer Bezeichnung, die auf einen Zustand zeigt) verstehen .
Eine typische Datenbank kann wie folgt aussehen:
Hier haben Sie vier Versionen in der Datenbank (Version A, Version B, Version C und DEFAULT). Aber vielleicht bin ich ein bisschen vor mir. Beginnen wir mit dem, was ein Staat ist.
Sie können sich einen Zustand als "Transaktion" vorstellen - eine logische Einheit, die mehrere Änderungen an einer oder mehreren Tabellen enthält. Es kann zwei Einfügungen in "FeatureClass A", eine Löschung aus "Feature Class B" und eine Änderung (effektiv eine Löschung + eine Einfügung) in "Feature Class X" enthalten. Alles in einem zusammengefasst.
Schauen wir uns ein kleines, einfaches ArcSDE-Zustandsdiagramm an, das mit der Zustands-ID 0 beginnt:
Wenn Sie bei Status 0 beginnen und eine oder mehrere Tabellen in einer Bearbeitungsoperation bearbeiten, erstellen Sie einen untergeordneten Status 1 und legen diesen als aktuelle aktive Status-ID fest . Eine weitere nachfolgende Gruppe von Änderungen erstellt den untergeordneten Status 2. Wenn Sie den Vorgang rückgängig machen möchten, müssen Sie die Status-ID in keiner Weise ändern. Sie müssen lediglich die aktuelle aktive Status-ID in 1 oder 0 ändern (je nach Status) wie weit willst du zurück gehen). Ein Redo ist das Gegenteil - verschieben Sie einfach die aktuelle aktive Status-ID nach vorne - so weit nach vorne, wie Sie möchten.
So funktioniert das Rückgängigmachen / Wiederherstellen in der ArcSDE-Versionierung.
OK, mach weiter. Angenommen, Sie möchten eine Bearbeitung permanent machen (dh Sie möchten sie speichern). Was hast du zu tun? Beim Speichern wird lediglich ein Versionsetikett abgerufen und in einen bestimmten Status verschoben. Ein bisschen wie es zu stempeln und zu sagen "So muss Version A aussehen". Wenn Sie also auf das erste Diagramm zurückblicken, werden Sie feststellen, dass es vier benannte Versionen hat .
- Version B zeigt auf Status-ID 1
- Version A zeigt auf ID 3
- Version C zeigt auf Status-ID 5
Die Version "SDE.DEFAULT" zeigt auf die Status-ID 4
Bitte beachten Sie, dass dieses Diagramm trotz allgemeiner Überzeugung nichts über die logische Eltern-Kind-Beziehung aussagt, die sie haben. Die logische Parent-Child-Beziehung für das erste Diagramm könnte folgendermaßen aussehen:
Dies ist die Eltern-Kind-Beziehung, die Sie in ArcMap / ArcCatalog sehen. Ziel ist es, die Versionen einzuschränken, mit denen Sie abgleichen können. Zu diesem Zeitpunkt könnten Sie sich (zu Recht) fragen, warum zum Teufel brauche ich das? Die Antwort liegt in der Versionierung von Workflows . Es stellt sich heraus, dass die Leute schon seit einiger Zeit die Versionierung verwenden und es einige bevorzugte Möglichkeiten gibt, diese zu strukturieren, aber das ist ein Thema für einen anderen Tag, da ich Ihre Frage heute beantworten möchte :)
Weitermachen ...
OK, was machen diese benannten Versionen sonst noch? Nun, sie beeinflussen, wie sich dieser als Komprimieren bezeichnete Prozess verhält.
Bei der Komprimierung geht es darum, nicht benötigte Zwischenzustände zu erfassen, unnötige zu entfernen und zu kombinieren. Sie können den ArcSDE-Komprimierungsvorgang über ArcCatalog auslösen, einen Dienst einrichten, der dies von Zeit zu Zeit ausführt, und einige ArcMap-Bearbeitungsvorgänge lösen Minikomprimierungsvorgänge aus (dh nur für kleine Verzweigungen, die verwendet werden).
Das Diagramm links zeigt einen Statusbaum, bevor er komprimiert wird, und das Diagramm rechts zeigt ihn, nachdem er komprimiert wurde:
Ein wichtiges zu verstehendes Konzept (auf das ich Sie später noch verweisen werde) ist, dass jeder einzelne Staat ein potenzieller Kandidat für die Komprimierung ist - mit Ausnahme von Staaten, auf die Labels (dh benannte Versionen) verweisen .
Sie können sehen, dass es vor dem Komprimieren einige unnötige Zustände gibt. Tatsächlich wurde der gesamte [3,4,5] Zweig entfernt. Hätte es bei 5 eine benannte Version gegeben, wäre das Endergebnis sehr unterschiedlich ausgefallen.
Mit Komprimierungsvorgängen können Sie Speicherplatz in Ihrer Datenbank sparen, indem Sie nicht mehr benötigte Datensätze entfernen.
OK, mach weiter.
Das letzte Konzept, das Sie verstehen müssen, ist der Abgleich, der effektiv zwei Zweige zu einem vereint.
Kehren wir also zu unserem ersten Diagramm zurück. Angenommen, Sie möchten Version A mit SDE.DEFAULT abgleichen.
Fassen wir Folgendes zusammen: Vier benannte Versionen, die auf verschiedene Status-IDs verweisen. Das erste, was wir tun müssen, ist, einen untergeordneten Status unter der Zielversion zu erstellen. Daher erstellen wir einen untergeordneten Status unter Status-ID 4. In unserem Beispiel bezeichne ich diesen Status als ID 20.
Der nächste Schritt besteht darin, die Unterschiede zwischen beiden Versionen zu berechnen (die Details sind für diesen Beitrag zu lang, aber ich kann Ihnen sagen, dass sie mit Differenz-Cursorn abgeschlossen sind ) und diese Unterschiede dann auf die neue Status-ID 20 (blaue Linie) anzuwenden.
Angenommen, Sie möchten mehr Änderungen vornehmen oder Sie haben Konflikte festgestellt und wählen Zeilen aus der einen oder der anderen Version aus. Es spielt keine Rolle. Dies sind nur neue Bearbeitungen, die innerhalb eines Bearbeitungsvorgangs vorgenommen werden, wie untergeordnet unter dem Zweig angegeben, den Sie zusammengeführt haben. In diesem Beispiel habe ich nach dem Abgleich zwei weitere aufeinanderfolgende Bearbeitungen vorgenommen.
Schön.
Sagen Sie jetzt, dass Sie bereit sind, die Version zu " posten ". Was bedeutet das? Das heißt, Sie müssen nur die Beschriftungen greifen und auf dieselbe Status-ID verweisen. Hier werde ich Version A in SDE.DEFAULT veröffentlichen. So sieht es aus:
TADAAA! Daher verweisen Version A und SDE.DEFAULT jetzt auf dieselbe Status-ID und sehen daher gleich aus.
OK, jetzt kann ich endlich deine Frage beantworten.
Kannst du einen Beitrag rückgängig machen? In der ArcGIS-Dokumentation wird " Nein" angegeben . Tun Sie es nicht, denn Sie werden mit dieser Logik herumspielen, und wenn Sie nicht wissen, was Sie tun, können Sie Ihre Daten beschädigen.
In Wahrheit ist es jedoch nur erforderlich, ein Update einer der ArcSDE-Versionierungstabellen - der VERSIONS-Tabelle - durchzuführen und den Eintrag der Bezeichnung (auch als benannte Version bezeichnet) zu ändern. Zeigen Sie in unserem Beispiel auf die ID 21, und Sie haben gerade den gesamten Bearbeitungsvorgang rückgängig gemacht. Setzen Sie es auf 3, und Sie haben gerade den gesamten Abgleich rückgängig gemacht. Stellen Sie den Wert auf 5 ein und Sie befinden sich an einem völlig anderen Ort. Ob es Konflikte gibt oder nicht, ist unerheblich.
Dies setzt natürlich voraus, dass keine Komprimierung stattgefunden hat. Betrachten wir den Fall, in dem die Komprimierung genau zum gleichen Zeitpunkt stattfindet, zu dem Sie die SDE-Tabelle aktualisieren. Denken Sie daran, wenn Sie - oder jemand anderes - nach dem Posten eine Komprimierung ausführen, sieht der Baum folgendermaßen aus:
Können Sie den Abgleich nach der Komprimierung rückgängig machen? Nun, in diesem Fall nein . Die Komprimierung hat den gesamten Zweig weggeblasen, sodass Sie nicht mehr rückgängig machen können - diese Daten wurden entfernt. Wenn es eine andere benannte Version in diesem Zweig gegeben hätte, hätte die Komprimierung diesen Zweig nicht zerstört. Ich hoffe, dass das jetzt Sinn macht.
Also solltest du das tun? Wenn Sie nicht wissen, was Sie tun, können Sie nach einer Komprimierung leicht Daten verlieren.