あー 答えは本当に複雑なものであり、ArcSDEのバックグラウンドを大量に必要とするため、できるだけ簡潔にするようにします。
注:私は、ESRIサイトで見つけることができる非常に素晴らしいバージョン管理ホワイトペーパーの図を参照します。バージョン管理を扱っている場合は、徹底的に読むことを強くお勧めします。
次に、状態(つまり、状態ツリーのノード)と名前付きバージョン(つまり、状態を指すラベル)の関係を理解する必要があります。
典型的なデータベースは、次の状態図のようになります。
ここでは、データベースに4つのバージョン(バージョンA、バージョンB、バージョンC、およびデフォルト)があります。しかし、おそらく、私は自分より少し先に進んでいます。状態とは何かから始めましょう。
状態は、「トランザクション」、つまり1つまたは複数のテーブルに対する複数の編集を含む論理ユニットと考えることができます。「Feature Class A」への2つの挿入、「Feature Class B」からの削除、および「Feature Class X」への変更(実質的に削除+挿入)を含めることができます。すべてが1つにグループ化されました。
状態ID 0から始まる、小さくシンプルなArcSDE状態図を見てみましょう。
状態0で開始し、編集操作で1つまたは複数のテーブルを編集する場合、子状態1を作成し、それを現在のアクティブな状態idにします。編集の別の後続のグループは、子状態2を作成します。元に戻す場合は、状態IDを変更する必要はありません。現在のアクティブ状態IDを1または0に変更するだけですどれくらい前に戻りたいか)。やり直しは反対です-現在のアクティブな状態IDを前方に移動するだけ-必要なだけ前方に移動します。
これが、ArcSDEバージョン管理で元に戻す/やり直しが機能する方法です。
OK 編集を永続的にしたい(つまり、保存したい)としましょう。あなたは何をしなければなりませんか?保存とは、バージョンラベルを取得して特定の状態に移行することです。スタンプを押して、「これがバージョンAのように見える必要がある」と言っているようなものです。したがって、最初の図を振り返ると、4つの名前付きバージョンがあることがわかります。
これは、ArcMap / ArcCatalogに表示される親子関係です。目的は、どのバージョンに対してリコンサイルできるかを制限することです。この時点で、(当然のことながら)自問自答することができます。なぜこれが必要なのでしょうか?その答えは、ワークフローのバージョン管理にあります。結局のところ、人々はかなり長い間バージョニングを使用しており、これらを構成する方法がいくつかありますが、今日はあなたの質問に答えたいので、それは別の日のトピックです:)
次へ...
さて、この名前付きバージョンは他に何をしますか?まあ、それらは圧縮と呼ばれるこのプロセスの動作に影響します。
圧縮とは、必要ではないかもしれない中間状態を取得し、不要なものを削除し、それらを結合することです。ArcCatalogを使用してArcSDE圧縮操作をトリガーし、それを1つずつ実行するサービスをセットアップできます。一部のArcMap編集操作は、ミニ圧縮操作をトリガーします(使用されている小さなブランチのみ)。
左側の図は、圧縮される前の状態ツリーを示し、右側の図は、圧縮された直後の状態ツリーを示しています。
理解すべき重要な概念(質問に最終的に回答したら参照します)は、ラベル(名前付きバージョン)が指定されている状態を除き、すべての状態が圧縮される可能性があるということです。
圧縮の前に、余分な-不要な状態があることがわかります。実際、[3,4,5]ブランチ全体が削除されました。5に名前付きバージョンがあった場合、最終結果は大きく異なります。
圧縮操作は、不要になったレコードを削除してデータベースのスペースを節約するためにあります。
OK
理解する必要がある最後の概念は、調整です。これは、2つのブランチを1つに効果的にマージします。
最初の図に戻りましょう。バージョンAをSDE.DEFAULTに一致させたいとします。
要約しましょう:さまざまな状態IDを指す4つの名前付きバージョン。したがって、最初に行う必要があるのは、ターゲットバージョンの下に子状態を作成することです。したがって、この例では、状態id 4の下に子状態を作成し、その状態id 20を呼び出します。
次のステップは、両方のバージョン間の差異を計算することです(詳細はこの投稿には長すぎますが、差異カーソルを使用して完了したことを伝えることができます)。次に、それらの差異を新しい状態ID 20(青い線)に適用します。
さらに編集を行うことを決定したか、競合を検出し、あるバージョンまたは別のバージョンから行を選択しているとします。関係ありません。これらは単なる新しい編集であり、マージしたブランチの下に子ステートがあるため、編集操作内で実行されます。この例では、調整後にさらに2つの連続した編集グループを作成しました。
素敵。
そのため、バージョンを「投稿」する準備ができたと言います。どういう意味ですか?これは、ラベルを取得して、同じ状態IDを指すようにするだけです。ここでは、バージョンAをSDE.DEFAULTに投稿します。これは次のようになります。
TADAAA!そのため、バージョンAとSDE.DEFAULTは同じ状態IDを指しているため、同じように見えます。
OK、そう今私は最終的にあなたの質問に答えることができます。
投稿を取り消すことができますか?ArcGISのドキュメントには、「いいえ」と書かれています-混乱しないでください。このロジックをいじるので、やらないでください。何をしているかわからない場合は、データが破損する可能性があります。
しかし、実際には、ArcSDEバージョン管理テーブルの 1つであるVERSIONSテーブルを1回更新し、ラベルのエントリ(名前付きバージョン)を変更するだけです。この例では、状態ID 21をポイントし、編集操作全体を元に戻しました。3に設定すると、調整全体が元に戻ります。5に設定すると、今はまったく別の場所にいます。競合があるかどうかは関係ありません。
もちろん、これは圧縮が行われていないことを前提としています。SDEテーブルを更新しているのとまったく同時に圧縮が行われている場合を考えてみましょう。投稿した後にあなたまたは他の誰かが圧縮を実行する場合、これはツリーのように見えることを覚えておいてください:
圧縮後に調整を元に戻すことはできますか?まあ、この場合、いいえ。圧縮はそのブランチ全体を吹き飛ばしたので、元に戻すことはできません-そのデータは削除されました。そのブランチに別の名前付きバージョンがあった場合、圧縮はそのブランチを破壊しませんでした。今ではこれが理にかなっていることを願っています。
だからあなたはこれをする必要がありますか?あなた次第ですが、何をしているのかわからない場合は、圧縮後に簡単にデータを失うことができます。