当 JPA 事务在网络上失败时,sql 服务器会做什么?

What does sql server do when a JPA transaction fails across a network?

我正在使用 JPA 通过 WAN 连接到 SQL 服务器。我一直无法找到有关当我开始涉及写入远程数据库的 JPA 事务时发生的情况的信息,但 WAN 连接在提交之前或期间断开。

在每笔交易中,我都会传输一个 header 和数百个详细信息行。

far-end 数据库是否知道足以丢弃所有更改?

显然,请求回滚本地应用程序不会有任何影响,因为 WAN link 已关闭。

我想:

  • "the connection goes down",我的意思是,dbms-client-driver 向您的应用程序代码发出连接已丢失的信号。
  • 您只有一个 DBMS,这意味着没有两阶段提交。

然后:

通过 WAN 或 LAN 使用 sql-server 并不重要。交易要么完全完成,要么根本没有完成。 这就是交易的本质。

因此,如果连接在提交之前断开,服务器将回滚所有内容。无法在应用程序级别重新连接以完成交易。

如果在提交 期间连接断开,则取决于实现和确切的时间点,事务可能会完全保留或完全回滚。

只要将 returns 提交到您的代码,您就可以绝对确定一切都按预期持久化。

请注意,"connection goes down" 可能会在超时后发生,超时可能会很长(几分钟)。在那段时间里,交易保留了所有的锁,可能会减慢整个系统的速度。如果您通过较慢的网络进行通信,这些超时可能会设置为更长的间隔。