Глобальная блокировка Oracle через процесс - PullRequest
1 голос
/ 26 марта 2010

Я хотел бы синхронизировать доступ к определенной вставке. Следовательно, если несколько приложений выполняют эту «одну» вставку, вставки должны выполняться по одной за раз. Причина синхронизации заключается в том, что должен быть только ОДИН экземпляр этого объекта. Если несколько приложений пытаются вставить один и тот же объект, только одно должно быть успешным, а другие - неудачным. Один из рассмотренных вариантов заключался в создании составного уникального ключа, который бы однозначно идентифицировал сущность и опирался на уникальные ограничения. По некоторым причинам отдел DBA отклонил эту идею. Другой вариант, который мне пришел в голову, состоял в том, чтобы создать сохраненный процесс для вставки, и если сохраненный процесс может получить глобальную блокировку, то несколько приложений вызывают один и тот же сохраненный процесс, хотя в своих сеансах отдельной базы данных ожидается, что сохраненный процесс может получить глобальную блокировку и, следовательно, сериализовать вставки. Мой вопрос: возможно ли для хранимого процесса в oracle версии 10/11 получить такую ​​блокировку, и любые указатели на документацию будут полезны.

1 Ответ

1 голос
/ 29 марта 2010

Если вы хотите, чтобы вставленные сущности были уникальными, то в Oracle вам не нужно ничего сериализовать - уникальное ограничение идеально разработано и подходит именно для этой цели. Oracle обрабатывает всю блокировку, необходимую для обеспечения вставки только одной сущности.

Я не могу вспомнить причину, по которой департамент dba отклонил идею уникального ограничения, это довольно просто - возможно, они отвергли какой-то другой аспект предложенного вами решения.

Если вы хотите по какой-либо причине сериализовать доступ (и я не могу придумать причину, по которой вы это сделаете), вы можете (а) получить блокировку для всей таблицы, которая сериализует все DML в таблице; или (b) получить блокировку с именем пользователя, используя DBMS_LOCK - который будет сериализовать только определенный процесс (ы), в котором вы получаете блокировку. Оба варианта имеют свои преимущества и недостатки.

...