tuxedo连接mysql_TUXEDO与INFORMIX数据库的互连

在两层的C/S结构中,客户端直接访问数据库,当采用TUXEDO中间件后,形成三层结构。这时,客户端不直接访问数据库,而是改为调用中间件TUXEDO服务端上的服务,由TUXEDO服务端访问数据库,并把结果返回给客户端

前言:

在两层的C/S结构中,客户端直接访问数据库,当采用TUXEDO中间件后,形成三层结构。这时,客户端不直接访问数据库,而是改为调用中间件TUXEDO服务端上的服务,由TUXEDO服务端访问数据库,并把结果返回给客户端。TUXEDO服务端可以和INformIX在同一台服务器上,也可以在不同的机器上,如果在不同的机器上,在TUXEDO的服务端所在的机器要安装一个INformIX的客户端。

TUXEDO服务端与INformIX数据库连接有两种方式:

1、不通过XA接口直接互连。适用于整个系统只有一个数据库的情况。

2、通过XA接口互连,对整个系统有一个数据库或多个数据库都适用,建议采用,本文介绍这种互连的配置方法。

系统说明:

TUXEDO: 版本TUXEDO6.5(是32位的)安装在HP-UX 11.0 64bit上,安装目录 /usr/tuxedo

TUXEDO的例子: /usr/tuxedo/simpdb

INformIX: 版本INformIX9.21(是64位的)安装在SCO Unix 5.0.5上,目录 /INformIX

数据库名称: mydb

TUXEDO用户名: TUXEDO

注意:TUXEDO系统与INformIX数据库在不同的机器上,所以在TUXEDO系统所在的机器上要安装INformIX数据库的CLIENT端,并且如果TUXEDO系统是32位的,而INformIX数据库的服务端是64是,在TUXEDO系统所在的机器上应安装INformIX数据库的32位的CLIENT端才行。

配置的步骤:

一、INformIX的的配置

1> 数据库一定要以unbuffered log方式创建,create database databasename with log;

INformIX数据库的LOG方式有3种:Buffered,Nobuffer,Unbuffered(under buffer)

用onmonitor命令可查看数据库是否是用unbuffered log方式创建的,log status 那一列为U的是unbuffered log方式。

用ontape -s –L 0 –U databasename;可把一个其他方式创建的数据库改为unbuffered log方式的.

2>tuxedo用户应该有访问该数据库资源的权限。grant dba to tuxedo;

如果TUXEDO用户没有访问该数据库资源的权限,当TUXEDO启动时,TMS启动会失败,在ULOG中会出现类似下面的错误信息:

145053.rs6000!BBL.17510: LIBTUX_CAT:262: INFO: Standard main starting

145053.rs6000!TMS_INformIX.20204: 020602: TUXEDO Version 6.5 AIX 2 4 007025954C00.

145053.rs6000!TMS_INformIX.20204: LIBTUX_CAT:262: INFO: Standard main starting

145054.rs6000!TMS_INformIX.20204: LIBTUX_CAT:466: ERROR: tpopen TPERMERR xa_open returned XAER_RMERR

145054.rs6000!TMS_INformIX.20204: LIBTUX_CAT:250: ERROR: tpsvrinit() failed

145054.rs6000!TMS_INformIX.20204: LIBTUX_CAT:300: ERROR: _tlog_open: _gp_tblopen

145054.rs6000!TMS_INformIX.20204: LIBTUX_CAT:250: ERROR: tpsvrinit() failed

145054.rs6000!TMS_INformIX.20204: LIBTUX_CAT:300: ERROR: _tlog_open: _gp_tblopen: UNIX sys call error - 2

145054.rs6000!tmboot.19178: 020602: TUXEDO Version 6.5 AIX 2 4 007025954C00.

145054.rs6000!tmboot.19178: CMDTUX_CAT:825: ERROR: Process TMS_INformIX at simple failed with /T tperrno (TPERMERR - resource manager error)

