Cuando el control de versiones con ArcSDE puede cancelar o rechazar las ediciones publicadas?


28

Estoy usando ArcGIS 9.3.1 e intento trabajar con una geodatabase SDE (con una clase de entidad poligonal) que ya ha sido registrada como versionada. Soy nuevo en el control de versiones y todavía estoy tratando de descubrir algunas de sus funciones básicas. Hasta ahora, no he podido descubrir si es posible "cancelar" o "rechazar" ciertas ediciones una vez que se han publicado en una versión principal.

Por ejemplo, supongamos que tenemos tres versiones: el SDE.DEFAULT original que se creó cuando se registró como versionado, una versión secundaria del valor predeterminado llamada SDE.QA (para Garantía de calidad) y una versión secundaria del control de calidad llamado SDE .Edit1 (donde se realizan las ediciones por primera vez). Si se editaran ciertas características de SDE.Edit1 (por ejemplo, para simplificarlo, digamos que se agregó un polígono y se eliminó uno) y luego SDE.Edit1 se concilió con el SDE.QA y posteriormente se publicó en SDE.QA, ¿Alguna forma de deshacer este cambio más tarde? Siguiendo esta pregunta, ¿sería posible rechazar solo algunos cambios? Por ejemplo, ¿acepta agregar el primer poli, pero rechaza eliminar el segundo poli?

Por lo que puedo decir, una vez que las ediciones se han publicado en la versión principal, todos estos cambios son ahora una parte "permanente" (por falta de una palabra mejor) de la versión principal. Soy consciente del hecho de que todos estos cambios se registran en dos tablas, las tablas "AGREGAR" y "BORRAR" (a menudo denominadas tablas "delta"), y en realidad no cambian el FC original. Pensé en buscar alterar manualmente estas tablas delta, pero encontré suficientes personas advirtiendo contra eso para saber que probablemente no sea la solución correcta.

Quizás es mi comprensión de las versiones lo que necesita algo de trabajo, pero parece que no pude encontrar una manera de rechazar un cambio o deshacer un cambio una vez que se ha publicado. Esto me parece extraño, ya que esto significaría que no hay forma de deshacer una publicación que contenga un error. Tampoco parece que pueda encontrar una manera de rastrear el linaje de estas versiones (es decir, qué versión es hija de qué padre). Mientras estoy en el tema, si alguien pudiera conocer alguna referencia de ArcSDE particularmente útil (enlaces, artículos, libros, etc.) que pueda ayudarme a comprender ArcSDE (y tal vez responder algunas de estas preguntas), sería muy apreciado !


Aunque las respuestas hasta ahora han sido útiles (gracias por los enlaces), todavía no puedo encontrar una respuesta al núcleo de mi pregunta. De nuevo, tal vez es mi propio malentendido de la situación. Esto es lo que quiero saber:

¿Puedes revertir (por reverso, quiero decir deshacer ) una publicación una vez que se ha hecho de una versión secundaria a una versión primaria? En este escenario, el padre puede ser, pero no tiene que ser, la versión SDE.DEFAULT. Aún mejor, me gustaría saber si puede invertir una parte de una publicación (por ejemplo, una sola edición en un polígono), después de que se haya publicado. También me gustaría saber si esto se puede hacer sin la necesidad de haber detectado ningún conflicto.

El hecho de que no pueda encontrar una respuesta clara a esta pregunta (es decir, "sí" o "no") documentada en ninguna parte me hace pensar que me falta algo importante sobre el control de versiones en ArcSDE. También preferiría evitar manipular las tablas A y D manualmente.


? version & rdbms ayudaría
Brad Nesom

Respuestas:


53

Ugh La respuesta es realmente complicada y requiere muchos antecedentes de ArcSDE, por lo que intentaré ser lo más breve posible.

Tenga en cuenta que me referiré a algunos diagramas del documento técnico de versiones súper impresionante que puede encontrar en el sitio de ESRI . Si se trata de versiones, le recomiendo que lo lea detenidamente.

Luego, debe comprender cuál es la relación entre un estado (es decir, un nodo del árbol de estado) y una versión con nombre (es decir, una etiqueta que apunta a un estado).

Una base de datos típica puede verse como el diagrama de estado a continuación:

diagrama de base de datos arcsde típico

Aquí, tiene cuatro versiones en la base de datos (Versión A, Versión B, Versión C y POR DEFECTO). Pero quizás, me estoy adelantando un poco. Comencemos con lo que es un estado .

Puede pensar en un estado como una "transacción", una unidad lógica que contiene varias ediciones en una o varias tablas. Puede incluir dos inserciones en "FeatureClass A", una eliminación de "Feature Class B" y una modificación (efectivamente, delete + an insert) a "Feature Class X". Todos agrupados en uno.

