首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java.sql.SQLException: ORA-13268:从USER_SDO_GEOM_METADATA获取维度时出错

java.sql.SQLException: ORA-13268:从USER_SDO_GEOM_METADATA获取维度时出错
EN

Stack Overflow用户
提问于 2014-05-07 16:40:51
回答 1查看 689关注 0票数 0

我去叫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时,我得到了上面的错误。完整的错误描述如下。

代码语言:javascript
复制
### 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

代码语言:javascript
复制
 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,我更改了查询,如下所示

代码语言:javascript
复制
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秒的空间查询是可以接受的吗?

EN

回答 1

Stack Overflow用户

发布于 2014-06-25 17:12:52

这是由于表格的创建方式造成的。在create table中,我使用parallel来创建阶数为6的表。当我将它禁用为no parallel时,我所面临的问题就解决了。这是oracle版本的一个bug,已在以后的版本中修复。

代码语言:javascript
复制
create table KP_GEOM_TBL parallel(degree 6)

一旦我执行了下面的语句,这个问题就被修复了,而且现在只需要几个磨坊就可以查询数据库,而以前只需要几秒钟。

代码语言:javascript
复制
ALTER TABLE KP_GEOM_TBL NOPARALLEL
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23512871

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档