我得到SQl Exception ORA-13268: error obtaining dimension from USER_SDO_GEOM_METADATA
。当我单独运行并执行大约 3 秒时,查询工作正常。但是,当我使用来自不同线程的 java(我正在使用 spring-mybatis)对同一点运行多个查询时,我会收到此错误。创建并执行该线程,以便每 3 秒有两个请求访问数据库。
当我分析我的 java 日志时,第一个请求需要 3 秒,随后的请求会随着执行查询所需的时间而增加 5,8,12,13,16,17,23,26,29,34,39,....很快。最后,当查询执行时间达到 100 秒时,我遇到了错误。完整的错误描述如下。
### Error querying database. Cause: java.sql.SQLException: ORA-13268: error obtaining dimension from USER_SDO_GEOM_METADATA
ORA-06512: at "MDSYS.MD", line 1723
ORA-06512: at "MDSYS.MDERR", line 8
ORA-06512: at "MDSYS.SDO_3GL", line 133
### The error may exist in file [/var/lib/tomcat6/webapps/kp/WEB-INF/classes/sqlmap/IKPMapper.xml]
### The error may involve com.kp.persistence.IKPMapper.getAddress-Inline
### The error occurred while setting parameters
### SQL: SELECT A.BIN_ORDINATE,A.ADDRESS,A.HOUSE_OWNER, A.PIN_CODE FROM KP_GEOM_TBL A WHERE SDO_RELATE(A.BIN_ORDINATE,SDO_GEOMETRY(2001,3857,sdo_point_type(?,?,NULL),NULL,NULL),'mask=TOUCH+CONTAINS')='TRUE'
### Cause: java.sql.SQLException: ORA-13268: error obtaining dimension from USER_SDO_GEOM_METADATA
ORA-06512: at "MDSYS.MD", line 1723
ORA-06512: at "MDSYS.MDERR", line 8
ORA-06512: at "MDSYS.SDO_3GL", line 133
; uncategorized SQLException for SQL []; SQL state [72000]; error code [13268]; ORA-13268: error obtaining dimension from USER_SDO_GEOM_METADATA
ORA-06512: at "MDSYS.MD", line 1723
ORA-06512: at "MDSYS.MDERR", line 8
ORA-06512: at "MDSYS.SDO_3GL", line 133
; nested exception is java.sql.SQLException: ORA-13268: error obtaining dimension from USER_SDO_GEOM_METADATA
ORA-06512: at "MDSYS.MD", line 1723
ORA-06512: at "MDSYS.MDERR", line 8
ORA-06512: at "MDSYS.SDO_3GL", line 133
最初我使用的是序列化隔离级别。由于我的数据不会改变,我将隔离级别更改为已提交读(因为 Oracle 仅支持这两个)。问题仍然没有变化。
这是我的 DDL
INSERT INTO USER_SDO_GEOM_METADATA VALUES
(
'KP_GEOM_TBL',
'BIN_ORDINATE',
SDO_DIM_ARRAY( SDO_DIM_ELEMENT('Longitude', -180, 180, 0.05),
SDO_DIM_ELEMENT('Latitude', -90, 90, 0.05)
),
3857 -- SRID for 'Longitude / Latitude (WGS 84)' coordinate system
);
CREATE TABLE KP_GEOM_TBL
(
BIN_ORDINATE SDO_GEOMETRY NOT NULL ,
ADDRESS VARCHAR2(60 BYTE) NOT NULL ,
HOUSE_OWNER VARCHAR2(60 BYTE) NOT NULL ,
PIN_CODE VARCHAR2(30 BYTE) NOT NULL
);
CREATE INDEX KP_GEOM_IDX ON KP_GEOM_TBL (BIN_ORDINATE) INDEXTYPE IS MDSYS.SPATIAL_INDEX PARALLEL;
根据此处的此链接,我将查询更改如下
SELECT /*+ leading(A) use_nl_with_index(A KP_GEOM_IDX) */ A.BIN_ORDINATE,A.ADDRESS,A.HOUSE_OWNER, A.PIN_CODE FROM KP_GEOM_TBL A WHERE SDO_RELATE(A.BIN_ORDINATE,SDO_GEOMETRY(2001,3857,sdo_point_type(?,?,NULL),NULL,NULL),'mask=TOUCH+CONTAINS')='TRUE'
仍然没有运气。
甲骨文版本:11.2.0.3.0
3 秒的空间查询是否可以接受?