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