3

应用程序的架构是直截了当的。有一个维护帐户持有人数据的 Web 应用程序。处理此数据并根据业务规则的数量更新帐户持有人的状态。此过程使用页面上的按钮启动,并且是一个长时间运行的过程(例如 15 分钟)。开发了一个组件来执行此数据处理,该组件在内部调用存储过程。大多数业务规则都保存在存储过程中。

为了处理超时,处理是异步完成的(使用线程池或自定义线程或异步回调委托)。整个过程在一个事务下运行。如果应用程序池被回收或工作进程被强制终止,我想知道您对事务会发生什么的看法?

4

2 回答 2

10

我将假设您使用的是 SQL Server、MySQL 或 Oracle 等 SQL 数据库。

这些数据库平台有自己的内部事务模型。当您与他们通信并启动交易时,服务器会为您管理交易。

对于要提交的事务,客户端必须告知数据库提交更改。如果交易从未收到此指令,则交易保持“待处理”状态。最终,在事务“挂起”而没有任何进一步的指令后,服务器将认为它“死”并放弃它,对事务执行回滚。

这是事务处理的最坏情况,因为挂起的事务可能(取决于隔离级别)导致数据库中的资源(行、页面、整个表)不可用。通常,当网络连接在事务中失败(例如由于断电)并且客户端没有向服务器发送“关闭连接”命令时,您会看到这种情况。


如果您的应用程序在事务期间对数据库进行处理时通过回收应用程序池而终止,则与数据库的连接将被关闭。这种关闭连接的行为应该导致服务器放弃与连接相关的任何未决事务。

确切的行为将取决于特定的数据库和配置。

无论哪种情况,您的数据库数据都将保持不变。

于 2010-04-20T10:47:40.667 回答
0

如果工作进程终止,我认为应用程序回滚。

但是你必须测试。

于 2010-04-19T22:20:05.860 回答