Oracle PHP обновление не отвечает

У меня сегодня очень странная проблема с оракулом.

Я установил новый сервер с xampp для разработки, я активировал mssql и oracle, и все было в порядке, пока я не попытался выполнить оператор обновления.

Каждый выбор, вставка и т. Д. Работает нормально с PHP 5.3.

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

нет ошибок, ничего. просто таймаут, пока я не перезапущу Apache.

здесь код... это тестовый код, так что не должно быть никаких проблем.

$conn = oci_connect('***', '***', '***');

$query ="UPDATE CHAR*** SET TPOS = 14, ID = 5, DIFF = 'J' WHERE ***NR = '3092308' AND LA*** = '5'";
echo $query;
echo '<br>';
echo $stid = oci_parse($conn, $query);
oci_execute($stid, OCI_DEFAULT);    
oci_free_statement($stid2);

Есть намеки или идеи?:-(Я уже пытался переустановить мгновенный клиент oracle и другую версию. В настоящее время я использую 10g, как наш db.

с наилучшими пожеланиями колодки

1 ответ

Решение

Строка может быть заблокирована другим сеансом. Если это так, ваш сеанс будет зависать до завершения другой транзакции (фиксация / откат).

Вы должны сделать SELECT FOR UPDATE NOWAIT перед попыткой обновить строку (пессимистическая блокировка):

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

  • Если строка доступна, вы убедитесь, что ни один сеанс не изменит ее содержимое, пока вы не подтвердите (и, таким образом, вы предотвратите любую форму потерянного обновления).

Есть и другие причины, по которым простое обновление может занять много времени, но они менее вероятны, например:

  • При обновлении неиндексированного внешнего ключа Oracle необходимо на короткое время получить блокировку всей родительской таблицы. Это может занять много времени на занятом и / или большом столе.
  • На столе могут быть триггеры, выполняющие дополнительную работу.

Для дальнейшего чтения: пессимистическая или оптимистическая блокировка.

Другие вопросы по тегам