Veamos un diagrama de estado de ArcSDE pequeño y simple que comienza en la identificación de estado 0:

estado en movimiento

Si comienza en el estado 0 y realiza modificaciones en una o varias tablas en una operación de edición, creará un estado secundario 1 y lo convertirá en el ID de estado activo actual . Otro grupo posterior de ediciones creará el estado secundario 2. Si desea deshacer, no necesita modificar la identificación del estado de ninguna manera; todo lo que necesita hacer es cambiar la identificación del estado activo actual a 1 o 0 (dependiendo qué tan lejos quieres ir). Un rehacer es lo contrario: simplemente mueva el ID del estado activo actual hacia adelante, tan lejos como desee.

Así es como funciona deshacer / rehacer en el control de versiones de ArcSDE.

OK, sigue adelante. Digamos que desea hacer una edición permanente (es decir, desea guardar). ¿Que tienes que hacer? Bueno, guardar es solo tomar una etiqueta de versión y avanzarla a un estado en particular. Algo así como estamparlo y decir "así es como debe verse la Versión A". Entonces, si observa el primer diagrama, verá que tiene cuatro versiones con nombre .

  • La versión B apunta al ID de estado 1
  • La versión A apunta al ID de estado 3
  • La versión C apunta al ID de estado 5
  • La versión "SDE.DEFAULT" apunta al ID de estado 4

    Tenga en cuenta que este diagrama, a pesar de la creencia popular, no le dice nada sobre la relación lógica padre-hijo que tienen. La relación lógica padre-hijo para el primer diagrama podría verse así:

estructura de la versión lógica

Esta es la relación padre-hijo que ve en ArcMap / ArcCatalog. Su propósito es restringir con qué versiones se puede reconciliar. En este punto, podrías (con razón) preguntarte, ¿por qué demonios necesito esto? La respuesta está en los flujos de trabajo de versiones . Resulta que las personas han estado usando el control de versiones durante bastante tiempo y hay algunas formas preferidas de cómo estructurarlas, pero ese es un tema para otro día ya que quiero responder a su pregunta hoy :)

Continuando ...

Bien, ¿qué más hacen estas versiones con nombre? Bueno, afectan cómo se comporta este proceso llamado compresa .

Comprimir se trata de obtener estados intermedios que pueden no ser necesarios y eliminar los innecesarios, así como combinarlos. Puede activar la operación de compresión ArcSDE a través de ArcCatalog, configurar un servicio que lo haga cada cierto tiempo, y algunas operaciones de edición de ArcMap activarán operaciones de mini-compresión (es decir, solo para ramas pequeñas que se están utilizando).

El diagrama de la izquierda muestra un árbol de estado antes de que se comprima, y ​​el de la derecha lo muestra justo después de que se comprime:

diagrama de compresión

Un concepto importante para entender (que me referiré a usted una vez que finalmente pueda responder a su pregunta) es que cada estado es un candidato potencial para ser comprimido, excepto los estados que tienen etiquetas (es decir, versiones con nombre) apuntadas a ellos.

Puede ver que antes de la compresa hay algunos estados adicionales innecesarios. De hecho, se eliminó toda la rama [3,4,5]. Si hubiera habido una versión con nombre en 5, el resultado final habría sido muy diferente.

Las operaciones de compresión están ahí para ahorrar espacio en su base de datos al eliminar registros que ya no necesita.

OK, sigue adelante.

El último concepto que debe comprender es la reconciliación , que es la fusión efectiva de dos ramas en una.

Así que volvamos a nuestro primer diagrama. Supongamos que desea conciliar la Versión A con SDE.DEFAULT.

Recapitulemos: cuatro versiones con nombre que apuntan a varios identificadores de estado. Entonces, lo primero que tenemos que hacer es crear un estado secundario en la versión de destino, de modo que creamos un estado secundario en la identificación de estado 4, en nuestro ejemplo, llamo a esa identificación de estado 20.

comenzar a conciliar

El siguiente paso es calcular las diferencias entre ambas versiones (los detalles son demasiado largos para esta publicación, pero puedo decirle que se hicieron con cursores de diferencia ) y luego aplicar esas diferencias a esa nueva identificación de estado 20 (línea azul).

conciliar empuje

Supongamos que decide hacer más ediciones o que encontró conflictos y está eligiendo filas de una versión u otra. No importa. Esas son solo ediciones nuevas, y se realizan dentro de una operación de edición, como estados secundarios debajo de la rama que fusionó. En este ejemplo, he realizado dos grupos más de ediciones consecutivas después de la conciliación.

ediciones después de conciliar

Encantador.

Ahora diga que está listo para " publicar " la versión. Qué significa eso? Eso es solo agarrar las etiquetas y apuntarlas al mismo ID de estado. Aquí, voy a publicar la Versión A en SDE.DEFAULT. Esto es lo que parece:

