我是否可能在select语句中出现错误ORA-08177?
--- Cause: java.sql.SQLException: ORA-08177: can't serialize access for this transaction
at com.ibatis.sqlmap.engine.mapping.statement.MappedStatement.executeQueryWithCallback(MappedStatement.java:201)
at com.ibatis.sqlmap.engine.mapping.statement.MappedStatement.executeQueryForList(MappedStatement.java:139)
at com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.queryForList(SqlMapExecutorDelegate.java:578)
at com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.queryForList(SqlMapExecutorDelegate.java:552)
at com.ibatis.sqlmap.engine.impl.SqlMapSessionImpl.queryForList(SqlMapSessionImpl.java:118)
at org.springframework.orm.ibatis.SqlMapClientTemplate$3.doInSqlMapClient(SqlMapClientTemplate.java:298)
at org.springframework.orm.ibatis.SqlMapClientTemplate.execute(SqlMapClientTemplate.java:209) at org.springframework.orm.ibatis.SqlMapClientTemplate.executeWithListResult(SqlMapClientTemplate.java:249)
at org.springframework.orm.ibatis.SqlMapClientTemplate.queryForList(SqlMapClientTemplate.java:296)
答案 0 :(得分:0)
根据文档,ORA-08177只能由可序列化的事务引起。这意味着在可序列化事务开始之后,可序列化事务正在尝试修改的行被另一个事务修改。读取提交的隔离级别可能会发生类似情况,但在这种情况下,数据库会自动并静默地重新启动整个SQL语句,并且不会发生错误。
所以我的猜测是你的交易毕竟是可序列化的。我相信,默认隔离级别可以在连接中设置,也可以在连接属性中设置。你确定你已经检查过每个可能的地方吗?您应该可以通过在连接上调用getTransactionIsolation()来轻松验证这一点。