二、TUXEDO的配置

1. /usr/tuxedo/simpdb/setenv的内容:

. usr/tuxedo/tux.env

INformIXDIR=/tmp_mnt/informix/hc; export INformIXDIR

INformIXSERVER=dhc; export INformIXSERVER

PATH=$TUXDIR/bin:$INformIXDIR/bin:/bin:/usr/bin:/usr/ccs/bin:.; export PATH

SHLIB_PATH=$SHLIB_PATH:$INformIXDIR/lib:$INformIXDIR/lib/esql:$INformIXDIR/lib

/cli:$INformIXDIR/lib/c++

:$INformIXDIR/lib/client:$INformIXDIR/lib/dmi:/usr/lib:/usr/lib/Motif1.2

INCLUDE=$INformIXDIR/incl/esql:$INformIXDIR/incl:/tuxedo/include:/usr/include; export INCLUDE

CFLAGS="-I$INformIXDIR/incl -I$INformIXDIR/incl/esql" export CFLAGS

2.重命名下列文件,因为下列文件名与INformIX中的文件名有冲突,所以要改名。

1.TUXEDO安装路径include目录下的下面文件

把sqlca.h 改名为 sqlca.h.bbb

把sqlcode.h 改名为 sqlcode.h.bbb

把sqlda.h 改名为 sqlda.h.bbb

2.重命名TUXEDO安装路径lib目录下的下面文件

把libsql.lib 改名为 libsql.lib.bbb

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_INformIX,TUXEDO通过TMS_INformIX与INformIX数据库采用XA协议进行通讯

buildtms -r INformIX-DSHC -o /tuxedo/bin/TMS_INformIX

5. 配置 UBBCONFIG

1. 在*MACHINES节中增加:

TLOGDEVICE = "/usr/tuxedo/simpdb/TLOG"

TLOGNAME=TLOG

TLOGSIZE=200

2. 改*GROUPS节的配置为:

*GROUPS

GROUP1 LMID=simple GRPNO=1

TMSNAME="TMS_INformIX" TMSCOUNT=2

OPENINFO="INformIX-DSHC:mydb"

修改后的配置文件ubb内容如下,用tmloadcf -y ubb重新生成tuxconfig

IPCKEY 123456

DOMAINID simpapp

MASTER simple

MAXACCESSERS 100

MAXSERVERS 50

MAXSERVICES 100

MODEL SHM

LDBAL N

*MACHINES

server LMID=simple

APPDIR="/usr/tuxedo/simpdb"

TUXCONFIG="/usr/tuxedo/simpdb/tuxconfig"

TUXDIR="/usr/tuxedo"

TLOGDEVICE = "/usr/tuxedo/simpdb/TLOG"

TLOGNAME=TLOG

TLOGSIZE=100

*GROUPS

GROUP1 LMID=simple GRPNO=1

TMSNAME="TMS_INformIX" TMSCOUNT=2

OPENINFO="INformIX-DSHC:mydb"

*SERVERS

DEFAULT:

CLOPT="-A"

test SRVGRP=GROUP1 SRVID=1

*SERVICES

6.用TMADMIN创建TLOG文件,TUXEDO用一个文件TLOG记录对数据库操作的日志。用于协调分布式数据库的提交与回滚.

D:>tmadmin

>crdl -b 500 -z /usr/tuxedo/simpdb/TLOG

>crlog -m simple

>q

三、服务端的程序:test.cp

功能:根据客户端传的EMPNO到表EMP中取ENAME的值,并把它返回给客户端

#i nclude

#i nclude

#i nclude

#i nclude

#i nclude

#i nclude

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=%ldn",sqlca.sqlcode);

tpreturn( TPFAIL, 0, rqst->data, 0, 0 );

}

/*把取出的结果返回给客户端*/

strcpy(rqst->data,ac_ename);

tpreturn( TPSUCCESS, 0, rqst->data, 0, 0 );

}

