BUG
Der Index "S$_IX2", der das Löschen von Zeilen aus einer räumlichen Tabelle des Typs "SDE.ST_Geometry" ermöglicht, wird in Oracle-Geodatabases nicht erstellt.
Wenn der Index fehlt, können bei der Bearbeitung, insbesondere bei Löschungen, Performance-Probleme auftreten.
Dieses Problem wird mit dem 10.1 SP1 Parcel Editing Performance Patch behoben.
Der Index fehlt.
select table_name, index_name from user_indexes where table_name='S1_IDX$' and index_name like '%IX2'; no rows selected
Wenn der Index vorhanden ist, sollte die Abfrage einen Datensatz zurückgeben:
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
Der Index muss erstellt werden.
Nachstehend werden zwei Optionen zum Erstellen des erforderlichen Index beschrieben. Mit Option 1 wird der Index manuell erstellt, bei Option 2 verwenden Sie das in diesem Artikel bereitgestellte Skript, um die fehlenden Indizes zu ermitteln und zu erstellen.
Beispiel:
select geom_id from sde.st_geometry_columns where table_name='RIVERS' and owner='AKESAR';
Beispiel:
CREATE INDEX AKESAR."S###$_IX2" ON AKESAR.S###_IDX$ ("SP_ID") PCTFREE 0 INITRANS 8 MAXTRANS 255 NOLOGGING COMPUTE STATISTICS;
Wobei "###" die "geom_id" der in Schritt 1 gefundenen Tabelle "sde.st_geometry_columns" ist.
Hinweis: Der Benutzer muss über die folgenden Berechtigungen verfügen: SELECT ON dba_indexes
Beispiel:
In dieser Sicht werden die Layer mit S-Tabellen angezeigt, in denen der
Spaltenindex "sp_id" fehlt.
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;
Beispiel:
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
Hinweis: Der Benutzer muss über die folgenden Berechtigungen verfügen: 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); /* Identify missing indexes by joining these two tables: SDE.ST_GEOMETRY_INDEX DBA_INDEXES Each Layer's Spatial Index table name = 'S' || st_geometry_index.index_id || '_IDX$' Each SP_ID column index name = '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 -- For each layer with an S table missing its SP_ID index, create one. 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) Die PL/SQL-Prozedur wurde erfolgreich abgeschlossen.
SELECT * FROM st_geom_missing_index_v; no rows selected
Unterstützung durch ArcGIS-Experten anfordern
Esri Support App herunterladen