我们有几个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
数据:
流程T_NAME
- 使用"A"
' L' INSERT到T_NAME
并改变RECORD_STATUS
和PRIORITY
流程SUB_PRIORITY.
- 更新"B"
' K'到RECORD_STATUS
' M'。
处理RECORD_STATUS
和"D"
处理"E"
' N'和' O'分别
问题是,进程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) ......等......