Quando o Versioning with ArcSDE pode editar edições canceladas ou rejeitadas?


28

Estou usando o ArcGIS 9.3.1 e tentando trabalhar com um geodatabase SDE (com uma classe de recurso de polígono) que já foi registrado como versionado. Eu sou novo no controle de versão e ainda estou tentando descobrir algumas de suas funções básicas. Até agora, não consegui descobrir se é possível "cancelar" ou "rejeitar" determinadas edições depois de postadas em uma versão pai.

Por exemplo, digamos que temos três versões: o SDE.DEFAULT original que foi criado quando foi registrado como versionado, uma versão filha do padrão chamada SDE.QA (para Quality Assurance) e uma versão filha do QA chamada SDE .Edit1 (onde as edições ocorrem pela primeira vez). Se certos recursos do SDE.Edit1 fossem editados (por exemplo, para simplificar, digamos que um polígono foi adicionado e um foi removido), o SDE.Edit1 foi reconciliado com o SDE.QA e posteriormente publicado no SDE.QA. existe alguma maneira de desfazer mais tarde essa alteração? No seguimento desta questão, seria possível rejeitar apenas algumas alterações? Por exemplo, aceitando adicionar o primeiro poli, mas rejeitando remover o segundo poli?

Pelo que sei, uma vez que as edições foram publicadas na versão pai, todas essas alterações agora são uma parte "permanente" (por falta de uma palavra melhor) da versão pai. Estou ciente do fato de que essas alterações são todas registradas em duas tabelas, as tabelas "ADD" e "DELETE" (geralmente chamadas de tabelas "delta") e, na verdade, não alteram o próprio FC original. Pensei em alterar manualmente essas tabelas delta, mas encontrei pessoas suficientes alertando contra isso para saber que provavelmente não é a solução certa.

Talvez seja o meu entendimento do controle de versão que precise de algum trabalho, mas parece que não consegui encontrar uma maneira de rejeitar uma alteração ou desfazer uma alteração depois de publicada. Isso me parece estranho, pois isso significa que não há como desfazer uma postagem que contenha um erro. Também não consigo encontrar uma maneira de rastrear a linhagem dessas versões (ou seja, qual versão é a filha de qual pai). Enquanto estou no assunto, se alguém souber de alguma referência particularmente útil ao ArcSDE (links, artigos, livros, etc.) que possa ajudar no meu entendimento do ArcSDE (e talvez responda a algumas dessas perguntas), seria muito apreciado !


Embora as respostas até agora tenham sido úteis (obrigado pelos links), ainda não consigo encontrar uma resposta para o núcleo da minha pergunta. Novamente, talvez seja o meu próprio mal-entendido da situação. Aqui está o que eu quero saber:

Você pode reverter (inversamente, quero dizer ) desfazer uma postagem depois que ela for feita de uma versão filho para uma versão pai? Nesse cenário, o pai pode ser, mas não precisa ser, a versão SDE.DEFAULT. Ainda melhor, gostaria de saber se você pode reverter uma parte de uma postagem (digamos, uma única edição em um polígono), depois que ela for publicada? Também gostaria de saber se isso pode ser feito sem a necessidade de detectar conflitos.

O fato de não encontrar uma resposta clara para essa pergunta (ou seja, "sim" ou "não") documentada em qualquer lugar me faz pensar que estou perdendo algo importante sobre a versão no ArcSDE. Eu também preferiria evitar manipular as tabelas A e D manualmente.


? versão & rdbms ajudaria
Brad Nesom

Respostas:


53

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:

diagrama típico do banco de dados do arcsde

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:

estado em movimento

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:

estrutura da versão lógica

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:

comprimir diagrama

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.

começar a reconciliar

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).

reconciliar push

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.

edições após reconciliar

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:

postagem

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:

comprimir após o post

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.


4
Ótima resposta Ragi! O versionamento da SDE é um animal complexo.
precisa saber é o seguinte

