Ошибка транзакции TransactionScope в параллельном режиме - PullRequest
1 голос
/ 09 мая 2019

У меня есть две разные базы данных на двух разных серверах, и я использовал TransactionScope.Я впервые использую TransactionScope.

Но в параллельном режиме при обновлении Table1 Я получаю сообщение об ошибке

Транзакция (ID процесса 64) был заблокирован при блокировке ресурсов другим процессом и был выбран в качестве жертвы тупика.Перезапустите транзакцию.

Проверено TransactionScope связанных статей в сети

option.IsolationLevel = System.Transactions.IsolationLevel.ReadUncommitted;
option.Timeout = TimeSpan.FromMinutes(1);

using (_objTransactionScope = new TransactionScope(TransactionScopeOption.Required, option))
{
    //..Open Connection
    //..Process the Document
    //..Update Additional information in Table2 about document(Delete/Insert)   
    //..Update Location Information in Table3 about document(Delete/Insert)
    //..Delete the Document in Table4 in Differant Database on Differant Server(WCF Service)
    //..Update the Checksum of the Document and Metadata in Table1(Deadlock Error in concurrency)
    //..Delete Lock Entry From Table5   
    //..Close Connection
    //..Commit Transaction Scope
}

1 Ответ

1 голос
/ 09 мая 2019

Взаимная блокировка возникает, когда два пользователя блокируют отдельные объекты, и каждый пользователь хочет заблокировать объект другого. Когда это происходит, SQL Server завершает взаимоблокировку, автоматически выбирая один и прерывая процесс, позволяя другому процессу продолжить. Прерванная транзакция откатывается и сообщение об ошибке отправляется пользователю прерванного процесса. Как правило, транзакция, которая требует наименьшего количества накладных расходов для отката, является транзакцией, которая прервана.

Решение: Приоритет тупика может быть установлен пользователем. Другими словами, пользователь может выбрать, какой процесс следует остановить, чтобы позволить другому процессу продолжаться. SQL Server автоматически выбирает процесс, который завершается, который завершает круговую цепочку блокировок. Иногда он выбирает процесс, который выполняется на более короткий период, чем другой процесс.

читать эту статью

...