Что делает сервер sql в случае сбоя транзакции JPA в сети? - PullRequest
0 голосов
/ 15 октября 2018

Я использую JPA для подключения к серверу SQL через WAN.Мне не удалось найти информацию о том, что происходит, когда я начинаю транзакцию JPA, которая включает в себя запись в удаленную БД, но соединение WAN прерывается до или во время принятия.

В каждой транзакции я передаюзаголовок и несколько сотен строк подробностей.

Знает ли база данных на дальнем конце достаточно, чтобы отменить все изменения?

Очевидно, что запрос на откат локального приложения не будет иметь никакого эффекта, так как канал WAN не работает.

1 Ответ

0 голосов
/ 23 октября 2018

Я предполагаю:

  • Под словом "соединение разорвано" я имею в виду, что dbms-client-driver сообщает вашему коду приложения, что соединение потеряно.
  • у вас есть только одна СУБД, что означает отсутствие двухфазной фиксации.

Тогда:

Не имеет значения, используете ли вы sql-серверчерез WAN или LAN.Либо сделка сделана полностью, либо нет вообще.Это природа транзакций.

Так что, если соединение завершается до фиксации , сервер откатит все.Невозможно восстановить соединение на уровне приложения, чтобы завершить транзакцию.

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

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

Осторожно, это может привести к "разрыву соединения" после того, кактайм-аут, который может быть довольно длинным (несколько минут).В это время транзакции сохраняют все блокировки и могут замедлить работу всей системы.Эти тайм-ауты могут быть установлены на более длинные интервалы, если вы общаетесь через более медленную сеть.

...