四、编写客户端程序: testcli.c

功能:调用TUXEDO服务端的服务TEST,取EMPNO=1000所对应的ENAME的值,并显示出来

#i nclude

#i nclude "atmi.h"

main(argc, argv)

{

long reqlen=1024;

char *reqbuf;

/* 与TUXEDO服务端建立连接 */

if (tpinit((TPINIT *) NULL) == -1)

{

(void) fprintf(stderr, "Tpinit failedn");

exit(1);

}

/* 分配发送缓冲区*/

reqbuf = (char *)tpalloc("STRING",NULL,reqlen);

if ( reqbuf == (char *)NULL)

{

printf("tpalloc failedn");

tpterm();

}

strcpy(reqbuf,"1000");

/*调用TUXEDO的服务TEST*/

if (tpcall("TEST", (char *)reqbuf, 0L, (char **)&reqbuf, (long *)&reqlen, 0< 0 )

{

printf("tpcall failed,tperrno=%ld,tperrtext=%sn",tperrno,tpstrerror(tperrno));

tpfree(reqbuf);

tpterm();

exit(1);

}

printf("name=%sn",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 -y

exec 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/ testcli

name=bill

到此,整个配置过程就大功告成了.INformIX的其他版本的配置及在其他操作系统上的配置基本与本文所述差不多,差别主要在RM文件中所连的库文件可能会不样.使用esql -libs 命令得到应用所需的数据库动态连接库.再加上INformIX支持XA的库libinfxxa.a,注意在INformIX9.13之后,libinfxxa.a 的名字变了,不支持多线程的为libifxa.a,支持多线程的为libthxa.a。

如在环境为:AIX 4.3.3, Tuxedo7.1, Informix Dynamic Server 9.21, Esql/C 9.51 中RM为:

INformIX-ONLINE:infx_xa_switch:${INformIXDIR}/lib/esql/libifxa.a -L${INformIXDIR}/lib -L${INformIXDIR}/lib/esql -lifsql -lifasf -lifgen -lifos -lifgls -lnetstub -lc_r -ldl -ltli_r -lm_r ${INformIXDIR}/lib/esql/checkapi.o -lifglx

在环境为:AIX 4.3.3, Tuxedo6.5, Informix7.3中RM为:

INformIX-OnLine:infx_xa_switch:${INformIXDIR}/lib/esql/libinfxxa.a -L${INformIXDIR}/lib -L${INformIXDIR}/lib/esql -lixsqlshr -lixasfshr -lixgenshr -lixosshr -lixglsshr ${INformIXDIR}/lib/esql/checkapi.o -lixglx

如果TMS_INformIX启动不成功,查看ULOG文件,根据ULOG文件的信息进行排错.

作者:徐春金    转贴自:http://www.91talk.net

发表评论

标题(可选)

内容*

smiles-tongue.gif

smiles-biggrin.gif

smiles-cool.gif

smiles-smile.gif

smiles-sad.gif

smiles-wink.gif

smiles-happy.gif

smiles-sleep.gif

smiles-no.gif

smiles-huh.gif

smiles-yes.gif

smiles-cry.gif

smiles-laugh.gif

smiles-lol.gif

smiles-1eye.gif

smiles-down.gif

smiles-schmoll.gif

smiles-sick.gif

smiles-thumbsup.gif

smiles-wacko.gif

smiles-blush.gif

smiles-mad.gif

smiles-blink.gif

smiles-music.gif

smiles-unsure.gif

smiles-rolleyes.gif

smiles-dry.gif

smiles-notworthy.gif

smiles-thumbdown.gif

smiles-cold.gif

smiles-wallbash.gif

smiles-smoke.gif

smiles-cheers.gif

smiles-tooth.gif

smiles-sleep1.gif

验证码*

&nbspindex.php?op=AuthImageShow

称呼*

邮箱地址(可选)

个人主页(可选)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值