是采用Tuxedo进行编程,在tpsvrinit函数中加入和ORACLE连接的操作部分,其函数内容如下: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中出现如下错误: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中的内容是按照正确格式设置的:tpcc =
(DESCRIPTION =
(ADDRESS = (PROTOCOL= TCP)(Host= 128.5.30.111)(Port= 1521))
(SDU=14600)
(CONNECT_DATA = (SERVICE_NAME = tpccraw80))
)
想问各位大侠,如何修改tnsnames.ora或者是OCI调用使我的程序能正确的连接到Oracle数据库?
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中出现如下错误: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中的内容是按照正确格式设置的:tpcc =
(DESCRIPTION =
(ADDRESS = (PROTOCOL= TCP)(Host= 128.5.30.111)(Port= 1521))
(SDU=14600)
(CONNECT_DATA = (SERVICE_NAME = tpccraw80))
)
想问各位大侠,如何修改tnsnames.ora或者是OCI调用使我的程序能正确的连接到Oracle数据库?
解决方案 »
- oracle 11gR1版本的dmp 文件如何导入 oracle 9.2 的数据库中
- 如何查找几个字段中排行第N的值?
- 怎样把oracle的数据倒到excel里面啊。。。
- 准备学Oracle 应该准备什么?
- 一个存储过程的问题!
- 为什么用sql plus登录没有反应?
- 如何用EXECUTE IMMEDIATE 得到调用过程的返回值?谢谢!
- 关于SGA的分配问题
- 问几个个SQL sever语句,如何转化为ORACLE
- oracle12c 登陆问题
- Oracle 视图
- 一条修改语句,要修改的字段:[金币] yxb,[经验] Exp [最大回合数] maximumNumberOfRound 如果最大回合数比数据库大就替代
服务启动的时候,一般是通过ubbconfig文件里的数据库配置信息来连接数据库的吧:
OPENINFO="Oracle_XA:Oracle_XA+SqlNet=tpccraw80+Acc=P/username/password+SesTm=120+MaxCur=5+LogDir=."
好象是这个。
另外,你用于访问数据库的用户,应该得赋一个事务处理的权限吧:
grant select on DBA_PENDING_TRANSACTIONS to username;
OCIServerAttach(tpcsrv, errhp, (text *)0, 0,OCI_DEFAULT);
更改为
OCIServerAttach(tpcsrv, errhp, "tpcc",sizeof("tpcc"),OCI_DEFAULT);//tnsnames.ora中要连接的数据库的别名
因为他改完代码之后,就好用了。
如果是tnsnames.ora的问题,改完代码也不会好用。
你看我的ubb里:
*GROUPS
DEFAULT:
GROUP1 LMID=SITE1 GRPNO=1
OPENINFO="Oracle_XA:Oracle_XA+SqlNet=实例名
+Acc=P/user/psd+SesTm=120+MaxCur=80+LogDir=./log"