Henderson
Las siguientes acciones pueden dar como resultado el mensaje de error:
"Error de DBMS subyacente (ORA-00001: restricción única (SDE.GDB_OC_PKC) violada)".
-Registro de una capa SDE como versionada.
-Registro de una capa SDE con la geodatabase.
-Registro de una tabla espacial de Oracle con la geodatabase.
-Construcción de una red geométrica.
-Importar un shapefile, una cobertura o una clase de entidad de otra geodatabase a ArcSDE a través de ArcCatalog.
Otras operaciones también pueden causar este error.
Porque
Este error ocurre cuando la secuencia que genera nuevos valores para la columna ID de SDE.GDB_OBJECTCLASSES no está sincronizada con los valores que ya están en esa columna. Esta situación no ocurre en circunstancias normales, pero las posibles causas incluyen el uso inadecuado de la función de importación de Oracle, un cierre de Oracle durante una transacción de ArcGIS o la manipulación manual de las tablas de metadatos de ArcSDE.
Solución o solución alternativa
Avance la secuencia a un valor superior al valor máximo en la columna ID de SDE.GDB_OBJECTCLASSES. Inicie sesión en SQLPlus como usuario de SDE para ejecutar los siguientes comandos SQL.
Determine el valor máximo en la columna ID de SDE.GDB_OBJECTCLASSES.
SQL> SELECT MAX (id) FROM gdb_objectclasses;
Resultado de este ejemplo:
MAX (ID)
------
55
Determine el nombre de la secuencia para la columna de ID. La convención de nomenclatura es R <id. De registro> donde el ID de registro es el valor de la columna id_registro de SDE.TABLE_REGISTRY para la entrada de la TABLA GDB_OBJECTCLASSES.
SQL> SELECT registration_id FROM table_registry DONDE table_name = 'GDB_OBJECTCLASSES';
Resultado para este ejemplo:
REGISTRATION_ID
------
3
Determine el siguiente valor que será proporcionado por la secuencia:
SQL> SELECT last_number FROM user_sequences WHERE sequence_name = 'R3';
Resultado de este ejemplo:
LAST_NUMBER
------
50
En este ejemplo, el siguiente ID proporcionado por la secuencia es 50. Dado que el ID más alto en GDB_OBJECTCLASSES es actualmente 55, los valores inferiores a 55 ya están tomados. Por lo tanto, ArcSDE intenta insertar un valor no único en la columna, violando la restricción de clave primaria.
En este ejemplo, la secuencia debe avanzar seis veces. Por lo tanto, ejecute la siguiente instrucción SQL seis veces:
SQL> SELECT R3.NEXTVAL from dual;
Resultado para este ejemplo:
NEXTVAL
------
56
Verifique que la secuencia haya avanzado ejecutando la instrucción SQL desde el paso 1 nuevamente:
SQL> SELECT last_number FROM user_sequences WHERE sequence_name = 'R3';
LAST_NUMBER
------
56
El ID en este ejemplo que se asignará a la siguiente fila que se insertará en GDB_OBJECTCLASSES, ahora es 56. Dado que este es más alto que el valor de ID máximo actual en GDB_OBJECTCLASSES, ya no hay posibilidad de que la restricción de clave primaria sea violado.