Использую PHP5, ADODB для соединения с OracleСкрипт коннекта:
---------------------------
$db = NewADOConnection('oracle');
if (!$db) die('Connection failed');$result_connect = @$db->connect(FALSE, $_SESSION['user'], base64_decode($_SESSION['pass']), $_SESSION['serv']);
---------------------------
При этом на сервере оракла возникает большое количество соединений с БД от апача. Так как в проекте есть ещё и AJAX-вызовы, которые также оставляют после себя соединения, то ситуация с нагрузкой на оракловский сервер становится непростой :)
Вопрос(ы):
Почему такое происходит?
Почему эти сессии не закрываются после отработки скрипта?
Есть подозрение, что это зависит от настроек апача, т.к. на другом сервере большого количества соединений не возникало. Может ли это зависеть от веб-сервера?
А вы пробовали самостоятельно закрывать соединение после завершения работы скрипта?
>Почему эти сессии не закрываются после отработки скрипта?Наверное сессии надо явно закрывать в скрипте. Вообще в Oracle не зря придумывают Сервера приложений и HTMLDB, там держится пул соединений. К PHP конечно это отношения не имеет.
Та же проблема, Применял $db->StartTrans(),CommitTrans() и CompleteTrans(), Эффект нулевой. Честно говоря не слишеом шарю в оракле. Подскажите пожалуста. Каким образом можно закрыть сессию из скрипта?
Дело в том, что в скрипте таки всё работает. Транзакция открываеться и закрываеться и коммит происходит и всё вробебы работает правильно.
Я почти уверен что дело в файлах конфигурации в частности php.ini .
Нашел настройки для модуля OCI8 но в моем случае работает php_oracle, так уж было это приложение построено ещё до меня/ Подскажите как правильно прописать конфиг
$db->Close();
Ну, в общем разобрался я с этой проблемой. Дело в том , что АДОДБ помимо стандартной функции подключения к ораклу ещё наворачивает туда кучу всего. В чём именно был бок я разбираться не стал, лениво как то перебирать весь АДОДБ, а сделал немного проще:$db = NewADOConnection('oracle');
$result_conn = $db->_connectionID = ora_logon('user@Server','password');
if(!$result_conn) {echo 'error...';exit();)Ну и далее работаем с АДОДБ так, как будто бы подключались через
$db->connect(....)
Если кто ещё столкнёться с подобной проблемой вот вам один из вариантов ее решения.
Удачи