16.2. Видимость

Правила видимости для автономных транзакций действуют так же, как и для независимых транзакций, выполняемых через dblink. Автономные транзакции не видят результата действия родительской транзакции, как ещё не зафиксированной. В то же время, если автономные транзакции, которые предшествуют активной автономной транзакции, уже зафиксированы, то активная транзакция будет видеть результат действия этих транзакций. Родительская транзакция может видеть результат действия вложенных в неё автономных транзакций в зависимости от её уровня изоляции. Например, родительская транзакция с уровнем изоляции Read Committed будет видеть все изменения, вносимые автономными транзакциями. Однако если для родительской транзакции выбран уровень Repeatable Read, результат действия автономных транзакций не будет виден.

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

- Обычная транзакция T0              [ПРИОСТАНОВЛЕНА]
    - Автономная транзакция A0          [ЗАФИКСИРОВАНА]
    - Автономная транзакция A1          [ЗАФИКСИРОВАНА]
    - Автономная транзакция A2          [ПРИОСТАНОВЛЕНА]
        - Автономная транзакция A2.0        [ЗАФИКСИРОВАНА]
        - Автономная транзакция A2.1        [ПРИОСТАНОВЛЕНА]
            - Автономная транзакция A2.1.0      [АКТИВНА]

В примере выше активная автономная транзакция A2.1.0 не видит результат действия предшествующих транзакций T0, A2 и A2.1, которые приостановлены и ещё не зафиксированы, независимо от их типа. Однако активная транзакция видит результат действия предшествующих автономных транзакций A0, A1 и A2.0, которые уже были зафиксированы.

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