Блокировка транзакции распределения в базе данных оракула

79
6

У меня есть вопрос о блокировке транзакций в базе данных оракула. До сих пор я обнаружил, что:


Причина. Время ожидания блокировки в распределенной транзакции превышено. Это время указано в параметре инициализации DISTRIBUTED_LOCK_TIMEOUT.


Действие. Эта ситуация рассматривается как тупиковая ситуация, и утверждение было отброшено. Чтобы установить интервал тайм-аута на более длительный интервал, отрегулируйте параметр инициализации DISTRIBUTED_LOCK_TIMEOUT, затем выключите и перезапустите экземпляр.


Некоторые другие вещи, которые я хочу узнать более подробно, это такие вещи, как:


    Упоминается, что произошел блокировка в "распределенной транзакции". Итак, какая операция базы данных может вызвать это? Обновление записи? Выбор записи?


    Что означает "Distributed" в любом случае. Я видел этот термин, придуманный повсюду, но я не могу представить, что это значит.


    Что мы можем сделать для сокращения экземпляров такой блокировки?


спросил(а) 2021-01-19T17:48:52+03:00 9 месяцев, 1 неделя назад
1
Решение
91

Распределенная транзакция означает, что у вас была транзакция с двумя разными участниками. Если вы используете PL/SQL, это обычно подразумевает наличие нескольких баз данных. Но это может просто указать, что приложение использует внешний координатор транзакций во взаимодействии с базой данных. Например, приложение J2EE может захотеть создать распределенную транзакцию, которая охватывает как выпуск SQL-операторов, так и базу данных, чтобы переместить 100 долларов США из учетной записи A в учетную запись B, а также действие сервера приложений для создания JMS-сообщения для этой транзакции, которое в конечном итоге вызвать уведомление по электронной почте о передаче, которую нужно отправить. В этом случае приложение хочет убедиться, что состояние среднего уровня соответствует состоянию задней части.


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

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

ответил(а) 2021-01-19T17:48:52+03:00 9 месяцев, 1 неделя назад
46

Существует руководство здесь, в котором вы пройдете шаги для имитации ORA-02049: тайм-аут: распределенная транзакция, ожидающая блокировки, если вы хотите лучше понять одну из причин:

ответил(а) 2021-01-19T17:48:52+03:00 9 месяцев, 1 неделя назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема