У меня есть несколько экземпляров приложения J2EE, работающего в одном кластере WebLogic.
В какой-то момент эти приложения делают MERGE для вставки или обновления записи во внутреннюю базу данных Oracle. MERGE проверяет, существует ли строка с указанным первичным ключом. Если он там, обновите. Если нет, вставьте.
Теперь предположим, что два экземпляра приложения хотят вставить или обновить строку с помощью первичного ключа = 100. Предположим, что строка не существует. Во время стадии "проверки" слияния они оба видят, что строк нет, поэтому оба они пытаются вставить. Затем я получаю уникальное нарушение ограничения ключа.
Мой вопрос заключается в следующем: есть ли атомный MERGE в Oracle? Я ищу что-то похожее на INSERT ... FOR UPDATE
в PL/SQL, за исключением того, что я могу выполнять SQL только из своих приложений.
РЕДАКТ: Я был неясен. Я использую оператор MERGE, пока эта ошибка все еще встречается. Дело в том, что только "модифицирующая" часть является атомарной, а не всего слияния.