Как я могу сказать, что у меня была незафиксированная работа в транзакции Oracle? - PullRequest
12 голосов
/ 03 февраля 2009

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

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

Спасибо

Ответы [ 2 ]

23 голосов
/ 04 февраля 2009

Если у вас нет доступа к v $ session, вы можете использовать

select dbms_transaction.local_transaction_id from dual;

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

15 голосов
/ 03 февраля 2009
SELECT  *
FROM    v$session v
WHERE   v.AUDSID = userenv('sessionid')
    AND v.TADDR IS NOT NULL
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...