问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

TUXEDO服务端如何访问INFORMIX数据库

发布网友 发布时间:2022-04-22 09:24

我来回答

1个回答

热心网友 时间:2022-04-09 04:18

2、通过XA接口互连。本文介绍这种互连的配置方法。 以上两种连接方式的区别: 采用XA的方式,你的应用中需要使用到全局事务,如果你的应用需要在一个事务中去更新两个或两个以上的数据库,并保证该事务的一致性。使用tuxedo的XA提供的全局事务最好。如果一个数据库,可以不使用XA,事务由自己控制。因为NON-XA比XA的效率高! 但是不使用XA也可以连接数据库的时候,把db connect 放到tpsvrinit中,db shutdown 放到tpsvrdone中。也就是在tmboot就连接到数据库上。tmshutdown时候就db disconnect 数据库了。 在.profile中除了INFORMIXDIR,INFORMIXSERVER,PATH,SHLIB_PATH之外,还要写以下内容:CFLAGS="-I$INFORMIXDIR/incl -I$INFORMIXDIR/incl/esql" export CFLAGSLANG=CTUXCONFIGTUXDIR 3. 将TUXEDO/udataobj目录下的RM文件,加入:INFORMIX-DSHC:infx_xa_switch:-L/tuxedo/lib -L${INFORMIXDIR}/lib -L${INFORMIXDIR}/lib/esql -lifxa -lifsql -lifasf -lifgen -lifos -lifgls -lnsl -lm -lsec ${INFORMIXDIR}/lib/esql/checkapi.o -lifglx 4. 在TUXEDO用户下创建TMS文件:TMS_INF,TUXEDO通过TMS_INF与INFORMIX数据库采用XA协议进行通讯buildtms -r INFORMIX-DSHC -o /tuxedo/bin/TMS_INFORMIX 5. 配置 UBBCONFIG1.在*MACHINES节中增加:(若不使用XA接口可以不增加TLOG)TLOGDEVICE = "/usr/tuxedo/simpdb/TLOG"TLOGNAME=TLOGTLOGSIZE=2002. 改*GROUPS节的配置为:*GROUPSGROUP1 LMID=simple GRPNO=1TMSNAME="TMS_INFORMIX" TMSCOUNT=2 OPENINFO="INFORMIX-DSHC:mydb"修改后的配置文件UBBCONFIG内容如下,用tmloadcf -y UBBCONFIG重新生成tuxconfigIPCKEY 123456 ( 可以输入任意的一个序列数)DOMAINID simpappMASTER simpleMAXACCESSERS 100MAXSERVERS 50MAXSERVICES 100MODEL SHMLDBAL N *MACHINESserver LMID=simpleAPPDIR="/usr/tuxedo/simpdb"TUXCONFIG="/usr/tuxedo/simpdb/tuxconfig"TUXDIR="/usr/tuxedo"TLOGDEVICE = "/usr/tuxedo/simpdb/TLOG"TLOGNAME=TLOGTLOGSIZE=100*GROUPSGROUP1 LMID=simple GRPNO=1TMSNAME="TMS_INF" TMSCOUNT=2 OPENINFO="INFORMIX-DSHC:mydb"*SERVERSDEFAULT:CLOPT="-A"test SRVGRP=GROUP1 SRVID=1*SERVICES 6.用TMADMIN创建TLOG文件,TUXEDO用一个文件TLOG记录对数据库操作的日志。用于协调分布式数据库的提交与回滚.(若没有使用XA,可以省略此步骤) D:\>tmadmin>crdl -b 500 -z /usr/tuxedo/simpdb/TLOG>crlog -m simple>q 三、服务端的程序(见demo目录):test.cp 功能:根据客户端传的EMPNO到表EMP中取ENAME的值,并把它返回给客户端#include <atmi.h>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <sybhesql.h>#include <sybtesql.h> EXEC SQL INCLUDE sqlca; EXEC SQL BEGIN DECLARE SECTION;long al_empno=0;char ac_ename[11]=""; EXEC SQL END DECLARE SECTION; TEST(TPSVCINFO *rqst){ /*接收客户端来的数据*/al_empno = (FBFR32 *)rqst->data;EXEC SQL select ename into :ac_ename from EMP where empno=:al_empno;if(sqlca.sqlcode!=0){ userlog("select from EMP failure,sqlca.sqlcode=%ld\n",sqlca.sqlcode);tpreturn( TPFAIL, 0, rqst->data, 0, 0 );}/*把取出的结果返回给客户端*/strcpy(rqst->data,ac_ename);tpreturn( TPSUCCESS, 0, rqst->data, 0, 0 );} 四、编写客户端程序(见Demo目录): testcli.c功能:调用TUXEDO服务端的服务TEST,取EMPNO=420000所对应的ENAME的值,并显示出来#include <stdio.h>#include "atmi.h" main(argc, argv){long reqlen=1024;char *reqbuf; /* 与TUXEDO服务端建立连接 */if (tpinit((TPINIT *) NULL) == -1){(void) fprintf(stderr, "Tpinit failed\n");exit(1);}/* 分配发送缓冲区*/reqbuf = (char *)tpalloc("STRING",NULL,reqlen);if ( reqbuf == (char *)NULL){printf("tpalloc failed\n");tpterm();}strcpy(reqbuf,"1000");/*调用TUXEDO的服务TEST*/if (tpcall("TEST", (char *)reqbuf, 0L, (char **)&reqbuf, (long *)&reqlen, 0< 0 ){printf("tpcall failed,tperrno=%ld,tperrtext=%s\n",tperrno,tpstrerror(tperrno));tpfree(reqbuf);tpterm();exit(1);}printf("name=%s\n",reqbuf);tpfree(reqbuf);tpterm();return(0);} 五、编译服务端程序1.用INFORMIX的esql把test.pc 文件预编译成test.c文件/usr/tuxedo/simpdb/esql -c test.pc -I$INFORMIXDIR/incl/esql 2.用buildserver把test.c编译成可执行文件,注意-r 后带的INFORMIX-DSHC与RM文件中的一致。/usr/tuxedo/simpdb/buildserver -o simpserv -f simpserver.c -r INFORMIX-DSHC -s TEST 六、编译客户端程序/usr/tuxedo/simpdb/buildclient -o testcli -f testcli.c 七、用 tmboot -y 启动TUXEDO,应能看到所有的SERVER都启动成功.这时,我们的服务端程序test 会自动与INFORMIX数据库建立连接,并一直保持这个连接,直到TUXEDO系统或INFORMIX数据库关闭.所以在我们的程序test.cp中看不到与数据库连接的语句,因为现在与数据库的连接由TUXEDO自动管理./usr/tuxedo/simpdb/ tmboot -yexec TMS_INFORMIX -A :process id=1072 ... Started.exec TMS_INFORMIX -A :process id=528 ... Started.exec test -A :process id=876 ... Started. 八、运行客户端程序,应能看到服务端返回的结果/usr/tuxedo/simpdb/ testcliname=bill 到此,整个配置过程就大功告成了.INFORMIX的其他版本的配置及在其他操作系统上的配置基本与本文所述差不多,差别主要在RM文件中所连的库文件可能会不样.使用esql -libs 命令得到应用所需的数据库动态连接库.再加上INFORMIX支持XA的库libinfxxa.a,注意在如果TMS_INF启动不成功,查看ULOG文件,根据ULOG文件的信息进行排错.
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
前两天我崴到脚了,脚肿的很厉害,不过现在消了很多,但是淤青很厉害,怎 ... 我打球脚崴了有10多天了,告诉我怎么帮! 空中大卖场阿玛尼手表是机械表吗 Excel如何才能保留两位小数-Excel真正保留两位小数的方法 论文开题报告和前言的内容是一样的吗 小规模纳税人差额征税的会计处理? 增值税差额征税解析 差额征税的账务处理是怎样的? 大连市内有什么好玩的地方 大连有什么好玩的地方适合年轻人 香港个人账户收海外美金要申报吗 TUXEDO的SERVICE和SERVER对应表 杭州西湖周围有什么不太远又值得看的景点? 红茶包装上注明饮品原料需加工后使用是什么意思? Jolt调用Tuxedo服务,该怎么处理 国泰君安总部的地点在哪里? TUXEDO调服务时,客户端返回tpcall错误:tpforward tpacall failure TPENOENT - no entry found。 香港的证券账户可以买美国的股票吗? 在启动tuxedo时提示错误819 杭州西湖附近有哪些地方好玩的?建议建议。 冰红茶的包装有黄色和红色,两种颜色的味道一样吗? 在香港银行开通证券账户,想买美国指数基金,但在证券账户里搜索不到,是香港证券账户不能购买吗? 如何查看tuxedo日志文件路径 红茶的保质期是多久? 开通国泰君安香港账户可以买美股吗 网络不通或Tuxedo系统服务问题 开通国泰君安香港账户,可以买卖美股吗? 杭州西湖附近有什么好玩的景点? tuxedo进程老死掉,为什么 红茶包装的广告语 杭州西湖旁有什么好玩的地方吗? 香港账户买美股能够购买标普500指数基金么 Tuxedo的Tuxedo是什么 杭州西湖有哪些好玩的 法然堂有没有柠檬茶,有几种?分别有什么区别? 开通国泰君安香港账户,可以买卖美股吗?求大神帮助 台式电脑和笔记本电脑都属于小型计算机?? 杭州西湖那有什么好玩的 康师傅冰红茶 纸盒包装 怎么分辨真假 请问用英语怎么说 Tuxedo的Tuxedo功能介绍 杭州西湖附近有什么好玩的地方? 香港开美金账户需要什么? tuxedo中的工作站客户端与本地客户端 杭州西湖有哪些好玩的? 在香港开个人美金账户合法理由! 请教一个关于TUXEDO的TPESYSTEM错误 杭州西湖好玩的地方有哪些? 404 Not Found