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 необходимо на короткое время получить блокировку всей родительской таблицы. Это может занять много времени на занятом и / или большом столе.
- На столе могут быть триггеры, выполняющие дополнительную работу.
Для дальнейшего чтения: пессимистическая или оптимистическая блокировка.