oracle DRCP可以与PHP PDO一起使用吗?
我已经在oracle数据库中设置了数据库驻留连接池。 配置后,我可以使用两种方法从池中获取持久连接:oracle DRCP可以与PHP PDO一起使用吗?,php,oracle,pdo,Php,Oracle,Pdo,我已经在oracle数据库中设置了数据库驻留连接池。 配置后,我可以使用两种方法从池中获取持久连接: $conn = oci_pconnect('scott', 'tiger', 'ORCL_POOL'); 或者,我可以使用Zend\Db: $db = new \Zend\Db\Adapter\Adapter(array( 'persistent' => true, 'username' => 'scott', 'password' => 'tiger
$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\u CC\u STATS)从池中重用连接
我有一个使用PDO的第三方库,我不知道如何将它配置为使用持久连接。PDO::ATTR_PERSISTENT
选项听起来不错,但似乎使用了自己的连接缓存(每次都会获得一个新的连接,并在V$CPOOL\u CC_STATS
中显示为“未命中”)。
例如:
所以它使用OCI进行连接,我告诉它使用持久连接…?我们与Zend达成了支持协议,我向他们提出了这个问题。他们的回答是,他们引用了Oracle文档和“地下PHP和Oracle手册”:
PDO_OCI和DRCP并不是一个可行的解决方案,因为这些问题非常严重
您正在体验>(PDO希望维护自己的缓存)
如您所知,也没有可靠的连接
网络上关于将两者作为一个有凝聚力的单元的信息。-->
(PDO_OCI与DRCP)
这背后的原因是因为Oracle的最佳实践和
《地下PHP和Oracle手册》规定必须使用PHP OCI8。
它具有更好的功能集、性能、可靠性和稳定性。
建议“不”将PDO_OCI用于一般用途。
正如您通过自己的测试所知,DRCP可用于
oci_pconnect(),或使用带有“persistent”选项的Zend\Db
从Oracle Database 11g开始,PHP OCI8可以进行连接池
使用数据库驻留连接池(DRCP)
但是,作为一种解决方法,有一些库(例如)扩展了基本PDO类,并通过oci_*调用实现了这些特性。重要的是,对于我的用例,PDO的持久连接选项是通过oci_pconnect
实现的。我不理解你的问题。真正的原因是PDO_oci没有使用Oracle的“会话池”,这是一种与DRCP服务器对话的技术。PHP OCI8在内部使用会话池。
$pdo = new \PDO('oci:dbname=ORCL_POOL', 'scott', 'tiger',
array(PDO::ATTR_PERSISTENT => true));