2009-09-22 3 views
2

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

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

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

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

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

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

  3. Что мы можем сделать, чтобы уменьшить количество таких блокировок?

+1

Oracle является довольно хорошо. Ответы на большинство вопросов общего характера, таких как этот, можно найти в руководстве по концепциям - http://download.oracle.com/docs/cd/B19306_01/server.102/b14220/toc.htm – APC

ответ

3

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

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

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

0

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

 Смежные вопросы

  • Нет связанных вопросов^_^