Что делает сервер sql в случае сбоя транзакции JPA в сети?
Я использую JPA для подключения к серверу SQL через WAN. Мне не удалось найти информацию о том, что происходит, когда я начинаю транзакцию JPA, которая включает в себя запись в удаленную БД, но соединение WAN прерывается до или во время фиксации.
В каждой транзакции я передаю заголовок и несколько сотен строк подробностей.
Знает ли база данных на дальнем конце достаточно, чтобы отменить все изменения?
Очевидно, что запрос на откат локального приложения не будет иметь никакого эффекта, так как канал WAN не работает.
1 ответ
Я предполагаю:
- Под "разрывается соединение" я имею в виду, что dbms-client-driver сообщает вашему коду приложения, что соединение потеряно.
- у вас есть только одна СУБД, что означает отсутствие двухфазной фиксации.
Затем:
Не имеет значения, используете ли вы sql-сервер через WAN или LAN. Либо сделка сделана полностью, либо нет вообще. Это природа транзакций.
Так что, если соединение прерывается до фиксации, сервер откатит все. Нет способа переподключиться на уровне приложения, чтобы завершить транзакцию.
Если соединение прерывается во время фиксации, то в зависимости от реализации и точного момента времени транзакция может быть сохранена полностью или откат полностью.
Вы можете быть абсолютно уверены, что все сохраняется как задумано, как только коммит вернется в ваш код.
Помните, что "соединение обрывается" может произойти после истечения времени ожидания, которое может быть довольно продолжительным (несколько минут). В это время транзакции сохраняют все блокировки и могут замедлить работу всей системы. Эти тайм-ауты могут быть установлены на более длинные интервалы, если вы общаетесь через более медленную сеть.