在两层的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

发表评论

标题(可选)

内容*

验证码*

&nbsp

称呼*

邮箱地址(可选)

个人主页(可选)

tuxedo连接mysql_TUXEDO与INFORMIX数据库的互连相关推荐

  1. Java 程序连接 Informix 数据库方法实例介绍

    Java 程序连接 Informix 数据库方法实例介绍 Informix 是一种应用广泛的关系型数据库服务器,支持多种类型的客户端连接程序,包括 .Net.Java.PHP 等.对于 Java 程序 ...

  2. tuxedo连接mysql_9.5.3 Tuxedo与各种数据库的连接

    9.5.3  Tuxedo与各种数据库的连接 Tuxedo可以和所有的有标准XA接口的RM连接,目前几乎所有的关系型数据库和消息队列产品都支持标准的XA接口.Tuxedo和各种数据库相连,都需要配置一 ...

  3. java连接informix数据库

    前言 业务中需要连接informix数据库,没连接过,写篇博客记录下连接方法 1.application.yml server:port: 8081 spring:http:multipart:ena ...

  4. mac 黑窗口连接mysql_python操作mysql数据库

    python操作mysql数据库 Python 标准数据库接口为 Python DB-API,Python DB-API为开发人员提供了数据库应用编程接口. Python 数据库接口支持非常多的数据库 ...

  5. 为informix数据库中的表创建同义词

    事件描述: Informix数据库服务器dbserver有数据库db_a和数据库db_b,db_a是用户a创建的,db_b是用户b创建的, 由于使用db_a数据库的程序需要读取db_b数据库中的表,在 ...

  6. informix数据库 java 增删改查

    JDBC的任务:   1.同一个数据库建立连接:   2.向数据库发送SQL语句: 3.处理数据库返回的结果. JDBC基本工作步骤: Import the necessary classes Loa ...

  7. Informix数据库优化

    Informix 数据库系统字典表简介 nformix 数据库服务器运行时的状态信息是数据库管理员 DBA 进行系统监控和优化的必需信息来源.Informix 的状态信息在内部以 2 种方式存在,如图 ...

  8. informix报错244_AIX安装informix数据库

    前几天,项目组使用的数据库的空间分配出现了交叉的情况,无法恢复,只能重装数据库..在陈邦振的蛊惑下,熬了一个通宵,终于安装完成,并从开发走向了系统集成的不归路.本文主要说了一些基本的DBA知识. 1. ...

  9. 用户信息检索另一台服务器,客户机上一用户访问另一台机器上的informix数据库...

    客户机上一用户访问另一台机器上的informix数据库[@more@] ip=126 : informix 数据库服务器(INFORMIXSERVER 为 primary_ins1) ip=64 : ...

最新文章

  1. varnish详解3
  2. Zuul指定Path+url以及指定可用的服务节点时如何负载均衡
  3. 阿里云参加ONS EU 2018,飞天洛神亮相网络顶会
  4. ConcurrentProgramming:ThreadLocal(jdk8)
  5. 对于IDEA 导入eclipse项目后 没有办法启动部署 以及javax.servlet.http不存在
  6. ERROR: Could not find a version that satisfies the requirement absl (from versions: none) ERROR: No
  7. .NET 2.0中的企业库异常处理块
  8. python代码库-这7个开源的Python库,让你轻松代码分析
  9. opencv实现摄像头的实时人脸识别
  10. 计算机cpu型号有,Intel九代CPU型号都有哪些?盘点目前已知的Intel处理器型号大全...
  11. java 3的倍数_java,编写一个从1循环到150并在每行打印一个值,另外在每个3的倍数行上打印出foo,在每个5的倍数行上打印biz,在每个7的倍数上打印baz....
  12. android触摸 apk,超级触控(流畅触屏)apk
  13. 相机模型-鱼眼模型/Omnidirectional Camera(1)
  14. linux下配置mysql_linux下安装mysql
  15. 凉凉!写了个脚本,不小时锁了1W台手机。。
  16. python数据结构之线性顺序表
  17. vscode配置并运行swift
  18. 微信内置浏览器清除 cookie
  19. 第一本Docker书pdf
  20. Carrot保卫萝卜

热门文章

  1. mathtype的快捷键
  2. 最短路计数(spfa)
  3. abb变频器如何就地增加频率_abb变频器报接地故障如何处理,故障原因分析
  4. python保存csv_python怎样保存csv文件
  5. 服务器2003添加共享文档权限,Windows2003使用命令行设置共享权限与安全权限心得...
  6. thinkphp memcache mysql_thinkphp中memcache的用法实例
  7. 麒麟970怎么升级鸿蒙系统,华为这些手机无法升级鸿蒙系统,搭载麒麟970,只能遗憾错过...
  8. 使用netstat命令查看端口的使用情况
  9. Rhythmk 学习 Hibernate 08 - Hibernate annotation 关联关系注解
  10. python基础 ---- 使用pyCharm 调试