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.
Respostas:
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 "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.
fonte
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
fonte
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 .
fonte
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.
fonte
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.
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.
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.
Todos eles têm relacionamentos e devem ajudá-lo a seguir a bola quicando.
fonte
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
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 .
fonte
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
Eles seriam como um sistema de controle de versão de código-fonte SVN, mas para recursos espaciais.
fonte
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.
fonte