Uf. La respuesta es realmente complicada y requiere muchos conocimientos de ArcSDE, así que intentaré ser lo más breve posible.
Nota: Voy a referirme a algunos diagramas del un impresionante libro blanco sobre versiones que puede encontrar en el sitio de ESRI . Si está tratando con el versionado, le recomiendo encarecidamente que lo lea detenidamente.
Entonces, hay que entender cuál es la relación entre un estado (es decir, un nodo del árbol de estado) y un versión con nombre (es decir, una etiqueta que señala un estado).
Una base de datos típica puede tener el aspecto del siguiente diagrama de estado:
Aquí tiene cuatro versiones en la base de datos (Versión A, Versión B, Versión C y DEFAULT). Pero quizás me estoy adelantando un poco. Comencemos con lo que es un estado es.
Se puede pensar en un estado como una "transacción", una unidad lógica que contiene varias ediciones a una o muchos - mesas. Puede incluir dos inserta a la "FeatureClass A", una borrar de la "Clase de características B" y un modificar (efectivamente una supresión + una inserción) a la "Clase de características X". Todo agrupado en uno.
Veamos un pequeño y sencillo diagrama de estado de ArcSDE que comienza en el estado id 0:
Si empiezas en el estado 0 y realizas ediciones en una o varias tablas en una operación de edición, crearás un estado 1 hijo y harás que ese sea el estado activo actual id . Otro grupo de ediciones posteriores creará el estado hijo 2. Si quieres deshacer, no necesitas modificar el id de estado de ninguna manera - todo lo que necesitas hacer es cambiar el id de estado activo actual a 1, o 0 (dependiendo de lo lejos que quieras ir). Rehacer es lo opuesto - simplemente mueve el id de estado activo actual hacia adelante - tan lejos como quieras ir.
Así es como funciona deshacer/rehacer en el versionado de ArcSDE.
Bien, sigamos. Digamos que quieres hacer una edición permanente (es decir, quieres guardar). ¿Qué tienes que hacer? Bueno, guardar es simplemente tomar una etiqueta de versión y moverla hacia adelante a un estado particular. Algo así como estampar un sello y decir "este es el aspecto que debe tener la versión A". Así que si vuelves a mirar el primer diagrama, verás que tiene cuatro versiones con nombre .
-
La versión B apunta a la identificación del estado 1
-
La versión A apunta a la identificación del estado 3
-
La versión C apunta a la identificación del estado 5
-
La versión "SDE.DEFAULT" apunta al estado id 4
Tenga en cuenta que este diagrama, a pesar de la creencia popular, no le dice cualquier cosa sobre el lógico relación padre-hijo que tienen. La relación lógica padre-hijo para el primer diagrama podría tener el siguiente aspecto:
Esta es la relación padre-hijo que se ve en ArcMap/ArcCatalog. Su propósito es restringir con qué versiones se puede conciliar. Llegados a este punto, podrías preguntarte (con razón), ¿por qué demonios necesito esto? La respuesta está en flujos de trabajo de versiones . Resulta que la gente ha estado usando el versionado desde hace 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 tu pregunta hoy :)
Siguiendo...
Bien, ¿qué más hacen estas versiones con nombre? Bueno, afectan a cómo este proceso llamado comprimir se comporta.
Comprimir consiste en coger estados intermedios que pueden no ser necesarios, y eliminar los innecesarios, así como combinarlos. Puede activar la operación de compresión de ArcSDE a través de ArcCatalog, configurar un servicio que lo haga de vez en cuando, y algunas operaciones de edición de ArcMap activarán mini operaciones de compresión (es decir, sólo para las pequeñas ramas que se están utilizando).
El diagrama de la izquierda muestra un árbol de estados antes de ser comprimido, y el de la derecha lo muestra justo después de ser comprimido:
Un concepto importante que hay que entender (al que me referiré una vez que por fin pueda responder a tu pregunta) es que cada estado es un candidato potencial a ser comprimido - excepto los estados que tienen etiquetas (es decir, versiones con nombre) apuntando a ellos.
Puedes ver que antes de la compresión hay algunos estados extra - innecesarios. De hecho, toda la rama [3,4,5] fue eliminada. Si hubiera habido una versión con nombre en 5, el resultado final habría sido muy diferente.
Las operaciones de compresión sirven para ahorrar espacio en su base de datos eliminando los registros que ya no necesita.
Bien, sigamos.
El último concepto que debes entender, es conciliando - lo que supone la fusión de dos ramas en una.
Volvamos a nuestro primer diagrama. Digamos que queremos conciliar la versión A con SDE.DEFAULT.
Recapitulemos: cuatro versiones con nombre que apuntan a varios identificadores de estado. Así que lo primero que tenemos que hacer, es crear un estado hijo bajo la versión de destino, así que creamos un estado hijo bajo el id de estado 4, en nuestro ejemplo, lo llamo id de estado 20.
El siguiente paso es calcular las diferencias entre ambas versiones (los detalles son demasiado largos para este post, pero te puedo decir que se hacen con cursores de diferencia ) y luego aplicar esas diferencias a ese nuevo estado id 20 (línea azul).
Digamos que decide hacer más ediciones o que encontró conflictos y está eligiendo filas de una versión, o de la otra. No importa. Esas son sólo nuevas ediciones, y se hacen dentro de una operación de edición, como estados hijos debajo de la rama que has fusionado. En este ejemplo, he hecho dos grupos más consecutivos de ediciones después de la reconciliación.
Precioso.
Así que ahora digan que están listos " Correo electrónico: " la versión. ¿Qué significa eso? Eso es solo agarrar las etiquetas y apuntarlas al mismo id de estado. Aquí, voy a poner la versión A en SDE.DEFAULT. Esto es lo que parece:
¡TADAAA! Así que ahora la versión A y SDE.DEFAULT apuntan al mismo id de estado, y por lo tanto tienen el mismo aspecto.
Bien, entonces ahora Por fin puedo responder a su pregunta.
¿Se puede deshacer un mensaje? La documentación de ArcGIS le dirá no - no te metas con él. 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 realidad, todo lo que se necesita es hacer una actualización de uno de los Tablas de versiones de ArcSDE - la tabla VERSIONS, y modificar la entrada de la etiqueta (también llamada versión). En nuestro ejemplo, señale el id de estado 21, y acaba de deshacer toda la operación de edición. Póngalo en 3, y acaba de deshacer toda la reconciliación. Póngalo en 5, y ahora está en un lugar completamente diferente. Que haya o no conflictos es irrelevante.
Por supuesto, esto supone que no se ha producido una compresión. Consideremos el caso en el que la compresión está ocurriendo justo al mismo tiempo que usted está actualizando la tabla SDE. Recuerde, si usted - o alguien más - ejecuta una compresión después de que usted publicó esto es lo que el árbol se ve:
¿Se puede deshacer la conciliación después de la compresión? Bueno, en este caso, no . La compresión ha eliminado toda esa rama, por lo que no se puede deshacer - esos datos han sido eliminados. Si hubiera habido otra versión con nombre en esa rama, entonces la compresión no habría destruido esa rama. Espero que a estas alturas esto tenga sentido.
¿Deberías hacer esto? Depende de usted, si no sabe lo que está haciendo, puede perder fácilmente datos después de una compresión.