Мое приложение автоматически восстанавливается после сбоев. Я тестирую это следующим образом:
- Запустить приложение
- В середине обработки убить хост сервера приложений (shutdown -r -f)
- При перезагрузке хоста перезапускается сервер приложений (как служба Windows)
- Приложение перезагружается
- Приложение пытается выполнить обработку, но оно блокировано незавершенной двухфазной транзакцией фиксации в базе данных Oracle из предыдущего сеанса.
- Где-то между 10 и 30 минутами позже БД разрешает предыдущий txn, и обработка продолжается нормально.
Мне нужно, чтобы он продолжал обрабатывать быстрее, чем это. Мой администратор баз данных советует, чтобы перед моим заявлением стояла префикс
ALTER SESSION ADVISE COMMIT;
Но он не может дать мне гарантий или подробностей о возможности потери данных при этом.
К счастью, рассматриваемый оператор просто обновляет значение datetime
до SYSDATE
каждую секунду или около того, поэтому, если было какое-то повреждение данных, оно длилось бы ‹ 1 секунды, прежде чем оно было бы перезаписано.
Но, на мой вопрос. Что именно делает приведенное выше утверждение? Как Oracle решает проблемы синхронизации данных при его использовании?