ERROR
El índice S$_IX2 que facilita la eliminación de filas en una tabla espacial de SDE.ST_Geometry no se crea en las geodatabases de Oracle.
Debido a la ausencia del índice, pueden que se observen problemas de rendimiento durante la edición, especialmente en las eliminaciones.
Este problema se ha corregido en el Parche de rendimiento de edición de parcelas de 10.1 SP1.
Falta el índice.
select table_name, index_name from user_indexes where table_name='S1_IDX$' and index_name like '%IX2'; no hay ninguna fila seleccionada
Si el índice está presente, la consulta debería devolver un único registro:
select table_name, index_name from user_indexes where table_name='S1_IDX$' and index_name like '%IX2'; TABLE_NAME INDEX_NAME ------------------------------ ------------------------------ S1_IDX$ S1$_IX2
Es necesario crear el índice.
A continuación, se presentan dos opciones para crear el índice necesario, Opción 1: Crear el índice manualmente u Opción 2: Usar el script proporcionado en este artículo para determinar qué índices faltan y crearlos.
Ejemplo:
select geom_id from sde.st_geometry_columns where table_name='RIVERS' and owner='AKESAR';
Ejemplo:
CREATE INDEX AKESAR."S###$_IX2" ON AKESAR.S###_IDX$ ("SP_ID") PCTFREE 0 INITRANS 8 MAXTRANS 255 NOLOGGING COMPUTE STATISTICS;
Donde "####" es el geom_id de la tabla sde.st_geometry_columns del paso 1.
Nota: El usuario debe tener estos privilegios: SELECT ON dba_indexes
Ejemplo:
Esta vista muestra qué capas presentan tablas S que carecen del
índice de columnas sp_id.
CREATE OR REPLACE VIEW st_geom_missing_index_v AS SELECT stgi.owner, stgi.table_name layer_name, stgi.index_name, stgi.index_id index_id, 'S' || stgi.index_id || '_IDX$' s_table_name, 'S' || stgi.index_id || '$_IX2' missing_index_name FROM sde.st_geometry_index stgi LEFT JOIN dba_indexes dbaix ON stgi.owner = dbaix.owner AND ('S' || stgi.index_id || '_IDX$') = dbaix.table_name AND ('S' || stgi.index_id || '$_IX2') = dbaix.index_name WHERE dbaix.index_name IS NULL ORDER BY 1,2,3;
Ejemplo:
SELECT * FROM st_geom_missing_index_v; OWNER LAYER_NAME INDEX_NAME INDEX_ID S_TABLE_NAME MISSING_INDEX_NAME ------ ---------- ---------- -------- ------------ ------------------ AKESAR RIVERS S1$_IX1 1 S1_IDX$ S1$_IX2
Nota: El usuario debe tener estos privilegios: SELECT ANY TABLE SELECT ON dba_indexes CREATE ANY INDEX CREATE PROCEDURE
CREATE or REPLACE PROCEDURE fix_missing_gdb_sp_id_indexes IS v_sql VARCHAR2(512); /* Identifique los índices ausentes uniendo estas dos tablas: SDE.ST_GEOMETRY_INDEX DBA_INDEXES Para cada nombre de tabla de índice espacial de la capa = 'S' || st_geometry_index.index_id || '_IDX$' Para cada nombre de índice de columna SP_ID = 'S' || st_geometry_index.index_id || '$_IX2' */ CURSOR c_missing_index_query IS SELECT stgi.owner, stgi.table_name layer_name, stgi.index_name, stgi.index_id index_id, 'S' || stgi.index_id || '_IDX$' s_table_name, 'S' || stgi.index_id || '$_IX2' missing_index_name FROM sde.st_geometry_index stgi LEFT JOIN dba_indexes dbaix ON stgi.owner = dbaix.owner AND ('S' || stgi.index_id || '_IDX$') = dbaix.table_name AND ('S' || stgi.index_id || '$_IX2') = dbaix.index_name WHERE dbaix.index_name IS NULL ORDER BY 1,2,3; BEGIN -- Para cada capa con una tabla S que carece de su índice SP_ID, cree una. FOR rec IN c_missing_index_query LOOP v_sql := 'CREATE INDEX ' || rec.owner || '.' || rec.missing_index_name || ' ON ' || rec.owner || '.' || rec.s_table_name || '(sp_id)'; BEGIN dbms_output.put_line(v_sql); EXECUTE IMMEDIATE v_sql; EXCEPTION WHEN OTHERS THEN RAISE; END; END LOOP; EXCEPTION WHEN OTHERS THEN RAISE; END;
set serveroutput on exec fix_missing_gdb_sp_id_indexes; CREATE INDEX AKESAR.S1$_IX2 ON AKESAR.S1_IDX$(sp_id) Procedimiento PL/SQL completado correctamente.
SELECT * FROM st_geom_missing_index_v; no hay ninguna fila seleccionada
Obtener ayuda de expertos en ArcGIS
Descargar la aplicación de soporte de Esri