Español

Cómo: Modificar una secuencia de row_id de ArcSDE en Oracle

Resumen

Las instrucciones proporcionadas detallan cómo modificar una secuencia de row_id de ArcSDE en Oracle, lo que evita que se pierdan valores cuando una aplicación ajena a Esri hace referencia a la secuencia.

Fondo

Las clases de objeto de geodatabase requieren un atributo de row_id mantenido de ArcGIS. El valor row_id se crea mediante una secuencia de Oracle para cada clase de objeto.
 
Una secuencia de Oracle es un objeto de base de datos que proporciona valores enteros únicos. Cuando se solicita un valor y se utiliza desde el generador de secuencias, el valor ya no se puede devolver jamás. Si acceden varias sesiones a la secuencia, existe la posibilidad de que haya huecos en los valores que se devuelven a cada sesión.

Por ejemplo, el usuario A solicita el siguiente valor de la secuencia y recibe el valor 13. El usuario B solicita el siguiente valor y se devuelve el 14. Por último, el usuario A solicita otro valor y la secuencia devuelve el 15. Por lo tanto, el usuario A recibió los valores únicos no secuenciales 13 y 15.

Al utilizar ArcGIS para crear una nueva fila o entidad, la geodatabase solicita un bloque de 10 valores row_id desde ArcSDE. La geodatabase solicita valores row_id y crea nuevos objetos en bloques de diez, lo que reduce el número de solicitudes a la base de datos.

Para saber cómo conservar las tuberías de Oracle, es decir, valores row_id de ArcSDE, al desconectar una instancia de Oracle, consulte Cómo: Conservar las tuberías de Oracle, como valores row_id de ArcSDE, al desconectar una instancia de Oracle.

El formato de nombre de la secuencia de ArcSDE es: R<#>, donde el valor de "#" es el registration_id de la tabla del sde.table_registry. Cada secuencia se crea con estas propiedades:
CREATE SEQUENCE R
MAXVALUE 2147483647
MINVALUE 1 
INCREMENT BY 16 
START WITH 1
En caso de la edición no versionada, las aplicaciones ajenas a Esri a veces requieren la capacidad de insertar filas en una tabla de ArcSDE registrada. Para que la aplicación ajena a Esri proporcione un valor único para el atributo row_id, dicha aplicación necesita hacer referencia u obtener el NEXTVAL de la secuencia que representa la tabla.
 
Para obtener el NEXTVAL de la secuencia que representa la tabla, use una de estas opciones:
SELECT R39.NEXTVAL FROM DUAL
O
INSERT INTO . VALUES (r39.nextval, ...
De forma predeterminada, ArcSDE define la secuencia para incrementar los valores en 16 números. Siempre que una aplicación ajena a Esri solicite el siguiente valor de la secuencia, el valor aumenta en 16 números y los 15 valores anteriores se pierden. Para evitar la pérdida de esos 15 valores para vez que una aplicación ajena a Esri haga referencia a la secuencia, modifique la secuencia para que aumente de 1 en 1.
ALTER SEQUENCE R
  INCREMENT BY 1
Al cambiar el valor de incremento a 1, siempre que la aplicación ajena a Esri solicite el siguiente valor de la secuencia, aumentará en un único valor.

Cambiar la propiedad INCREMENT BY no cambia los bloques de las solicitudes de la geodatabase de los valores row_id. La geodatabase todavía solicita valores row_id values en bloques de 10. Cambiar la propiedad INCREMENT BY satisface la solicitud de la geodatabase al consultar la secuencia 10 veces para obtener 10 valores.

Procedimiento

Modifique la propiedad INCREMENT BY de la secuencia row_id a 1. Siempre que se haga referencia a la secuencia, el siguiente valor se incrementará en valores de 1 en 1.

  1. Identifique el registration_id de la tabla:
SELECT registration_id, table_name
FROM sde.table_registry
WHERE table_name = ''
AND owner = ''
  1. Modifique la secuencia usando el registration_id de la consulta anterior:
ALTER SEQUENCE .r INCREMENT BY 1;