OCI接口编程出现连接错误,连接字符串解析错误问题
发表于 2011-10-14 | 来源:互联网 | 阅读:
是采用Tuxedo进行编程,在tpsvrinit函数中加入和ORACLE连接地操作部分,其函数内容如下:
- C# code
-
OCIInitialize(OCI_DEFAULT|OCI_OBJECT,(dvoid *)0,0,0,0); OCIEnvInit(&tpcenv, OCI_DEFAULT, 0, (dvoid **)0); OCIHandleAlloc((dvoid *)tpcenv, (dvoid **)&tpcsrv, OCI_HTYPE_SERVER, 0 , (dvoid **)0); OCIHandleAlloc((dvoid *)tpcenv, (dvoid **)&errhp, OCI_HTYPE_ERROR, 0 , (dvoid **)0); OCIHandleAlloc((dvoid *)tpcenv, (dvoid **)&tpcsvc, OCI_HTYPE_SVCCTX, 0 , (dvoid **)0); for (;;) { rval = OCIServerAttach(tpcsrv, errhp, (text *)0, 0,OCI_DEFAULT); if (rval == OCI_SUCCESS || rval == OCI_SUCCESS_WITH_INFO) break; OCIERROR(errhp, rval); sleep(1); }
由于在执行OCIServerAttach函数时出错,因此不断地在sqlnet.log中出现如下错误:
- C# code
-
Fatal NI connect error 12545, connecting to: (DESCRIPTION=(ADDRESS=(PROTOCOL=beq)(PROGRAM=/opt/oracle/bin/oracle)(ARGV0=oracletpccraw80)(ARGS='(DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))')(DETACH=NO))(CONNECT_DATA=(CID=(PROGRAM=tpccfmlw)(HOST=node122)(USER=oracle))))
原因应该是配置连接地数据库sid和hostname错误了。实际上我需要连接地数据库地hostname是128.5.30.111,SID是tpccraw80。
而我写地tnsnames.ora中地内容是按照正确格式配置地:
- C# code
-
tpcc = (DESCRIPTION = (ADDRESS = (PROTOCOL= TCP)(Host= 128.5.30.111)(Port= 1521)) (SDU=14600) (CONNECT_DATA = (SERVICE_NAME = tpccraw80)) )
想问各位大侠,怎么修改tnsnames.ora或者是OCI调用使我地代码能正确地连接到Oracle数据库?
