php - 使用 PHP PDO_OCI 连接到多个版本的 Oracle DB
问题描述
我需要一个带有 php 7.4 的 ubuntu 20.04 服务器来连接多个版本的 oracle 数据库。我在 18.3 版中安装了 oracle Instantclient 并加载了 oci8 php 模块。对于新版本的 oracle 数据库,这很好用。对于较旧的连接失败。
这些即时客户端版本已安装:
ii oracle-instantclient18.3-basic 18.3.0.0.0-4 amd64 Oracle Instant Client Basic package
ii oracle-instantclient18.3-devel 18.3.0.0.0-4 amd64 Development headers for Instant Client.
ii oracle-instantclient18.3-jdbc 18.3.0.0.0-4 amd64 Supplemental JDBC features for the Oracle Instant Client
ii oracle-instantclient18.3-odbc 18.3.0.0.0-4 amd64 Oracle Instant Client ODBC
这是php版本:
PHP 7.4.3 (cli) (built: Oct 6 2020 15:47:56) ( NTS
基本上必须支持这个版本:
oracle db 9.2.0.6.0
oracle db 9-0.1.3.1
oracle db 11g 11.2.0.1.0
oracle db 12c 12.2.0.1.0
oracle db 19c 12.2.0.3
oracle db 19c 19.0.0.0.0
这是当前代码:
<?php
$dbstr ="(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST =<SERVERNAME>)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = <SRVNAME>)))";
if(!@($conn = oci_connect('<user>','<pass>',$dbstr)))
{
print_r(ocierror());
die("Connect Error");
}
?>
可能吗?我需要一些提示如何实现这一点
解决方案
Oracle 9.0.1 是旧的。就像“天哪,看看这有多少软盘”老了。这是一个很快就被取消支持 Oracle 9.2 的版本。
如果您查看客户端/服务器互操作性矩阵(需要 Metalink 帐户),您必须查看扩展矩阵,因为汇总矩阵甚至不再包括 9.0.1。在那里,您将看到与 9.0.1 数据库兼容的 Oracle 客户端的最新版本是 10.1.0。我很确定它早于 Oracle Instant Client,因此您可能需要安装完整的 10.1 客户端。您可能需要提出支持请求才能访问旧版本的客户端——Oracle 通常不会费心为旧版本提供链接。
假设您确实获得了一个足够古老的客户端版本,那么它肯定没有在您使用的 Ubuntu 或 PHP 版本上获得认证。它可能安装和工作得很好。您可能需要使用两者的早期版本。
我强烈建议回到导致这些要求的任何原因,以确保他们真正了解支持 20 年旧软件的成本。如果有人告诉您要建立一个新网站并确保它与 Firefox 2(2006 年发布)兼容,您会指出尝试支持 15 年历史的浏览器会产生相当大的成本收获甚微——世界上已经没有多少 Firefox 2 浏览器了。Oracle 9.0.1 比这早了 5 年,世界上仍然很少有人在运行那个版本。
推荐阅读
- asynchronous - 为什么 Future.timeout 在飞镖中不起作用?
- java - 将元素添加到向量列表
- sql - postgresql中的SQL Group By子查询
- python - 从列表中切出特定的
- solr - Solr DIH:Child Transformer 忽略的嵌套文档(不使用 json 端点忽略)
- r - R Shiny不读取文件路径
- c++ - CMake:如何强制 cmake 静态链接 openmp?
- f# - F# - 使用带有 out 参数的 C# 方法(在数组内和 void 返回)
- python - Python 类与实例变量
- php - 访问作为另一个对象(嵌套对象)属性的对象的最佳方法是什么?