Ugh. A resposta é realmente complicada e exige muito conhecimento do ArcSDE, por isso tentarei ser o mais breve possível.
Observe que vou me referir a alguns diagramas do white paper de versões super impressionantes que você pode encontrar no site da ESRI . Se você está lidando com controle de versão, eu recomendo extremamente que você o leia completamente.
Então, você precisa entender qual é a relação entre um estado (ou seja, um nó da árvore de estados) e uma versão nomeada (ou seja, um rótulo apontando para um estado).
Um banco de dados típico pode se parecer com o diagrama de estado abaixo:
Aqui, você tem quatro versões no banco de dados (Versão A, Versão B, Versão C e PADRÃO). Mas talvez eu esteja me adiantando um pouco. Vamos começar com o que é um estado .
Você pode pensar em um estado como uma "transação" - uma unidade lógica que contém várias edições em uma - ou várias tabelas. Pode incluir duas inserções em "FeatureClass A", uma exclusão de "Feature Class B" e uma modificação (efetivamente uma exclusão + uma inserção) em "Feature Class X". Tudo agrupado em um.
Vejamos um diagrama de estados pequeno e simples do ArcSDE que começa com o ID de estado 0:
Se você iniciar no estado 0 e editar em uma ou várias tabelas em uma operação de edição, criará um estado filho 1 e fará dele o ID do estado ativo atual . Outro grupo subseqüente de edições criará o estado filho 2. Se você deseja desfazer, não precisa modificar o ID do estado de forma alguma - tudo o que você precisa fazer é alterar o ID do estado ativo atual para 1 ou 0 (dependendo quão longe você quer ir). Uma refazer é o oposto - basta mover o ID do estado ativo atual para frente - o máximo que você quiser.
É assim que desfazer / refazer funciona no versionamento do ArcSDE.
OK, seguindo em frente. Digamos que você queira tornar uma edição permanente (ou seja, você deseja salvar). O que você tem que fazer? Bem, salvar é apenas pegar um rótulo de versão e avançar para um estado específico. É como carimbar e dizer "é assim que a Versão A deve se parecer". Portanto, se você olhar para o primeiro diagrama, verá que ele possui quatro versões nomeadas .
- A versão B aponta para o ID do estado 1
- A versão A aponta para o estado id 3
- A versão C aponta para o estado id 5
A versão "SDE.DEFAULT" aponta para a identificação do estado 4
Observe que este diagrama, apesar da crença popular, não diz nada sobre o relacionamento lógico pai-filho que eles têm. O relacionamento lógico pai-filho para o primeiro diagrama pode ter a seguinte aparência:
Este é o relacionamento pai-filho que você vê no ArcMap / ArcCatalog. Seu objetivo é restringir quais versões você pode reconciliar. Nesse ponto, você poderia (com razão) estar se perguntando: por que diabos eu preciso disso? A resposta está no controle de versão dos fluxos de trabalho . Acontece que as pessoas usam o versionamento há bastante tempo e existem algumas maneiras preferidas de estruturá-los, mas esse é um tópico para outro dia, já que quero responder sua pergunta hoje :)
Se movendo...
OK, então o que mais essas versões nomeadas fazem? Bem, eles afetam como esse processo chamado compress se comporta.
O Compress é sobre pegar estados intermediários que podem não ser necessários, remover os desnecessários e combiná-los. Você pode acionar a operação de compactação do ArcSDE através do ArcCatalog, configurar um serviço que faz isso de vez em quando, e algumas operações de edição do ArcMap acionam operações de minicompactação (ou seja, apenas para pequenos ramos que estão sendo usados).
O diagrama à esquerda mostra uma árvore de estados antes de ser compactada, e o diagrama à direita mostra logo após a compactação:
Um conceito importante a ser entendido (que vou me referir a você quando finalmente responder à sua pergunta) é que cada estado é um candidato em potencial a ser compactado - exceto os que possuem rótulos (ou seja, versões nomeadas) apontados para eles.
Você pode ver que antes da compactação existem alguns estados extra-desnecessários. De fato, todo o ramo [3,4,5] foi removido. Se houvesse uma versão nomeada em 5, o resultado final teria sido muito diferente.
As operações de compactação estão disponíveis para economizar espaço no banco de dados, removendo os registros desnecessários.
OK, seguindo em frente.
O último conceito que você precisa entender é a reconciliação - que efetivamente mescla duas ramificações em uma.
Então, vamos voltar ao nosso primeiro diagrama. Diga que deseja reconciliar a versão A com o SDE.DEFAULT.
Vamos recapitular: quatro versões nomeadas apontando para vários IDs de estado. Portanto, a primeira coisa que precisamos fazer é criar um estado filho na versão de destino, portanto, criamos um estado filho no estado id 4, em nosso exemplo, eu chamo esse estado 20.
O próximo passo é calcular as diferenças entre as duas versões (os detalhes são muito longos para este post, mas posso dizer que eles são feitos com cursores de diferença ) e depois aplicar essas diferenças ao novo ID de estado 20 (linha azul).
Digamos que você decida fazer mais edições ou que encontrou conflitos e esteja escolhendo linhas de uma versão ou de outra. Não importa. Essas são apenas novas edições, e são realizadas dentro de uma operação de edição, como os estados filhos abaixo da ramificação que você mesclou. Neste exemplo, fiz mais dois grupos consecutivos de edições após a reconciliação.
Encantador.
Então agora diga que você está pronto para " postar " a versão. O que isso significa? Isso é apenas pegar os rótulos e apontá-los para o mesmo ID de estado. Aqui, vou postar a versão A no SDE.DEFAULT. Isto é o que parece:
TADAAA! Portanto, agora a versão A e o SDE.DEFAULT estão apontando para o mesmo ID de estado e, portanto, parecem iguais.
OK, então agora posso finalmente responder sua pergunta.
Você pode desfazer uma postagem? A documentação do ArcGIS lhe dirá que não - não mexa com isso. Não faça isso, porque você estará mexendo com essa lógica e, se não souber o que está fazendo, poderá corromper seus dados.
Mas, na verdade, basta uma atualização de uma das tabelas do ArcSDE Versioning - a tabela VERSIONS e modificar a entrada do rótulo (também conhecido como versão nomeada). Em nosso exemplo, aponte para o estado 21, e você acabou de desfazer toda a operação de edição. Defina-o como 3 e você acaba de desfazer toda a reconciliação. Defina como 5 e agora você está em um lugar completamente diferente. Se há ou não conflitos é irrelevante.
Obviamente, isso pressupõe que uma compactação não aconteceu. Vamos considerar o caso em que a compactação está acontecendo exatamente ao mesmo tempo em que você está atualizando a tabela SDE. Lembre-se, se você - ou outra pessoa - executar uma compactação depois que você postar, é assim que a árvore se parece:
Você pode desfazer a reconciliação após a compactação? Bem, neste caso, não . A compactação afastou toda a ramificação, portanto você não pode desfazer - os dados foram removidos. Se houvesse outra versão nomeada nesse ramo, a compactação não teria destruído esse ramo. Espero que agora isso faça sentido.
Então você deveria fazer isso? Dependendo de você, se você não souber o que está fazendo, poderá facilmente perder dados após uma compactação.