gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 03:24:25 26 4
gpt4 key购买 nike

我正在从 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com