Ugh. La risposta è davvero complicata e richiede molto background in ArcSDE, quindi cercherò di essere il più breve possibile.
Nota Farò riferimento ad alcuni diagrammi del fantastico white versioning che puoi trovare nel sito ESRI . Se hai a che fare con il controllo delle versioni, ti incoraggio a leggere attentamente.
Quindi, è necessario comprendere qual è la relazione tra uno stato (ovvero un nodo dall'albero degli stati) e una versione denominata (ovvero un'etichetta che punta a uno stato).
Un database tipico può apparire come il diagramma di stato seguente:
Qui, hai quattro versioni nel database (Versione A, Versione B, Versione C e DEFAULT). Ma forse, mi sto un po 'anticipando. Cominciamo con cos'è uno stato .
Puoi considerare uno stato come una "transazione" - un'unità logica che contiene diverse modifiche a una o più tabelle. Può includere due inserti in "FeatureClass A", un'eliminazione da "Feature Class B" e una modifica (in effetti un'eliminazione + un insert) in "Feature Class X". Tutti raggruppati in uno.
Diamo un'occhiata a un piccolo, semplice diagramma di stato ArcSDE che inizia con lo stato ID 0:
Se si avvia allo stato 0 e si apportano modifiche a una o più tabelle in un'operazione di modifica, verrà creato uno stato figlio 1 e lo si trasformerà nell'ID stato attivo corrente . Un altro gruppo di modifiche successivo creerà lo stato figlio 2. Se si desidera annullare, non è necessario modificare l'ID stato in alcun modo: tutto ciò che occorre fare è modificare l'ID stato attivo corrente su 1 o 0 (a seconda quanto lontano vuoi andare). Una ripetizione è l'opposto: basta spostare in avanti l'ID dello stato attivo corrente, il più avanti possibile.
Ecco come funziona annulla / ripristina nel controllo delle versioni di ArcSDE.
OK, andiamo avanti. Supponiamo che tu voglia rendere permanente una modifica (ovvero, vuoi salvare). Cosa devi fare? Bene, il salvataggio è solo afferrare un'etichetta di versione e spostarla in avanti verso uno stato particolare. Un po 'come timbrarlo e dire "questo è l'aspetto della versione A". Quindi, se guardi indietro al primo diagramma, vedrai che ha quattro versioni con nome .
- La versione B indica lo stato 1
- La versione A indica lo stato 3
- La versione C indica lo stato 5
La versione "SDE.DEFAULT" punta all'ID stato 4
Si noti che questo diagramma, nonostante la credenza popolare, non ti dice nulla sulla logica relazione genitore-figlio che hanno. La relazione logica padre-figlio per il primo diagramma potrebbe apparire in questo modo efficace:
Questa è la relazione padre-figlio che vedi in ArcMap / ArcCatalog. Lo scopo è limitare le versioni con cui è possibile riconciliare. A questo punto, potresti (giustamente) chiederti, perché diavolo ho bisogno di questo? La risposta sta nei flussi di lavoro di versioning . A quanto pare, le persone usano il controllo delle versioni da un po 'di tempo e ci sono alcuni modi preferiti di strutturarli, ma questo è un argomento per un altro giorno da quando voglio rispondere alla tua domanda oggi :)
Andare avanti...
OK, cos'altro fanno queste versioni nominate? Bene, influenzano il comportamento di questo processo chiamato comprimere .
Comprimere significa afferrare gli stati intermedi che potrebbero non essere necessari e rimuovere quelli non necessari e combinarli. È possibile attivare l'operazione di compressione ArcSDE tramite ArcCatalog, impostare un servizio che lo fa ogni tanto e alcune operazioni di modifica di ArcMap attiveranno operazioni di mini-compressione (vale a dire solo per piccoli rami che vengono utilizzati).
Il diagramma a sinistra mostra un albero di stato prima che venga compresso e quello a destra lo mostra subito dopo che è stato compresso:
Un concetto importante da comprendere (che farò riferimento a te quando finalmente riuscirò a rispondere alla tua domanda) è che ogni singolo stato è un potenziale candidato da comprimere - tranne gli stati che hanno etichette (cioè versioni denominate) puntate su di loro.
Puoi vedere che prima della compressione ci sono alcuni stati extra - non necessari. In effetti, l'intero ramo [3,4,5] è stato rimosso. Se ci fosse stata una versione nominata a 5, il risultato finale sarebbe stato molto diverso.
Le operazioni di compressione sono lì per risparmiare spazio sul database rimuovendo i record non più necessari.
OK, andiamo avanti.
L'ultimo concetto che devi capire è la riconciliazione , che sta effettivamente fondendo due rami in uno.
Quindi torniamo al nostro primo diagramma. Supponi di voler riconciliare la versione A con SDE.DEFAULT.
Ricapitoliamo: quattro versioni nominate che puntano a vari ID di stato. Quindi la prima cosa che dobbiamo fare è creare uno stato figlio nella versione di destinazione, quindi creiamo uno stato figlio con lo stato ID 4, nel nostro esempio, chiamo tale stato ID 20.
Il prossimo passo è calcolare le differenze tra le due versioni (i dettagli sono troppo lunghi per questo post, ma posso dirti che sono stati fatti con i cursori delle differenze ) e quindi applicare quelle differenze a quel nuovo ID di stato 20 (linea blu).
Supponi che decidi di apportare più modifiche o di aver trovato conflitti e di scegliere le righe da una versione o dall'altra. Non importa Queste sono solo nuove modifiche e vengono eseguite all'interno di un'operazione di modifica, come afferma figlio sotto il ramo che hai unito. In questo esempio, ho eseguito altri due gruppi consecutivi di modifiche dopo la riconciliazione.
Bello.
Quindi ora dì che sei pronto per " pubblicare " la versione. Cosa significa? Questo è solo afferrare le etichette e indicarle allo stesso ID di stato. Qui, pubblicherò la versione A su SDE.DEFAULT. Ecco come appare:
TADAAA! Quindi ora la versione A e SDE.DEFAULT puntano allo stesso ID di stato e quindi sembrano uguali.
OK, ora posso finalmente rispondere alla tua domanda.
Puoi annullare un post? La documentazione di ArcGIS ti dirà di no - non scherzare con esso. Non farlo, perché ti sbaglierai con questa logica e se non sai cosa stai facendo, puoi corrompere i tuoi dati.
Ma in realtà, tutto ciò che serve è fare un aggiornamento di una delle tabelle di Versioning di ArcSDE - la tabella VERSIONS e modificare la voce dell'etichetta (nota anche come versione denominata). Nel nostro esempio, indica lo stato 21 e hai appena annullato l'intera operazione di modifica. Impostalo su 3 e hai appena annullato la riconciliazione. Impostalo su 5 e ora ti trovi in un posto completamente diverso. Se ci sono o non ci sono conflitti è irrilevante.
Ovviamente, ciò presuppone che non si sia verificato un impacco. Consideriamo il caso in cui la compressione sta avvenendo esattamente nello stesso momento in cui si aggiorna la tabella SDE. Ricorda, se tu o qualcun altro esegui un impacco dopo aver pubblicato questo è l'aspetto dell'albero:
Puoi annullare la riconciliazione dopo la compressione? Bene, in questo caso, no . La compressione ha spazzato via l'intero ramo, quindi non è possibile annullare: quei dati sono stati rimossi. Se ci fosse stata un'altra versione denominata su quel ramo, la compressione non avrebbe distrutto quel ramo. Spero che ormai abbia senso.
Quindi dovresti farlo? A te, se non sai cosa stai facendo, puoi facilmente perdere dati dopo un impacco.