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

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

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

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

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


person Crippledsmurf    schedule 10.06.2009    source источник


Ответы (2)


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

  • явный запрос, например вызов ROLLBACK или аналогичный
  • any uncaught exception or error. These might include:
    • loss of communication with a participant (in a distributed transaction)
    • недопустимое или выходящее за пределы допустимое значение или параметр
    • тайм-аут, например, из-за невозможности получить блокировку или задержки пользователя.
  • в распределенной транзакции с двухэтапной фиксацией - отказ одного из участников проголосовать за фиксацию

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

person Cheeso    schedule 10.06.2009
comment
да, я имел в виду попытку совершить, это различие, которое я действительно должен был сделать, чтобы указать на это - person Crippledsmurf; 10.06.2009

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

person Matthew Flaschen    schedule 10.06.2009