如何回滚已提交的事务?

时间:2009-11-06 21:22:15

标签: sql-server web-applications

我正在为Web应用程序上的漫长操作实现撤消按钮。由于撤消将在另一个请求中出现,我必须提交操作。

有没有办法在交易上发出提示,例如“也许回滚”?因此,在提交事务之后,如果需要,我仍然可以在其他进程中回滚。

否则撤销功能将与撤消操作一样复杂。

这可能吗?其他想法欢迎!

3 个答案:

答案 0 :(得分:6)

您可能需要考虑的其他选项: 如果用户可以“撤消”操作,您可能希望实现一个'intent'表,您可以在其中存储挂起的操作。一旦完成应用程序流程,用户就需要接受或撤消操作,此时您只需运行挂起的事务并将其应用于您的数据库。

我们的网络应用程序中有一个类似的系统,用户可以提交交易进行处理,并且在计划运行的那天下午5点取消它。我们将其存储在意图表中,并处理在每日截止时间之后安排的当天的任何交易。在您的情况下,在初始“冗长操作”之后,您将需要用户明确的“接受”或“撤消”操作,这样会稍微改变您的过程。

希望这有帮助。

答案 1 :(得分:4)

在这种情况下的想法是记录每个操作 - 在特殊日志中执行相反操作的计数器操作,当您需要回滚时,实际运行您已记录的命令。

某些数据库具有闪回技术,您可以要求数据库返回特定日期和时间。但你需要了解它是如何工作的,并确保它只会影响你想要的数据而不影响其他工作人员......

Oracle Flashback

我不认为在SQL服务器上有类似的技术,并且有一个SO答案说它没有,但SQL不断发展......

答案 2 :(得分:1)

我不确定你在这里使用什么技术,但肯定有更好的方法可以解决这个问题。您可以先将数据存储在会话中,然后在最终页面上进行提交。如今,许多框架还允许跨越多个请求的长时间运行的事务。

但是,您可能希望在每个页面的末尾提交,只需在进程完成时设置某种标记即可。这样一来,如果中间出现问题,用户就可以恢复并且一切都不会丢失。