Обработка транзакции:Когда происходит откат?

StackOverflow https://stackoverflow.com/questions/974864

  •  13-09-2019
  •  | 
  •  

Вопрос

Недавно этот был опубликован вопрос об определении того, что такое транзакция в общем контексте.Распространенным ответом на этот вопрос было то, что транзакция должна быть атомарной единицей работы.

Мой вопрос связан с этой атомарностью (я думаю). Я часто вижу явные вызовы ROLLBACK в хранимых процедурах SQL.

Является ли общее требование к системам обработки транзакций явным требованием отката?

Происходит ли откат автоматически, если при фиксации возникает какая-то ошибка?

Это было полезно?

Решение

В системах ТП откат может происходить на основании:

  • явный запрос, например вызов ROLLBACK или аналогичный
  • любое неперехваченное исключение или ошибку.Они могут включать в себя:
    • потеря связи с участником (в распределенной транзакции)
    • недопустимое или выходящее за пределы диапазона значение или параметр
    • тайм-аут, например, из-за невозможности получить блокировку или задержки пользователя.
  • в распределенной транзакции с двухфазной фиксацией - отказ одного из участников проголосовать за фиксацию

Откат не должен происходить, как вы говорите «при совершении совершения», под которым я думаю, вы имеете в виду «при попытке совершить». Транзакция может отказываться в любое время после начала.

Другие советы

В некоторых случаях откат произойдет автоматически из-за срабатывания триггера или нарушения ограничения.В других случаях (как вы видели) хранимая процедура сама выполняет откат.Эйден прав, что автофиксация бывает разной.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top