Очередь транзакций Oracle с использованием функции PHP oci pconnect в веб-сервисе


Я написал веб-сервис, используя классы PHP SOAP. Он имеет функции для возврата XML-данных из базы данных Oracle или для выполнения вставки/обновления/удаления в базе данных.

Однако в данный момент он использует автоматическую фиксацию, поэтому любая операция выполняется мгновенно.

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

Я пробовал использовать функцию PHP oci_pconnect, но даже когда я каждый раз подключаюсь с одними и теми же параметрами, сеанс, похоже, закончился, и мои изменения не были внесены, когда я наконец позвонил oci_commit.

Есть идеи?

Author: me_here, 2009-06-30

2 answers

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

Лучший способ сделать это действительно зависит от ваших требований. У меня такое чувство, что вам нужно какое-то хранилище сеансов (возможно, таблица базы данных с ключом на user_id) это может содержать все незавершенные транзакции между запросами. Когда пользователь нажмет сохранить, извлеките все ожидающие запросы и вставьте их в таблицу конечного назначения, а затем зафиксируйте.

Альтернативой было бы вставить все транзакции с флагом, который говорит, что они еще не завершены. После нажатия кнопки Сохранить обновите флаг, чтобы сообщить, что они завершены.

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

 2
Author: Stephen ODonnell, 2009-06-30 13:25:39

DBMS_XA позволяет обмениваться транзакциями между сеансами.

 0
Author: Oracle Guy, 2013-12-04 21:04:53