为什么我的SELECT ... FETCH FIRST X ROWS发送ORA-08103对象不再存在?

时间:2017-09-25 15:32:47

标签: java spring oracle

我们有几个Java进程查询 Oracle 12c 数据库。我们刚从另一个数据库迁移到此数据库,因此我们的查询可能会使用一些调整。我们正在使用 Spring JdbcTemplate.query(String sql, RowMapper mapper)

我们的问题批量处理"C",从特定S_NAME.T_NAME的{​​{1}}选择数据

RECORD_STATUS

对于每一行,我们都会将SELECT * FROM S_NAME.T_NAME WHERE RECORD_STATUS IN ('L', 'M') ORDER BY PRIORITY, SUB_PRIORITY FETCH FIRST 20 ROWS ONLY 更新为' RECORD_STATUS'或者' N'取决于它如何处理。

该过程循环回O,直到拉出0行。

我们还有2个其他流程可以处理相关的SELECT数据:

  1. 流程T_NAME - 使用"A"' L' INSERT到T_NAME并改变RECORD_STATUSPRIORITY

  2. 流程SUB_PRIORITY. - 更新"B"' K'到RECORD_STATUS' M'。

  3. 处理RECORD_STATUS"D"处理"E"' N'和' O'分别

  4. 问题是,进程C偶尔抛出 ORA-08103:对象不再存在,我真的不知道为什么。后续调用进程C在没有抛出Oracle错误的情况下正常工作。 导致此错误的原因是什么,如何阻止它,或者我是否需要在代码中对其进行补偿并针对该表重试查询?在线研究此错误表明存在损坏,但是#39;不是我在这里遇到的。

      

    org.springframework.jdbc.UncategorizedSQLException:StatementCallback;未分类SQL的SQLException [select * from S_NAME.T_NAME,其中RECORD_STATUS在(' L',' M')按PRIORITY排序,SUB_PRIORITY仅提取前20行]; SQL状态[72000];错误代码[8103]; ORA-08103:对象不再存在     在org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:84)       在org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81)       在org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81)       在org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:660)       在org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:695)       在org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:727)       在org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:777)       在com.MY_COMPANY.DAO.MyDAO.getRecords(MyDAO.java:180)       ......等......

0 个答案:

没有答案