选择ORA-08177

时间:2015-11-04 09:51:57

标签: java spring oracle

我是否可能在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)

1 个答案:

答案 0 :(得分:0)

根据文档,ORA-08177只能由可序列化的事务引起。这意味着在可序列化事务开始之后,可序列化事务正在尝试修改的行被另一个事务修改。读取提交的隔离级别可能会发生类似情况,但在这种情况下,数据库会自动并静默地重新启动整个SQL语句,并且不会发生错误。

所以我的猜测是你的交易毕竟是可序列化的。我相信,默认隔离级别可以在连接中设置,也可以在连接属性中设置。你确定你已经检查过每个可能的地方吗?您应该可以通过在连接上调用getTransactionIsolation()来轻松验证这一点。