destino

TADAAA! Así que ahora la Versión A y SDE.DEFAULT apuntan al mismo ID de estado, y por lo tanto se ven iguales.

Bien, ahora puedo finalmente responder tu pregunta.

¿Puedes deshacer una publicación? La documentación de ArcGIS le dirá que no , no se meta con eso. No lo hagas, porque estarás jugando con esta lógica, y si no sabes lo que estás haciendo, puedes corromper tus datos.

Pero en verdad, todo lo que se necesita es hacer una actualización de una de las tablas de versiones de ArcSDE : la tabla VERSIONS y modificar la entrada de la etiqueta (también conocida como versión con nombre). En nuestro ejemplo, señale la identificación de estado 21, y acaba de deshacer toda la operación de edición. Póngalo en 3, y simplemente deshizo toda la conciliación. Póngalo en 5, y ahora está en un lugar completamente diferente. Ya sea que haya o no conflictos, es irrelevante.

Por supuesto, esto supone que no ha ocurrido una compresa. Consideremos el caso en el que la compresión está ocurriendo exactamente al mismo tiempo que actualiza la tabla SDE. Recuerde, si usted u otra persona ejecuta una compresa después de publicar esto, así es como se ve el árbol:

comprimir después de publicar

¿Puedes deshacer la conciliación después de la compresa? Bueno, en este caso, no . La compresa ha volado toda esa rama, por lo que no puede deshacerla: esos datos se han eliminado. Si hubiera habido otra versión con nombre en esa rama, entonces la compresa no habría destruido esa rama. Espero que a estas alturas esto tenga sentido.

Entonces, ¿deberías hacer esto? Depende de usted, si no sabe lo que está haciendo, puede perder datos fácilmente después de una compresa.


44
Gran respuesta Ragi! El control de versiones SDE es una bestia compleja.
blah238

2
Gracias. Mantuve / extendí el código de conciliación en ArcObjects durante tres años, así que jugué ajustando este comportamiento en varias versiones de ArcGIS. Omití algunas cosas para tratar de simplificar los conceptos. Espero que sea lo suficientemente claro como respuesta.
Ragi Yaser Burhum

2
¡Gracias por esa respuesta tan completa, Ragi! Siento que ahora tengo una mejor comprensión de lo que me estoy metiendo. Su explicación de señalar a una identificación de estado diferente como un mecanismo para "deshacer" un cambio (o tal vez "dar un paso atrás" sería una descripción más adecuada) tiene sentido. Todavía estoy explorando el enlace de Tablas de versiones de ArcSDE que proporcionó. En cualquier caso, seguiré su consejo y procederé con precaución. ¡Gracias de nuevo por tomarse el tiempo de pasar por este paso a paso!
Sole23

2
+1 Marcando este. ¡Creo que ilustra por qué la mayoría de las personas no deberían jugar con las tablas de versiones de SDE y enviaré el enlace a esta respuesta cuando sepa de aquellos que están pensando en ello!
Jay Cummins

2
Wow, comentaste una de mis preguntas y he pasado las últimas horas revisando y leyendo todas las preguntas que has respondido. Cosas increíbles, gracias.
ianbroad

7

Existe una herramienta llamada Geodatabase Toolset (GDBT), que es un complemento para ArcCatalog. Visualiza el estado del linaje y las versiones:

Descargue GDBT aquí


Gracias Stefan ¡Este es exactamente el tipo de cosas que esperaba que existieran! Esto hace que sea mucho más fácil visualizar y rastrear el linaje de mi SDE FC.
Sole23

2
Además, la mayoría de la gente no lo sabe, pero (siempre y cuando los estados no se hayan comprimido por completo), puede agregar una entrada a la tabla VERSIONES para cualquier identificación de estado que todavía sea válida, y luego usar arcgis para navegar, editar e incluso conciliar esa versión con las herramientas estándar de ArcGIS. Las versiones son solo etiquetas para identificar los estados que obligan a ArcSDE a mantener esos estados vivos.
Ragi Yaser Burhum

OK, déjame hacer una respuesta más elaborada.
Ragi Yaser Burhum

3

A falta de conocer la versión y db. Aquí hay información inicial que lo ayudará.
Administrador básico
Aquí hay información sobre rec y post
Así que si aplica estos conceptos y usa el comando de cambios de versión , todavía tiene la oportunidad de rechazar esos cambios cuando rec y post por defecto.

No tiene tres copias de la misma base de datos.
Tienes una copia con versiones.
Si está administrando esta base de datos, realmente debería pasar el tiempo (tal vez incluso dinero) y familiarizarse con todo esto.
Los flujos de trabajo de edición versionada de la clase esri para la geodatabase multiusuario son gratuitos y ayudarán a algunos.
Pero el monte completo sería lo que recomiendo para una persona que administra cualquier tipo de flujo de trabajo de edición sde versionado.
Esa clase es genial! para la comprensión de versionado Edición de flujos de trabajo para la base de datos geográficos multiusuario .


