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