使用 OCI8 连接到 Oracle 18c 数据库

Connecting to Oracle 18c Database with OCI8

我已经设置了一个 Oracle 18c 数据库并试图从一个 php 文件连接到它,但是当我 运行 进行一个简单的连接测试时,我收到一个服务器错误,但它不能'似乎没有联系。我 运行 print_r(getLoaded_extensions()); 并且从输出数组中它显示我目前没有按照我的意愿使用 oci8 扩展。我的连接测试文件包含以下

#!/usr/local/bin/php
<?php
putenv("ORACLE_HOME=/usr/lib/oracle/18.3/client64")

    $db = "(DESCRIPTION=(ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = ***.***.*.**)(PORT = 1521)))(CONNECT_DATA=(SID=orcl)))" ;

    if($c = OCILogon("username", "password", $db))
    {
        echo "Successfully connected to Oracle.\n";
        OCILogoff($c);
    }
    else
    {
        $err = OCIError();
        echo "Connection failed." . $err[text];
    }

我不确定我是否将我的 putenv() 设置错误到 oci.dll 文件的正确位置,或者我是否需要首先安装扩展。谢谢

最有可能的是,18c 默认安装会创建一个名为 ORCL 和 PDB1(可插拔数据库)的容器数据库 (CDB)。 运行 lsnrctl stat 查找创建的服务。 然后,在数据库连接中,使用 service_name 而不是 SID 进行连接。 service_name的值可以在lsnrctl stat

的输出中看到

示例。

 $db = "(DESCRIPTION =
        (ADDRESS = (PROTOCOL = TCP)(HOST = patronus.domain.com)(PORT = 1521))
        (CONNECT_DATA =
          (SERVER = DEDICATED)
          (SERVICE_NAME = pdb1.domain.com)
        )
      )" ;

既然你说你检查了你当前使用的扩展并且 OCI8 不存在,我会继续安装模块并在你的服务器上启用它