如何重试由于死锁而失败的事务?

时间:2010-10-01 04:32:11

标签: sql sql-server-2008 deadlock transactionscope

我使用linq-sql,这就是我需要的。

Sub Commit()
Try

StepStart:

Transaction Scope Serialized
Begin Transaction
Check BusinessRule1
Check BusinesRule2

if BusinessRulesFailed
{ Transaction.Rollback }
else {
Query = db.out
db.SubmitChanges()
Transaction.Commit()
}

Catch DeadLockException
Goto StepStart

End Try

End Sub

可以按照这种方法吗?有人可以用C#或VB.Net给我一个例子

1 个答案:

答案 0 :(得分:0)

是的,可以使用这种方法。我们做类似的事情。我有一点延迟,比如500毫秒。

使用SQL Server(和Sybase)锁定策略将始终发生死锁:您只能减少as per MSDN (for 2000 bit still valid)的可能性。也说重试。

我也看到过重试的商业应用。

另一种选择是启用snapshot isolation,但这不是完美的