java - 如果我丢失 session ,我的 JDBC 事务会发生什么情况

标签 java oracle session jdbc transactions

我正在从 Java 程序连接到 Oracle,并执行以下操作:

  • 开始 session

  • 开始交易

  • 插入一堆行、调用存储过程等

  • 提交事务

  • 结束 session

所以。 。 。如果我在交易过程中丢失 session (由于网络问题或其他原因)会发生什么?我会自动回滚吗?当事务超时时我会回滚吗?我担心我的数据库将处于不一致的状态,直到 Oracle 开始清理。

最佳答案

如果您的 session 在事务执行期间丢失,Oracle 数据库将自动回滚您的更改。您可以阅读更多关于 Statement level atomicity在文档中。如果由于网络问题而丢失事务,您通常会收到ORA-03113:通信 channel 上的文件结束,并且您的事务已在数据库上回滚。

但是,只有当您的 session 在数据库服务器本身丢失时才会出现这种情况。特别是对于分布式事务 (XA),您的数据库事务通常在 JDBC session 消失时保持 Activity 状态,因此当您有 XA 事务时请注意这一点。

还要注意 JDBC 驱动程序中默认打开的自动提交。这会自动提交您执行的每个操作,因此如果您有一个较长的事务(例如 10 次插入)并且您的第 9 次插入失败,则插入 1 - 8 已自动提交并且不会再回滚。可以通过 Connection.setAutoCommit(false); 关闭自动提交,请参阅 setAutoCommit in the JDBC API documentation

关于java - 如果我丢失 session ,我的 JDBC 事务会发生什么情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30608378/

相关文章:

java - 实体的 jaxb XML Marshall 中的 dbId ="0"

mysql - 使用下面提到的条件编写一个查询来删除 oracle 数据库中的重复记录 :

php - 以多页php形式保存用户输入数据

c# - 如何在 asp.net session 变量过期之前执行服务器端代码?

c# - 将 WebJobs 与 Azure 服务总线和 session 一起使用

java: 停止子进程

java - 了解Tapestry原理1. "Static Structure, Dynamic Behaviour"

java - 如何将 json 从 android 发送到 php?

java - 如何在 jdbc 连接上传递用户名或用户 IP 地址?

database - 如何使用 sql developer 备份和恢复数据库(oracle 9i)