You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CodeIgniter项目使用PHP oci8_19连接Oracle Free 23.5.0-lite容器数据库失败求助

CodeIgniter项目使用PHP oci8_19连接Oracle Free 23.5.0-lite容器数据库失败求助

我来帮你排查这个问题,你遇到的ORA-12514错误本质是Oracle监听器找不到你请求的服务名,咱们一步步调整解决:

1. 修正CodeIgniter数据库配置的核心问题

你当前的hostname配置写错了——SYSDBA是数据库的系统权限,不是服务名!正确的服务名应该是你用到的PDB实例FREEPDB1,调整配置如下:

'hostname' => 'localhost:1521/FREEPDB1',
'username' => 'sys',
'password' => '12345678',
'database' => 'FREEPDB1',
'dbdriver' => 'oci8',
// 单独指定SYSDBA角色
'role' => 'SYSDBA',

2. 验证OCI8扩展的环境有效性

虽然你已经启用了oci8_19,但还是要确认:

  • 打开phpinfo()页面,搜索“OCI8”,确认扩展确实加载成功,并且显示的Oracle客户端版本和你的数据库版本(23.5)兼容(建议用19c或21c客户端)
  • Windows环境下要确保已经安装了Oracle Instant Client,并且把客户端的bin目录添加到系统PATH环境变量里,否则OCI8扩展无法正常和数据库通信

3. 用基础PHP脚本测试连接(排除CodeIgniter框架干扰)

先写一个简单的PHP脚本,绕开CodeIgniter直接测试OCI8连接,确认基础链路是通的:

<?php
// 直接用oci8函数连接
$conn = oci_connect('sys', '12345678', 'localhost:1521/FREEPDB1', 'AL32UTF8', OCI_SYSDBA);
if (!$conn) {
    $e = oci_error();
    trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
} else {
    echo "Oracle数据库连接成功!";
    oci_close($conn);
}
?>

如果这个脚本能成功运行,说明问题出在CodeIgniter的配置或第三方组件(比如ion_auth)上;如果还是报错,就要去排查容器的端口映射、Oracle监听器状态了。

4. 确认Oracle容器内的服务状态

进入Oracle容器内部,执行lsnrctl status命令,查看监听器是否注册了FREEPDB1服务。正常情况下应该能在Services Summary里看到FREEPDB1的条目。如果没找到,执行以下命令确保PDB处于打开状态并保存状态:

# 进入容器后执行sqlplus命令
sqlplus sys/12345678 as sysdba
# 打开PDB
ALTER PLUGGABLE DATABASE FREEPDB1 OPEN;
# 设置重启后自动打开
ALTER PLUGGABLE DATABASE FREEPDB1 SAVE STATE;

备注:内容来源于stack exchange,提问作者Tuhan Kamu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.15 13:29:32