我去叫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,...等等。最后,当查询执行时间达到100s时,我得到了上面的错误。完整的错误描述如下。
### 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最初,我使用的是序列化隔离级别。由于我的数据不会更改,因此我将隔离级别更改为read committed (因为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;根据此链接here,我更改了查询,如下所示
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秒的空间查询是可以接受的吗?
发布于 2014-06-25 17:12:52
这是由于表格的创建方式造成的。在create table中,我使用parallel来创建阶数为6的表。当我将它禁用为no parallel时,我所面临的问题就解决了。这是oracle版本的一个bug,已在以后的版本中修复。
create table KP_GEOM_TBL parallel(degree 6)一旦我执行了下面的语句,这个问题就被修复了,而且现在只需要几个磨坊就可以查询数据库,而以前只需要几秒钟。
ALTER TABLE KP_GEOM_TBL NOPARALLELhttps://stackoverflow.com/questions/23512871
复制相似问题