Oracle не поддерживает Repeatable Read. Он поддерживает только Read Committed и Serializable. Я могу ошибаться, но установка уровня изоляции Repeatable Read для Oracle может привести к транзакции с уровнем изоляции Serializable. Короче говоря, вы оставлены на произвол судьбы поддержки баз данных для желаемых уровней изоляции.
Я не могу говорить за InnoDB и PostgreSQL, но то же самое применимо, если они не поддерживают требуемые уровни изоляции. База данных может автоматически обновить уровень изоляции до более высокого уровня, чтобы соответствовать требуемым характеристикам изоляции. Вы должны переосмыслить этот подход, если желаемый уровень изоляции вашего приложения должен быть Repeatable Read.
Проблема, которую вы правильно поняли, заключается в том, что оптимистическая блокировка может привести к откатам транзакций в случае обнаружения конфликта. Oracle делает это, сообщая об ошибке ORA-08177
SQL. Поскольку эта ошибка сообщается, когда два потока будут обращаться к одному и тому же диапазону данных , ее можно было бы избежать, если бы потоки работали с наборами данных, включающими различные диапазоны данных . При распределении работы между потоками вам нужно убедиться, что это так.