【问题标题】:What does sql server do when a JPA transaction fails across a network?当 JPA 事务通过网络失败时,sql server 会做什么?
【发布时间】:2018-10-15 19:07:56
【问题描述】:
我正在使用 JPA 通过 WAN 连接到 SQL 服务器。我无法找到有关当我开始涉及写入远程数据库的 JPA 事务时会发生什么的信息,但 WAN 连接在提交之前或提交期间断开。
在每笔交易中,我都会传输一个标头和数百个详细信息行。
远端数据库是否知道足以丢弃所有更改?
显然,请求回滚本地应用程序不会产生任何影响,因为 WAN 链接已关闭。
【问题讨论】:
标签:
sql-server
transactions
jpa-2.0
wan
【解决方案1】:
我猜:
- “连接断开”是指 dbms-client-driver 向您的应用程序代码发出连接已丢失的信号。
- 您只有一个 DBMS,这意味着没有两阶段提交。
那么:
不管你是通过 WAN 还是 LAN 使用 sql-server。交易要么完全完成,要么根本不完成。
这就是交易的本质。
因此,如果连接在提交之前断开,服务器将回滚所有内容。无法在应用程序级别重新连接以完成事务。
如果连接在提交期间断开,则取决于实现和确切的时间点,事务可能会完全持久化或完全回滚。
您可以绝对确定只要提交返回到您的代码,所有内容都会按预期保存。
请注意,“连接断开”可能会在可能很长(几分钟)的超时后发生。在那个时候,事务会保留所有的锁,并且可能会减慢整个系统的速度。如果您通过较慢的网络进行通信,这些超时可能会设置为更长的时间间隔。