AUTONOMOUS_TRANSACTION: за и против

Могут быть опасными автономные транзакции? Если да, в который ситуации? Когда автономные транзакции необходимы?

7
задан skaffman 11 December 2010 в 21:22
поделиться

2 ответа

Да, автономные транзакции могут быть опасны.

Рассмотрим ситуацию, когда у вас есть главная транзакция. Она вставляет/обновляет/удаляет строки. Если вы затем, внутри нее, создадите автономную транзакцию, то либо

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

(2) Она будет запрашивать только те данные, которые не были обновлены основной транзакцией. Это безопасно, но излишне. В автономной транзакции нет смысла.

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

(4). Он будет пытаться обновить/удалить данные, которые не были обновлены основной транзакцией. Опять же, это попахивает плохим дизайном. Эти изменения будут зафиксированы (или откачены) независимо от того, удалась или не удалась первичная транзакция. Хуже того, вы рискуете столкнуться с проблемой (5), поскольку в автономной транзакции трудно определить, были ли данные обновлены первичной транзакцией.

(5). Вы пытаетесь обновить/удалить данные, которые уже были обновлены первичной транзакцией, в этом случае она зайдет в тупик и закончится безобразным беспорядком.

17
ответ дан 6 December 2019 в 06:23
поделиться

Могут ли автономные транзакции быть опасными?

Да.

Если да, то в каких ситуациях?

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

Когда необходимы автономные транзакции?

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

11
ответ дан 6 December 2019 в 06:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: