Editar datos versionados en Oracle con vistas multiversionadas y SQL

Puede editar datos versionados en una geodatabase mediante la edición de vistas multiversionadas creadas sobre los datos.

Existen varios procedimientos almacenados instalados con ArcSDE que lo ayudan a trabajar con vistas multiversionadas. Estos componentes y sus descripciones son los siguientes:

Procedimiento almacenado

Propósito

Sintaxis y descripción

sde.version_user_ddl.create_version

Crear una nueva versión de la geodatabase.

Siempre edite su propia versión aparte; varios editores no pueden editar la misma versión con vistas multiversionadas.

EXEC sde.version_user_ddl.create_version

('<parent_version>', :<child_version_variable>, <name_rule>, <access>, '<description>')

<parent_version> es la versión desde la cual se crea su versión.

<child_version> es el nombre para la versión que crea.

<access> es el nivel de permiso para la versión, 0 para Privado, 1 para Público o 2 para Protegido.

<description> es una descripción de texto de una versión secundaria.

sde.version_util.set_current_version

Establece a qué versión de geodatabase accederá.

EXEC sde.version_util.set_current_version('<version_name>')

<version_name> es el nombre de la versión de la geodatabase a la cual desea conectarse.

sde.version_user_ddl.edit_version

Inicie y finalice una sesión de edición.

EXEC sde.version_user_ddl.edit_version('<version_name>',<1 ó 2>)

Especifique 1 para iniciar la sesión de edición. Especifique 2 para finalizarla.

sde.version_user_ddl.delete_version

Elimine una versión de la geodatabase.

EXEC sde.version_user_ddl.delete_version('<version_name>')

Cuando edita tablas versionadas a través de vistas multiversionadas, los cambios se hacen a las tablas delta y los valores de la fila Id. (Id. de objeto) para los registros nuevos se generan automáticamente. Sin embargo, a diferencia de la edición de datos versionados en una sesión de edición en ArcGIS, no se realiza la conciliación de versión interna con estas modificaciones.

Además, se ubica un bloqueo exclusivo en el estado al que hace referencia la versión cuando inicia una sesión de edición en una vista multiversionada. Por consiguiente, se recomienda especialmente que no se utilicen las vistas multiversionadas para editar la versión DEFAULT o cualquier versión que pueda estar sujeta a ediciones simultáneas o a conciliación por parte de otros usuarios debido a que no se detectarán los conflictos y se bloqueará a los otros usuarios. Por el contrario, cree su propia versión específicamente para la sesión de edición con vista multiversionada.

PrecauciónPrecaución:
  • Las operaciones de administración de versiones, como la conciliación, la resolución de conflictos y la publicación, deben realizarse con el software de ArcGIS. La administración inadecuada de versiones puede dañar las geodatabases cuando se trabaje con vistas.
  • Nunca utilice herramientas de un sistema de administración de bases de datos (DBMS) para actualizar algún campo de Id. de fila (Id. de objeto) que ArcSDE mantenga en la base de datos. Estos campos de Id. de objeto se ubican en las geodatabases, son administrados por estas y, por lo tanto, no deben alterarse con SQL.
  • Nunca edite la versión DEFAULT de la geodatabase con SQL. Al iniciar una sesión de edición en una versión se obtiene un bloqueo exclusivo en el estado al que la versión hace referencia. Si bloquea la versión DEFAULT, no permite que los usuarios de ArcGIS se conecten a la geodatabase.

Los siguientes pasos lo guían para crear una vista multiversionada, para crear una versión en la cual realizar modificaciones, establecer la versión para editar, comenzar una nueva edición, realizar algunas modificaciones a través de la vista multiversionada, detener la sesión de edición, asignar las modificaciones a la base de datos y eliminar la versión creada para las modificaciones. En los ejemplos, la vista multiversionada creada para realizar las modificaciones sobre la tabla es code_mv, y la versión creada y usada para las modificaciones es mvedits.

SugerenciaSugerencia:

recuerde que el dataset que edite a través de una vista multiversionada debe haber sido registrado como versionado.

Pasos:
  1. Ejecute la utilidad sdetable para crear una vista multiversionada en una ventana de comando de MS-DOS (Windows) o de shell (UNIX o Linux).
    sdetable –o create_mv_view –T code_mv –t code_enf  –i sde:oracle11g –u sarja –p not4U@orasvc
  2. Abra un cliente SQL y declare una variable para almacenar la versión que creará en el próximo paso.
    VARIABLE mv_version NVARCHAR2(10);  EXEC :mv_version := 'mvedits';

    En este ejemplo, mv_version es el nombre de la variable, NVARCHAR2(10) es el tipo de dato de la variable, y mvedits es el nombre de la versión.

  3. Cree una nueva versión para realizar las modificaciones.
    EXEC sde.version_user_ddl.create_version  ('sde.DEFAULT', :mv_version, sde.version_util.C_take_name_as_given, sde.version_util.C_version_private, 'multiversioned view edit version');
  4. Establezca la versión para la sesión de edición como la versión secundaria recién creada.
    EXEC sde.version_util.set_current_version('mvedits');
  5. Inicie una sesión de edición mediante la ejecución del procedimiento almacenado version_user_ddl.edit_version y especifique 1. El número 1 indica que se debe iniciar una sesión de edición.
    EXEC sde.version_user_ddl.edit_version('mvedits',1);
  6. Lleve a cabo la primera modificación en la vista multiversionada con SQL.

    En este ejemplo se actualiza un registro existente.

    UPDATE code_mv  SET propowner = 'C. Industry'  WHERE vid = 2233
  7. Lleve a cabo la siguiente modificación en la vista multiversionada con SQL.

    En este ejemplo se inserta un nuevo registro en la tabla.

    INSERT INTO code_mv (codenum,propowner,shape)  VALUES  (567, 'Anjo Badsu', sde.ST_PointFromText('point (40 40)', 12));
    SugerenciaSugerencia:

    En la declaración INSERT, no se especifica ningún valor de Id. de objeto, la vista multiversionada automáticamente obtiene el próximo Id. de objeto disponible y lo inserta para la fila.

    Aunque es posible versionar la tabla que ha sido registrada solamente con ArcSDE y que tiene una columna de Id. de objeto que mantiene el usuario, no es un procedimiento recomendado. Si de igual forma lo hace, debe proporcionar un Id. de objeto con las declaraciones INSERT; la vista multiversionada no puede generar un valor por usted.

  8. Ejecute un estamento COMMIT o ROLLBACK.
  9. Detenga la sesión de edición mediante la ejecución del procedimiento almacenado version_user_ddl.edit_version, pero esta vez especifique 2.

    El número 2 indica que se debe cerrar la sesión de edición.

    EXEC sde.version_user_ddl.edit_version('mvedits',2);
  10. Cuando finaliza la edición, concilie y publique las modificaciones mediante ArcGIS Desktop, y luego puede editar la versión de la geodatabase que creó en el paso 3. Si decide que no quiere conservar los cambios, puede eliminar la versión que creó en el paso 3 sin conciliar ni publicar las modificaciones.
    EXEC sde.version_user_ddl.delete_version('mv_version');

Temas relacionados


3/6/2012