Да, автономные транзакции могут быть опасными.
Рассмотрим ситуацию, когда у вас есть основная транзакция. Он вставил / обновил / удалил строки. Если вы затем, в пределах этого, настроите автономную транзакцию, то либо
(1) Он вообще не будет запрашивать какие-либо данные. Это «безопасная» ситуация. Может быть полезно регистрировать информацию независимо от основной транзакции, чтобы ее можно было зафиксировать, не влияя на основную транзакцию (что может быть полезно для регистрации информации об ошибках, когда вы ожидаете откат основной транзакции).
(2) Он будет запрашивать только те данные, которые не были обновлены первичной транзакцией. Это безопасно, но излишне. Нет смысла в автономной транзакции.
(3). Он будет запрашивать данные, которые были обновлены первичной транзакцией. Это похоже на плохо продуманный дизайн, поскольку вы что-то перезаписали, а затем должны вернуться, чтобы посмотреть, что это было, прежде чем перезаписать это. Иногда люди думают, что автономная транзакция будет по-прежнему видеть незавершенные изменения основной транзакции, и это не будет. Он считывает текущее зафиксированное состояние базы данных, а также любые изменения, сделанные в автономной транзакции. Некоторым людям (часто пытающимся выполнить автономные транзакции в ответ на мутирующие ошибки триггера) не важно, в каком состоянии находятся данные, когда они пытаются их прочитать, и этим людям просто не следует разрешать доступ к базе данных.
(4). Он попытается обновить / удалить данные, которые не были обновлены основной транзакцией. Опять же, это отдает плохим дизайном. Эти изменения будут зафиксированы (или отменены) независимо от того, успешно завершена или нет первичная транзакция. Вы рискуете проблемой (5), поскольку в автономной транзакции трудно определить, были ли данные обновлены первичной транзакцией.
(5). Вы пытаетесь обновить / удалить данные, которые уже были обновлены первичной транзакцией, и в этом случае она заходит в тупик и приводит к ужасному беспорядку.