AUTONOMOUS_TRANSACTION: плюсы и минусы - PullRequest
7 голосов
/ 16 июня 2010

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

Ответы [ 3 ]

17 голосов
/ 16 июня 2010

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

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

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

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

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

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

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

11 голосов
/ 16 июня 2010

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

Да.

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

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

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

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

0 голосов
/ 19 октября 2018

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

Проверьте мой вопрос: Как LOCK выжить в COMMIT или как изменения в таблице LOCKed могут быть переданы в другой сеанс без COMMIT и без потери LOCK

Мы принимаем бизнес-конфигурации последовательно и должны запретить параллельную обработку.

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

Каждый сбой из-за одновременного доступа сохраняется для записи в журнал для последующей попытки обновления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...