Конец XA-транзакции, сборки мусора и till-tx-complete = true

1

Имея следующую проблему понимания того, почему сеанс связи существует, который продолжается в течение 6 часов, а также удерживая блокировку и разбивая поток, вопрос расценивается, если для соединения XADataSource (драйвер Oracle) вообще требуется ссылка на Java, чтобы сохранить ее в живых.

С точки зрения распределенной транзакции, установленной до тех пор, пока она не будет явно закрыта (keep-xa-conn-till-tx-complete = true), мне интересно, как драйвер может решить закрыть соединение и совершить транзакцию после того, как GC переработал соединение. Есть ли способ для СУБД сделать это?

Поэтому вопрос заключается в том, как СУБД решает отказаться от распределенной транзакции или нет.

  • 0
    Если вы хотите увидеть это со стороны Oracle, проверьте представления dba_2pc_pending и v $ transtaction. Если вам нужна помощь, пожалуйста, опишите вашу ситуацию подробно. Нет ничего простого, когда дело доходит до распределенных транзакций.
Теги:
garbage-collection
transactions

1 ответ

1
Лучший ответ

СУБД не принимает решения о прекращении транзакции, что делает диспетчер транзакций.

Менеджер транзакций настроен для работы в ваших контейнерах приложений, будь то Spring, серверы приложений J2EE или что-то еще. Они должны "знать", что они распределены менеджерами транзакций, настроившись правильно. В среде распределенных транзакций, где у вас есть несколько транзакционных приложений и/или служб, взаимодействующих для завершения транзакции, они должны иметь возможность поддерживать распределенные транзакции, чтобы правильно использовать XADataSources и отправлять правильные сигналы вверх и вниз по цепочке для фиксации против отката.

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

Проверьте конфигурацию каждого приложения и/или услуги, участвующих в транзакции. Добавьте вывод журнала на каждый, который определяет, является ли транзакция распределенной или нет. Если вы не можете этого сделать, тогда dd записывает выходные данные в каждый, который записывает начало и конец транзакции. Найдите последнюю точку в последовательности действий, в которых вы видите транзакцию open-transaction, но не транзакцию с близкими транзакциями. Если вы видите это, вероятно, узел сразу после него в цепочке, которая делает что-то неправильно.

Удачи.

  • 0
    Время ожидания соединения XA установлено на 10 часов. Я предполагаю, что это сделало проблему вообще возможной.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню