遇到一个关于ORA-12154的问题,相当棘手,求各位大哥给指条明路。先把服务器构成说一下
DB服务器(以下皆称ora_serv)
OS: Solaris 10(x86 10/08)
安装Oracle10g Release 10.2.0.1.0 Server
数据库名:TKSY 用户:tokusya 密码:tokusya应用程序服务器(以下皆称ora_clent)
OS: Solaris 10(x86 10/08)
安装了Oracle10g Release 10.2.0.1.0 client,apache 2.2.11问题在ora_clent上用PL/SQL写了CGI当执行数据库连接的时候出现错误返回
的sqlcode是-12154,以下为连接数据库时的部分代码-------------------------------------------------------------------------------EXEC SQL INCLUDE SQLCA;int DBConnectSet()
{
    EXEC SQL BEGIN DECLARE SECTION;
        varchar hs_username[256];
        varchar hs_password[256];
        varchar hs_dbname[256];
    EXEC SQL END   DECLARE SECTION;         // 用户名,密码,数据库名设置
        strcpy(hs_username.arr, "tokusya");
        hs_username.len = strlen(hs_username.arr);
        strcpy(hs_password.arr, "tokusya");
        hs_password.len = strlen(hs_password.arr);
        strcpy(hs_dbname.arr, "TKSY");
        hs_dbname.len = strlen(hs_dbname.arr);    EXEC SQL WHENEVER SQLERROR GOTO sqlerror;
    EXEC SQL CONNECT :hs_username IDENTIFIED BY :hs_password AT :hs_dbname;
return 0;sqlerror:
EXEC SQL WHENEVER SQLERROR CONTINUE;
// 出错返回
return sqlca.sqlcode;
}
-------------------------------------------------------------------------------查了关于ORA-12154错误的内容都是围绕着tnsnames.ora和sqlnet.ora的设置。
在ora_clent上用netca设置了服务,用tokusya用户测试连接也通过了。tnsnames.ora设置如下
-------------------------------------------------------------------------------
TKSY =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.10.172)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = TKSY)
    )
  )
-------------------------------------------------------------------------------sqlnet.ora设置如下
-------------------------------------------------------------------------------
NAMES.DIRECTORY_PATH= (TNSNAMES)
-------------------------------------------------------------------------------在ora_clent上tnsping TKSY也显示正常成功。
用sqlplus tokusya/tokusya@TKSY也能正常连接数据库。可就是一旦执行CGI连接数据库就会返回
-12154这个错误code。我已经无计可施,走投无路了,恳请给为高人指点,谢谢先。

解决方案 »

  1.   

    这个可能是solaris x86-64平台的一个bug,
    Bug No. 5389730 Solution
    To avoid the error from happening, use one of the following solutions:
    avoid accessing tnsnames.ora by using connectstring like this
    jdbc:oracle:oci:@myhost:port:sid
    or
    jdbc:oracle:oci:@//myhost:port/service
    Upgrade to JDBC 10.2.0.2.0 and install one-off Patch 8812229
      

  2.   

    大过年的谢谢 liuyi8903回复
    用的是PL/SQL没有使用JDBC。
      

  3.   

    EXEC SQL CONNECT :hs_username IDENTIFIED BY :hs_password AT :hs_dbname; 
    改为:
    EXEC SQL CONNECT :hs_username IDENTIFIED BY :hs_password AT :hs_dbname USING :hs_dbname; 
    试试
      

  4.   

    试试把opatch 8812229 打上看看.