天天看點

Oracle Spatial建立空間索引時遇到的ORA-29855問題

[b]過程描述:[/b]

  執行的SQL語句:CREATE INDEX GC_ROAD_SEGMENT_CH_SIDX ON GC_ROAD_SEGMENT_CH(GEOMETRY) INDEXTYPE IS MDSYS.SPATIAL_INDEX;

  抛出的異常: ORA-29855: error occurred in the execution of ODCIINDEXCREATE routine

[b]問題分析:[/b]

(1)使用以下語句檢視建立索引結果:

select INDEX_NAME,TABLE_OWNER,TABLE_NAME,STATUS,ITYP_OWNER,ITYP_NAME,DOMIDX_STATUS,DOMIDX_OPSTATUS from user_indexes where ITYP_NAME is not null;

找到相應的記錄,或者在上述查詢中加入相應的條件(指定表名和索引類型)DOMIDX_OPSTATUS對應的為FAILED,說明建立空間索引失敗。

(2)使用以下語句檢視相應中繼資料:

select * from user_sdo_geom_metadata

可以在查詢條件中加入表名條件,縮小搜尋範圍,發現中繼資料表中無記錄。

[b]原  因:[/b]

當時建立空間表時沒有建立相應的空間中繼資料。

[b]解決辦法:[/b]

(1)先在user_sdo_geom_metadata中使用以下語句建立相應的中繼資料

insert into user_sdo_geom_metadata(table_name,COLUMN_NAME, DIMINFO, SRID)

values(

'GC_ROAD_SEGMENT_CH',

'GEOMETRY',

MDSYS.SDO_DIM_ARRAY(

MDSYS.SDO_DIM_ELEMENT('X',-180,180,0.005),

MDSYS.SDO_DIM_ELEMENT('Y',-90,90,0.005)

),

8307

)

(2)再執行空間索引建立語句:

CREATE INDEX GC_ROAD_SEGMENT_CH_SIDX ON GC_ROAD_SEGMENT_CH(GEOMETRY) INDEXTYPE IS MDSYS.SPATIAL_INDEX;

無錯誤提示,問題得到解決。

[b]總  結:[/b]

  在建立空間索引時先建立相應的中繼資料。