Gracias por tu respuesta, Brad. ¡Buscaré los enlaces y clases que me recomendó!
Sole23

estos enlaces son para el servidor sql, pero hay otros archivos de ayuda rdbms muy cerca de estos.
Brad Nesom

1
Vi la grabación gratuita del seminario de Esri que me recomendó: Flujos de trabajo de edición versionada para la geodatabase multiusuario . Pensé que era realmente útil y ciertamente valió la pena el tiempo que tardó en verlo (~ 1 hora). Gracias de nuevo por la recomendación. También encontré un enlace para ver las respuestas que tenían a preguntas adicionales que no tuvieron tiempo de responder durante el seminario aquí .
Sole23

3

Tengo una forma "rápida y sucia". Cambie a la versión predeterminada y edite algo sobre el polígono que se eliminó. Luego, cuando se reconcilie con el valor predeterminado, obtendrá un conflicto. Haga clic derecho en el conflicto y dígale que use el estado de preconciliación. Esto funciona para mi.


1

Sí, puedes hacer esto, pero tendrás que hacerlo usando SQL.

NO CONDONE ESTO, HAGA ESTO A SU PROPIO RIESGO. Siempre haga una copia de seguridad de sus datos antes de editar SDE manualmente.

Puede consultar la tabla sde.versions para obtener el state_id de la versión que publicó con los cambios que desea deshacer. Luego puede ir a las tablas A y D y eliminar las entradas que coinciden con state_id.

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

Ahora tiene el state_id de interés. Ahora necesita encontrar las tablas A y D para la clase de entidad. Para ello, consulta el table_registry. El valor será el registro_id. Entonces, para obtener las tablas A y D, simplemente agregue el valor de registro a las A y D.

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

Luego, solo consulte las tablas A y D y elimine las entradas que tienen el state_id de la consulta anterior.

Para obtener más información sobre las relaciones padre e hijo, solo consulte en las siguientes tablas sde.

    state_lineages
    versions
    states

Todos estos tienen relaciones y deberían ayudarte a seguir la pelota que rebota.


1

No es posible deshacer las ediciones una vez que se han publicado desde una versión secundaria a la versión principal. Ver: http://help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#//00270000001s000000.htm

La operación de publicación no se puede deshacer, ya que está aplicando cambios a una versión que no está editando actualmente.

Puede revisar las ediciones realizadas en cada versión durante el proceso de reconciliación; esta sería su oportunidad de rechazar ciertas ediciones. El proceso de reconciliación se explica aquí .


1

Sí, como otros han dicho, la respuesta corta es no.

El control de versiones de SDE es muy prometedor, pero es desafortunado que su flujo de trabajo solo suponga un cambio directo en las características.

El control de versiones con todas las funciones en SDE ofrecería herramientas que:

  • Permite revertir (nivel de función) y aceptar / rechazar
  • Permitiría deshacer
  • Y permitiría deshacer los estados anteriores (es decir, a partir de la estadística 3, deshacer los cambios del estado 1 pero mantener los cambios del estado 2).

Esto sería como un sistema de control de versiones de código fuente SVN pero para características espaciales.


Hola David, sí, eso es lo que tenía en mente cuando examiné las versiones. Desafortunadamente, el flujo de trabajo actual no ofrece tanta flexibilidad, pero supongo que es un trabajo en progreso y tal vez eventualmente lo hará.
Sole23

1
Bueno, si los datos nunca se comprimen, entonces, en teoría, puede retroceder tanto como desee. El problema es que las uniones de la base de datos se vuelven realmente lentas y el sistema se degrada lentamente a inutilizable. El problema es diferente de la gestión de control de código fuente, donde un gran repositorio de código fuente de git como el kernel de Linux actualmente es de ~ 175 MB. En geo, eso sería un problema mucho, mucho más grande. Sin embargo, las personas realmente inteligentes están pensando en este problema en este momento. Ver Geogit: blog.opengeo.org/tag/geogit
Ragi Yaser Burhum

0

La respuesta simple es no.

La intención de publicar una versión es confirmar esas ediciones en la versión de destino.

La reversión se logra al no publicar la versión (y es una buena práctica eliminar cualquier versión abandonada).

Mientras edita la versión, la aplicación de edición (por ejemplo, ArcMap) puede proporcionar varios niveles de 'deshacer' y el usuario puede elegir guardar / no guardar tales ediciones en la versión que se está editando.

Pero después de publicar en un destino (por ejemplo, sde.default), la única forma de deshacer es mediante hacks en las tablas del sistema sde.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.