PHP& Oracle - oci_connect()ORA-12705:无法访问NLS数据文件

时间:2011-07-01 14:24:55

标签: php oracle oci

我们多年来一直在我们的服务器上使用Oracle,但是IT部门的人昨天没有明确的警告将其删除了,而且它真的抛弃了我们的系统!

我已经采取了cwallenpoole的建议(谢谢!)并取得了很好的进展,PHP现在至少包括了oracle函数(即oci_connect),但我现在遇到了另一条错误消息:

警告:oci_connect()[function.oci-connect]:ORA-12705:无法访问NLS数据文件或无效环境

我们确保tnsnames.ora等文件位于正确的位置,但仍然没有任何乐趣:(

谢谢

3 个答案:

答案 0 :(得分:3)

确定。这是我个人的噩梦。我认真地在半夜醒来......或者我没有,但是我已经花了好几天才解决这个问题。

所以,这对我有用:

  1. 你有Oracle Instant Client吗?如果没有得到它。
  2. 你有Oracle SDK吗?如果没有得到它。
  3. 解压即时客户端。
  4. 将SDK解压缩到子目录
  5. 将ORACLE_HOME添加为导出的命令行变量(* nix中为$ ORACLE_HOME,win中为%ORACLE_HOME%)。它指向上述instantclient文件夹的完全限定路径。
  6. 创建ORACLE_BIN并让它指向SDK。
  7. 将ORACLE_HOME添加到您的路径中。
  8. 重启Apache ...
  9. 所以...这就是我一般所做的......而且一般来说它都有效......主要是......

    我认为现实中我只能说好运和上帝。

答案 1 :(得分:1)

我可以让PHP连接到Oracle的唯一方法是使用Zend Framework。

http://framework.zend.com/

答案 2 :(得分:0)

按照此过程为Oracle数据库设置NLS_LANG环境变量。 为Oracle数据库设置NLS_LANG环境变量 确定NLS_LANG值。 在数据仓库数据库中,运行命令

SELECT * FROM V $ NLS_PARAMETERS

记下NLS_LANG值,格式为[NLS_LANGUAGE] _ [NLS_TERRITORY]。[NLS_CHARACTERSET]。 例如:American_America.UTF8

对于Windows: 导航到控制面板>单击系统并单击高级选项卡。单击Environment Variables。

在“系统变量”部分中,单击“新建”。 在“变量名称”字段中,输入NLS_LANG。 在“变量值”字段中,输入在步骤1中返回的NLS_LANG值。 NLS_LANG值的格式应为[NLS_LANGUAGE] _ [NLS_TERRITORY]。[NLS_CHARACTERSET]。 例如:American_America.UTF8。 对于UNIX,请设置变量,如下所示: setenv NLS_LANG

例如:setenv NLS_LANG American_America.UTF8。 如果您的数据是7位或8位ASCII并且Informatica Server在UNIX上运行,则进行设置 NLS_LANG _.WE8ISO8859P1 注意:确保按照此过程中的说明正确设置NLS_LANG变量,否则您的数据将无法正确显示。

创建变量后重新启动计算机。