2
Obrigado. Eu mantive / estendi o código de reconciliação no ArcObjects por três anos, então toquei ajustando esse comportamento em várias versões do ArcGIS. Omiti algumas coisas para tentar simplificar os conceitos. Espero que esteja claro o suficiente como resposta.
Ragi Yaser Burhum 05/10

2
Obrigado por essa resposta muito completa, Ragi! Sinto que agora tenho uma compreensão melhor do que estou me metendo. Sua explicação de apontar para um ID de estado diferente como um mecanismo para "desfazer" uma mudança (ou talvez "dar um passo atrás" seria uma descrição mais adequada) faz sentido. Ainda estou explorando o link ArcSDE Versioning Tables que você forneceu. De qualquer forma, seguirei seu conselho e procederei com cautela. Obrigado novamente por dedicar um tempo para passar por esse passo a passo!
Sole23

2
Marcar como favorito este. Acho que ilustra por que a maioria das pessoas não deve mexer nas tabelas de versão do SDE e enviarei o link para esta resposta quando souber quem está pensando nisso!
Jay Cummins

2
Uau, você comentou uma das minhas perguntas e eu passei as últimas horas lendo e lendo todas as perguntas que você respondeu. Coisas incríveis, obrigado.
ianbroad

7

Existe uma ferramenta chamada Geodatabase Toolset (GDBT), que é um plugin para o ArcCatalog. Ele visualiza a linha de estado e as versões:

Faça o download do GDBT aqui


Obrigado Stefan. Este é exatamente o tipo de coisa que eu esperava que existisse! Isso facilita muito a visualização e o rastreamento da linhagem do meu SDE FC.
precisa saber é o seguinte

2
Além disso, a maioria das pessoas não sabe disso, mas (desde que os estados não tenham sido completamente compactados), você pode adicionar uma entrada à tabela VERSIONS para qualquer ID de estado que ainda seja válido e, em seguida, usar arcgis para navegar, editar com alegria e até reconciliar essa versão usando as ferramentas padrão do ArcGIS. Versões são apenas rótulos para identificações de estados que forçam o ArcSDE a manter esses estados ativos.
Ragi Yaser Burhum

OK, deixe-me fazer uma resposta mais elaborada.
Ragi Yaser Burhum 5/10

3

Falta conhecer a versão e o banco de dados. Aqui estão algumas informações iniciais que ajudarão você.
Administração básica
Aqui estão algumas informações sobre rec e post.
Portanto, se você aplicar esses conceitos e usar o comando version changes, ainda terá a oportunidade de rejeitar essas alterações quando rec e postar como padrão.

Você não tem três cópias do mesmo banco de dados.
Você tem uma cópia com versões.
Se você está administrando esse banco de dados, deve gastar muito tempo (talvez até dinheiro) e se familiarizar com tudo isso.
A classe esri Edição de fluxos de trabalho de edição para o banco de dados geográfico multiusuário é gratuita e ajudará alguns.
Mas o monte completo seria o que eu recomendo para uma pessoa que administra qualquer tipo de fluxo de trabalho de edição sde com versão.
Essa aula é ótima! para entender os fluxos de trabalho de edição com versão para o banco de dados geográfico multiusuário .


Obrigado pela sua resposta, Brad. Vou dar uma olhada nos links e classes que você recomendou!
precisa saber é o seguinte

esses links são para o servidor sql - mas existem outros arquivos de ajuda do rdbms muito próximos deles.
Brad Nesom

1
Eu assisti a gravação gratuita do seminário da Esri que você recomendou: Fluxos de trabalho de edição com versão para o banco de dados geográfico multiusuário . Eu pensei que era realmente útil e certamente valeu o tempo que levou para assistir (~ 1 hora). Mais uma vez obrigado pela recomendação. Também encontrei um link para ver respostas que eles tinham para perguntas adicionais que não tiveram tempo de responder durante o seminário aqui .
precisa saber é o seguinte

3

