Прерванная транзакция включает конфликты фиксации. Это означает, что данные, которые вы прочитали во время транзакции, могут больше не быть действительными, поэтому все решения, принятые вашим кодом - и данные, которые он пытался записать, могут основываться на недопустимых данных ... поэтому вы должны делать все заново с момента транзакции начал.
Чтобы сделать это конкретным, рассмотрим код, который читает счетчик, удваивает его, а затем записывает этот счетчик обратно. Представьте, что ваш код прочитал 4, попытался написать 8, но получил АБОРТ. После перезапуска транзакции это значение может теперь быть 5, поэтому было бы неправильно пытаться записать эти 8 снова. Вместо этого ваш код должен начинаться с нуля, чтобы вычислить, что ему нужно написать 10. Это сложно, если у вашего кода есть побочные эффекты.