можно ли использовать oracle DRCP с PHP PDO?


Я настроил пул резидентных подключений к базе данных в базе данных oracle. После настройки я могу использовать несколько методов для получения постоянного соединения из пула:

$conn = oci_pconnect('scott', 'tiger', 'ORCL_POOL');

В качестве альтернативы я могу использовать Zend\Db:

$db = new \Zend\Db\Adapter\Adapter(array(
    'persistent' => true,
    'username' => 'scott',
    'password' => 'tiger',
    'driver' => 'oci8',
    'instance' => 'ORCL_POOL', //configured in tnsnames with (SERVER=POOLED)
));

Пока все хорошо, и я вижу, что соединения повторно используются из пула через представления oracle, такие как V$CPOOL_CC_STATS

У меня есть сторонняя библиотека, которая использует PDO, и я не могу понять, как настроить ее для использования постоянных подключений. PDO::ATTR_PERSISTENT опция звучит неплохо, но, похоже, использует собственный кэш соединений (каждый раз получает новое соединение и отображается как "пропущенный" в V$CPOOL_CC_STATS). например:

$pdo = new \PDO('oci:dbname=ORCL_POOL', 'scott', 'tiger', 
                array(PDO::ATTR_PERSISTENT => true));

Итак, он использует OCI для подключения, и я сказал ему использовать постоянные соединения...?

Author: Brett McBride, 2015-08-14

1 answers

У нас есть соглашение о поддержке с Zend, и я обсудил это с ними. Их ответ, в котором, по их словам, цитируется документация Oracle и "Руководство по подземному PHP и Oracle", был следующим:

PDO_OCI с DRCP не является работоспособным решением из-за тех самых проблем , с которыми вы сталкиваетесь> (PDO хочет поддерживать собственный кэш постоянных подключений.) Как вам, возможно, известно, в Интернете также нет достоверной информации об этих двух как о едином целом. ---> (PDO_OCI (ПДО_СОЦ с DRCP)

Причина этого заключается в том, что в лучших практиках Oracle и руководстве Underground PHP и Oracle говорится, что необходимо использовать PHP OCI8. Он обладает лучшим набором функций, производительностью, надежностью и стабильностью. Использование PDO_OCI для приложений общего назначения "НЕ рекомендуется". Также, как вам известно, с помощью вашего собственного тестирования DRCP можно использовать с oci_pconnect() или с помощью Zend\Db с опцией "постоянный".

Начиная с базы данных Oracle 11g, PHP OCI8 может выполнять объединение соединений в пул с помощью Пула резидентных подключений к базе данных (DRCP).

Однако в качестве обходного пути существует несколько библиотек (таких как https://github.com/taq/pdooci ), которые расширяют базовый класс PDO и реализуют функции с помощью вызовов oci_*. Важно отметить, что для моего варианта использования опция постоянного подключения PDO реализована с oci_pconnect.

 0
Author: Brett McBride, 2015-08-19 01:38:50