Обработка транзакций: когда происходит откат? - PullRequest
1 голос
/ 10 июня 2009

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

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

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

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

Ответы [ 2 ]

2 голосов
/ 10 июня 2009

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

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

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

0 голосов
/ 10 июня 2009

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

...