Предотвратить параллельный поиск в последовательности оракула

У меня есть код, который выбирает следующий # в последовательности из базы данных Oracle:

SELECT JOB_SEQ.NEXTVAL FROM DUAL;

Проблема в том, что это создает ORA-00900 (что бесполезно, потому что настоящая проблема связана с параллелизмом, а НЕ с неверным оператором SQL). Эта ошибка возникает, когда в один и тот же момент два сценария, которые выполняются параллельно (методом разветвления), пытаются выполнить этот запрос.

Какой самый простой способ гарантировать, что выбор не произойдет в то же время? я

Стек, с которым я работаю, это PHP / Linux. Я читал об очередях обмена сообщениями и предпочел бы избежать этого маршрута, если это возможно. Если бы что-то вроде Unix-сокетов могло работать (т.е. не нужно устанавливать дополнительное программное обеспечение), то я бы предпочел этот способ.

0

Решение

Таким образом, проблема заключается в характере разветвления и работе сессий Oracle.

Если вы разветвляете процесс, вы должны убедиться, что сеансы базы данных в дочерних процессах разные.

Когда вы пытаетесь выбрать последовательность из того же сеанса Oracle, либо OCI, либо сама база данных не знает, как с этим справиться.

Но если сессии разные, у вас нет проблем. Это можно сделать, просто выполнив oci_close () и oci_connect (), если вы используете расширение oci8 в PHP.

РЕДАКТИРОВАТЬ: Кредит для Джастин Кейв (прокомментировано выше) для объяснения того, что выбор последовательностей работает в разных сеансах.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]