2009-06-10 67 views
1

最近this问题发布了关于在一般情况下交易的定义。这个问题的一个常见答案是交易应该是一个原子工作单元事务处理:什么时候发生回滚?

我的问题涉及这种原子性(我认为)我经常在SQL存储过程中看到显式调用ROLLBACK。

通常是事务处理系统的通用要求是明确要求回滚吗?

如果提交时发生某些错误,是否会自动回滚?

回答

2

在TP系统中,回退可发生基于:

  • 的显式请求,如呼叫回滚或类似
  • 任何未捕获的异常或错误。这些可能包括:通信的与参与者
    • 损失(在分布式事务)
    • 无效或超出范围值或参数
    • 超时,因无法获得例如一个锁或用户延迟。
  • 两阶段提交分布式事务,参与者之一的失败表决提交

像你说的“提交时”不一定会发生回退,由我猜你意思是“试图犯下时”。开始后,交易可随时回滚。

+0

是的,我的意思是一个尝试提交,这是一个区别,我真的应该做出指出它thants – Crippledsmurf 2009-06-10 11:06:55

0

在某些情况下,由于触发器或约束冲突,回滚将自动发生。在其他人(如你所见过的)中,存储过程本身就是回滚。艾登是正确的,自动提交变化。