Eu tenho um jeito "rápido e sujo". Alterne para a versão padrão e edite algo sobre o polígono que foi excluído. Então, quando você se reconciliar com o padrão, terá um conflito. Clique com o botão direito do mouse no conflito e diga a ele para usar o estado de pré-reconciliação. Funciona para mim.


1

Sim, você pode fazer isso, mas precisará fazer isso usando SQL.

NÃO CONDENDO ISSO, FAÇA ISSO POR SUA CONTA E RISCO. Faça sempre o backup de seus dados antes de editar manualmente a SDE.

Você pode consultar a tabela sde.versions para obter o state_id da versão que você postou com as alterações que deseja desfazer. Em seguida, você pode ir para as tabelas A e D e excluir as entradas que correspondem ao state_id.

    SELECT *
    FROM SDE.VERSIONS
    WHERE NAME = 'Version of interest';

Agora você tem o state_id de interesse. Agora você precisa encontrar as tabelas A e D para a classe de recurso. Você faz isso consultando o table_registry. O valor será o registration_id. Portanto, para obter as tabelas A e D, basta adicionar o registration_id ao A e D.

    REGISTRATION_ID = 1
    A table would be A1
    D table would be D1

Em seguida, basta consultar as tabelas A e D e excluir as entradas que possuem o state_id da consulta acima.

Para descobrir mais sobre as relações pai e filho, basta consultar as seguintes tabelas sde.

    state_lineages
    versions
    states

Todos eles têm relacionamentos e devem ajudá-lo a seguir a bola quicando.


1

Não é possível desfazer edições depois que elas foram publicadas de uma versão filha para a versão pai. Veja: http://help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#//00270000001s000000.htm

A operação de postagem não pode ser desfeita, pois você está aplicando alterações a uma versão que não está editando no momento.

Você pode revisar as edições feitas em cada versão durante o processo de reconciliação - essa seria sua chance de rejeitar determinadas edições. O processo de reconciliação é explicado aqui .


1

Sim, como outros disseram, a resposta curta é não.

O controle de versão da SDE é tão promissor, mas é lamentável que seu fluxo de trabalho assuma apenas alterações avançadas nos recursos.

O versionamento completo do SDE ofereceria ferramentas que

  • Permite reversão (no nível do recurso) e aceita / rejeita
  • Permitiria desfazer
  • E permitiria desfazer os estados anteriores (ou seja, a partir do stat 3, desfazer as alterações do estado 1, mas manter as alterações do estado 2).

Eles seriam como um sistema de controle de versão de código-fonte SVN, mas para recursos espaciais.


Oi David, sim, era isso que eu tinha em mente quando analisamos o versionamento. Infelizmente, o fluxo de trabalho atual não oferece tanta flexibilidade, mas suponho que seja um trabalho em andamento e talvez acabe.
Sole23

1
Bem, se os dados nunca são compactados, em teoria, você pode voltar o quanto quiser. O problema é que as junções do banco de dados se tornam realmente lentas e o sistema degrada lentamente para inutilizável. O problema é diferente do gerenciamento de controle de origem, onde um repositório enorme de fontes git, como o kernel do linux, atualmente tem ~ 175 MB. Em termos geográficos, esse seria um problema muito, muito maior. No entanto, pessoas realmente inteligentes estão pensando neste problema agora. Veja Geogit: blog.opengeo.org/tag/geogit
Ragi Yaser Burhum

0

A resposta simples é NÃO.

A intenção de postar uma versão é confirmar essas edições na versão de destino.

A reversão é realizada ao não postar a versão (e é uma boa prática excluir essas versões abandonadas).

Ao editar a versão, o aplicativo de edição (por exemplo, ArcMap) pode fornecer vários níveis de 'desfazer' e o usuário pode optar por salvar / não salvar essas edições na versão que está sendo editada.

Mas depois de postar em um destino (por exemplo, sde.default), a única maneira de desfazer é através de hacks nas tabelas do sistema sde.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.