回滚数据库更改

时间:2010-06-08 21:38:04

标签: database frameworks workflow rollback bpm

我在使用工作流程管理工具的团队中工作。我遇到了一个挑战,用户应该能够在流程中的任何时候回滚过去的某个点。当然收费可以处理它,但是必须手动回滚在这些活动期间可能进行的额外数据库调用。

挑战在于存在多个并行路径以及外部数据库调用的不同排列。那么是否有框架工作或跟踪这些数据库调用并回滚它们的方法?

谢谢你, 贾斯汀

3 个答案:

答案 0 :(得分:2)

嗯,我不这么认为。

例如,在实体框架中,您有TRANSACTIONSROLLBACK函数,但此ROLLBACK仅在此TRANSACTION开始时从此开始更改(START TRANSACTION - SQL语句

然后,您必须在多个并行路径中启动TRANSACTION并决定COMMITROLLBACK更改。但在COMMIT之前,其他并行实例不会看到其他TRANSACTIONS中尚未COMMITED的人发生的更改。

我认为,您必须在应用程序/数据库上执行一些重构,但这只是offtopic提示。

答案 1 :(得分:0)

这些更改是否已提交到数据库已处于中间状态?那将是有问题的。由于其他用户可能已根据已提交的数据启动了操作。

我见过在提交之前支持n级撤消的系统(CSLA这样做),但这是在内存中的对象模型级别。

您不会无限期地打开数据库事务等待用户操作。

答案 2 :(得分:0)

您需要回滚还是需要数​​据处于某种状态?我问,如果后者是这种情况,那么这是一个问题或将您的记录设置回工作流程步骤X之前的值。

有一种名为Momento Pattern的设计模式,它以关键间隔拍摄对象的快照,并且除了数据库中的“当前”数据外,还会保留该数据。此类型事务可以存储为对象的序列化并进行记录,因此您需要为当前拥有的每个表创建历史记录表。

诀窍是从Memento交易中恢复您的对象,将数据保存回标准表。