天天看点

Tuxedo的简明配置管理

Tuxedo的配置管理简要说明(转自CU)

 一、Tuxedo基本命令

#1.设置环境变量TUXDIR,APPDIR,TUXCONFIG,LANG(跟OS相关),LD_LIBRARY_PATH(跟OS相关)

#2.编译ubb文本生成二进制配置文件:tmloadcf -y ubbconfig

#3.所有机器上运行tlisten,具体见文档中NETWORK一节

#4.启动tmboot -y 

#5.关闭tmshutdown -y

参数: 

-A 在所有机器上启动/关闭管理的Server进程

-M 只在MASTER机器上启动/关闭管理的Server进程

-i srvid   启动/关闭某个server id指定的Server进程

-g grpname 启动/关闭某个server group名字指定的Server Group

-S 启动/关闭所有应用服务器(LMID)

-s server-name  启动/关闭某个server名字指定的Server进程

-l lmid option 在指定的机器上启动/关闭所有TMS进程和应用服务器(LMID)

-T grpname  启动/关闭指定的server group中所有的TMS进程

-B lmid  在指定的机器上启动/关闭BBL进程

-e command  指定一个程序可以当在MASTER机器上启动任何一个进程失败时执行

-c 计算出当前UBB配置的Tuxedo启动最少要占用的系统IPC资源

#用tmunloadcf > generated.ubb 可以得出目前配置得UBB文件所有得参数值(没有设置的有缺省值)

#用tmloadcf -c或tmboot -c可以计算出当前UBB配置的Tuxedo启动最少要占用的系统IPC资源。

二、UBB文件配置说明

UBB配置文件分成*RESOURCES,*GROUP,*SERVER,*SERVICE,*NETWORK等若干节。DEFAULT表示该节中所有对象共有的缺省属性。

*RESOURCES 

#RESOUCES节提供整个系统的基本参数。

IPCKEY 55555 (32767-262143) 

#进行IPC通讯的key值

DOMAINID unicom  

#DOMAIN的ID值

MASTER unicom1,unicom2

#指定DOMAIN中的管理主机为unicom1,运行过程中unicom1若出现问题,管理主机切换至unicom2

MAXACCESSERS  1000 

#这里该值表示整个系统中每个机器上可以访问TUXEDO的Client和Server的总数(可以访问 BBL的最大进程数),应大于license用户数+server数(副本应记入)。该字段会被MACHINE部分的MAXACCESSERS覆盖。

#系统核心参数中SEMAPHORE的数目(SEMMNS)要大于这里的MAXACCESSERS数目,而ipc消息个数(MSGMAX)应大于MAXACCESSERS数+所有带REPLYQ的SERVER的个数。

MAXSERVERS 80  

#最大的server数(副本应记入)

MAXSERVICES 200 

#最大的service数(多个server重复记入)

MAXGTT 20

#系统最多的并发的全局交易数目

MODEL MP  

#表示cluster方式,否则为SHM

OPTIONS LAN,MIGRATE  

#多机cluster方式时必须指定为LAN方式,MIGRATE表示可以以组为单位进行机器间SERVER的迁移。

LDBAL Y  

#允许负载均衡

SCANUNIT 10

#SCANUNIT 是BBL在所有服务请求中定期扫描以寻找超时的交易和被阻塞德调用和德间隔时间(秒)。这个参数指定BBL扫描间隔时间的基本单位, 它会影响在tpbegin中指定的交易超时时间和用BLOCKTIME指定的请求阻塞超时时间的精确程度。SANITYSCAN, BBLQUERY, DBBLWAIT, BLOCKTIME等参数都是SCANUNIT的倍数,而不是实际秒数。而作为时间单位SCANUNIT必须是5的倍数,并且满足0<SCANUNIT<60。

SANITYSCAN 12

#SANITYSCAN的值指定在每个MACHINE上BBL自动检测所有进程的时间间隔,以SCANUNIT为单元。缺省值满足(SCANUNIT*SANITYSCAN)约为120秒。

DBBLWAIT  2

#DBBLWAIT的值指定DBBL扫描BBL时等待所有BBL应答的最大时间,以SCANUNIT为单元,即超过DBBLWAIT*SCANUNIT(秒)就超时。每一次DBBL将请求转发给它的BBL时,BBL会在请求返回结果之前先回复一个肯定的应答。这样可以定时检测死掉或不正常的BBL。缺省值满足(SCANUNIT*DBBLWAIT)的值等于SCANUNIT和20秒两者之间的最大者。

BBLQUERY 30

#BBLQUERY指定DBBL对所有BBL进行状态检查的时间间隔,它也是以SCANUNIT为计算单位。如果DBBL的状态询问没有回答,该BBL就被‘隔离’了。缺省值满足(SCANUNIT * BBLQUERY) 约为 300秒。

BLOCKTIME 6

#BLOCKTIME指定在阻塞队列中的被阻塞请求的超时时间,以SCANUNIT为计算单位。缺省值满足(SCANUNIT * BLOCKTIME) 约为60秒。

*MACHINES

DEFAULT:

#该部分对各主机进行描述。

unicom2 LMID=unicom2

APPDIR="/usr/tuxedo/apps/simpapp"

TUXCONFIG="/usr/tuxedo/apps/simpapp/tuxconfig"

TUXDIR="/usr/tuxedo"

UID=17

GID=26

MAXACCESSERS=100

unicom1 LMID=unicom1

APPDIR="/usr/tuxedo/apps/simpapp"

TUXCONFIG="/usr/tuxedo/apps/simpapp/tuxconfig"

TUXDIR="/usr/tuxedo"

UID=17

GID=26

MAXWSCLIENTS=50

#unicom2, unicom1为网络主机名用hostname获得。

#LMID:Logical Machines ID 为tuxedo对主机的内部逻辑命名。

#APPDIR要求放置SERVER的可执行文件。

#TUXCONFIG为全路径的二进制配置文件,要求和环境变量TUXCONFIG相同。对于master机tuxconfig文件是由tmloadcf生成的,而非master机则是由tmboot启动后由tlisten从master机上拷贝获得。

#TUXDIR为tuxedo安装目录,要求和环境变量TUXDIR相同。

#MAXWSCLIENTS表示可连接client的最大个数。

*GROUPS

#GROUP1为组名,LMID表示该组运行的主机,GRPNO为组号,OPENINFO为该组通过XA打开RM(通常指数据库)的初始串。

GROUP1 LMID=unicom2 GRPNO=1 OPENINFO=NONE

GROUP2  LMID=unicom3 GRPNO=2 OPENINFO=NONE

*SERVERS

#这里描述应用服务器。SRVGRP的该SERVER所属组名,SRVID为服务器ID号,MIN表示该服务器CLOPT提供运行的相关参数,要求是”-A -- ….”,可以在应用服务器的srvinit函数中获得这些参数。

DEFAULT:

CLOPT="-A"

BillServer  SRVGRP=GROUP1 SRVID=1 MIN=2 MAX=4

RQADDR=QNAME REPLYQ=Y

CLOPT="-A -o ./out.log -r -e ./err.log -- 

-p [L][low_water][,[terminate_time]][:[high_water][,create_time]] 

如果MAX>1,并且使用了MSSQ(RQADDR, RQPERM)的Server可以配置-p来控制进程的增加和减少。控制算法如下:如果请求队列中的请求个数大于high_water 后超过create_time 秒,就增加该服务的一个新进程; 如果请求队列中的请求个数小于low_water 后超过terminate_time 秒, 就停止该服务的一个进程。low_water 缺省是平均每个服务进程有一个请求消息或者workload 50;high_water 缺省是平均每个服务进程有两个请求消息或者workload 100. create_time 缺省是50, and terminate_time 缺省是60。

    注意;使用TUXEDO的服务进程池时,用户自己在程序中如果用alarm()等系统调用来停止进程是不起作用的,但也不会报错。

    [L] 标记意味着增减服务进程基于负载而不是请求队列的长度。仅用于SHM模式下并且LDBAL=Y,否则会报错 (LIBTUX_CAT:1542) ,服务进程也不会增减。 

WSL SRVGRP=GROUP2 SRVID=1

CLOPT="-A -- -n //130.36.0.103:8889 -m 3 -M 10 -x 10 -T 10"

#WSL用于和client端进行连接。-n 表示出接入点为IP:PORT方式,-m -M 表示最小和最大启动多少个WSH和前端通讯,-x则表示一个WSH和几个client端连接。-T 10表示如果client端和server连接后10分钟内没有交易请求则关闭连接。

*SERVICES

#不要求将所有的service在这里描述,当某个service有特别参数时才在SERVICE节中说明。

TOUPPER

*NETWORK

#NETWORK节对多机之间如何进行网络连接进行描述。

#cluster方式下要求先启动tlisten。事实上,对于非master机启动应用服务器是由tlisten完成的。

#tlisten的启动方式为 

#unicom1: tlisten -l //130.36.1.101:8891

#unicom2: tlisten -l //130.36.0.102:8891

#NADDR指定网络连接的接入点。

#NLSADDR则指定tlisten的接入点。

#BRIDGE则指TCP连接所用的设备文件。

unicom2    

NADDR="//130.36.0.102:8899"

NLSADDR="//130.36.0.102:8891"

BRIDGE="/dev/streams/xtiso/tcp"

unicom1

NADDR="//130.36.0.101:8899"

NLSADDR="//130.36.0.101:8891"

BRIDGE="/dev/streams/xtiso/tcp"

三、数据库XA设置

     3.1 ORACLE XA

1.在附件中提供了rm文件,另外建议运行oracle的demo文件获得要连接的所有lib库的名称.然后将这些名称全部写在RM文件中.

2.ubb 文件中 *GROUP节 TMSNAME=TMS_ORA TMSCOUNT=3  OPENINFO="Oracle_XA:Oracle_XA+Acc=P/scott/tiger+SesTM=120+LogDir=.+SqlNet=abcde"

具体在Oracle联机文档Application Development->oracle8 Application Development's

Guild->Oracle XA->Defining the xa_open String中提供了解释

3.在oracle一侧需运行xaview.sql,并且scott用户有操作权限,运行结果会记录trc文件里.(在oracle8.0.5这一步不是必须的)

4.运行 buildtms -o $(TUXDIR)/bin/TMS_ORA -r Oracle_XA

5. 在tpsvrinit()中EXEC SQL CONNECT ...改成 tpopen, tpsrvdone()中EXEC SQL DISCONNECT...改成tpclose(); 实际可拷贝$TUXDIR/apps/bankapp/appinit.c

6.需在ubb文件中MACHINE节指定TLOGDEVICE,TLOGSIZE

例:TLOGDEVICE="/home/usr1/TLOGDEV"

   TLOGSIZE=100

7.建立TLOG文件直接拷贝$TUXDIR/apps/bankapp/crtlog.sh.设定相关的环境变量后运行该shell文件.

8.启动事务用tpbegin(3,0),提交回滚用tpcommit/tpabort.

    3.2 SYBASE XA

1.在RM文件,运行sybase获得要连接的所有lib库的名称.然后将这些名称全部写在RM文件中:Sybase_XA:???????.

2.ubbconfig 文件中 *GROUP节 TMS_NAME=TMS_SYB TMSCOUNT=3  OPENINFO="?????"

具体察看Sybase文当中xa_open String中提供了解释

3.运行 buildtms -o $(TUXDIR)/bin/TMS_SYB -r Sybase_XA

4. 在tpsvrinit()中EXEC SQL CONNECT ...改成 tpopen, tpsrvdone()中EXEC SQL DISCONNECT...改成tpclose(); 实际可查看$TUXDIR/apps/bankapp/appinit.c

5.需在ubb文件中MACHINE节指定TLOGDEVICE,TLOGSIZE

例:TLOGDEVICE="/home/usr1/TLOGDEV"

   TLOGSIZE=100

6.建立TLOG文件直接拷贝$TUXDIR/apps/bankapp/crtlog.sh.设定相关的环境变量后运行该shell文件.

7.启动事务用tpbegin(3,0),提交回滚用tpcommit/tpabort.

    3.3 INFORMIX XA

1.运行esql -lib获得要连接的所有lib库的名称.然后将这些名称全部加到RM文件中INFORMIX-OnLine:infx_xa_switch:${INFORMIXDIR}/lib/esql/libinfxxa.a /usr/informix/lib/esql/libixos.a /usr/informix/lib/esql/libixgen.a /usr/informix/lib/esql/libixsql.a /usr/informix/lib/libixasf.a /usr/informix/lib/esql/libixos.a /usr/informix/lib/esql/libixgen.a /usr/informix/lib/esql/libixgls.a -lnsl_s -lm -lV3 -lcl -lsec /usr/informix/lib/esql/libixglx.a

2.ubbconfig 文件中

 *GROUP节 TMS_NAME=TMS_INFO TMSCOUNT=3  OPENINFO="INFORMIX-OnLine:test_tux"

具体察看Sybase文当中xa_open String中提供了解释

3.运行 buildtms -o $(TUXDIR)/bin/TMS_INFO -r INFORMIX-OnLine

4. 在tpsvrinit()中EXEC SQL CONNECT ...改成 tpopen, tpsrvdone()中EXEC SQL DISCONNECT...改成tpclose(); 实际可查看$TUXDIR/apps/bankapp/appinit.c

5.需在ubb文件中MACHINE节指定TLOGDEVICE,TLOGSIZE

例:TLOGDEVICE="/home/usr1/TLOGDEV"

   TLOGSIZE=100

6.建立TLOG文件直接拷贝$TUXDIR/apps/bankapp/crtlog.sh.设定相关的环境变量后运行该shell文件.

7.启动事务用tpbegin(3,0),提交回滚用tpcommit/tpabort.

四、Tuxedo多机方式配置要点

    tuxedo多机方式配置有两个方面

    4.1启动tlisten

tlisten在tuxedo启动时扮演控制者的角色,在非master机上由tlisten启动bbl和应用服务器,tlisten的启动方法为

tlisten   -l //host:ipport

注意这里的ipport必须和ubb文件中NETWORK域的NLSADDR一致

tlisten必须在所有的机器上启动,启动后才能运行tmboot.建议操作系统启动时就运行tlisten.

    4.2 ubb文件配置

对于多机模式一般就是指单一domain管理的多台机器,所有机器上仅需要一个ubb文件,以下是ubb文件的模板

*RESOURCES

IPCKEY 80952

MAXACCESSERS 40

MAXSERVERS 35

MAXSERVICES 75

MASTER SITE1,SITE2

OPTIONS LAN,MIGRATE

MODEL MP

*MACHINES

<SITE1's uname> LMID=SITE1

TUXDIR="<TUXDIR1>"

APPDIR="<APPDIR1>"

TUXCONFIG="<APPDIR1>/tuxconfig"

TYPE="<machine type1>"

ULOGPFX="<APPDIR1>/ULOG"

<SITE2's uname> LMID=SITE2

TUXDIR="<TUXDIR2>"

APPDIR="<APPDIR2>"

TLOGDEVICE="<APPDIR2>/TLOG"

TLOGNAME=TLOG

TUXCONFIG="<APPDIR2>/tuxconfig"

TYPE="<machine type2>"

ULOGPFX="<APPDIR2>/ULOG"

#

*GROUPS

*NETWORK

SITE1 NADDR="<network address of SITE1>"

BRIDGE="<device of provider1>"

NLSADDR="<network listener address of SITE1>"

SITE2 NADDR="<network address of SITE2>"

BRIDGE="<device of provider2>"

NLSADDR="<network listener address of SITE2>"

*SERVERS

DEFAULT: RESTART=Y MAXGEN=5 REPLYQ=Y CLOPT="-A"

#

*SERVICES

    4.3管理

只能在master机上运行tmadmin进行管理。要获得统计信息在tmadmin中应运行default -m命令。

例如:

tmadmin

>default -m SITE1

>printservice

Windows NT/2000下要注意的问题:

1.由于NT机器上MAXACCESSORS受IPC的限制通常较小,因此建议在MACHINES部分单独设置MAXACCESSORS.

2.在MACHINES部分要单独设置UID=0和GID=0

3.和其他类型的CPU机器互连时,在MACHINES部分一定要指定TYPE.否则将提示tlisten版本不匹配。

TUXEDO在SERVER和CLIENT之间进行数据交换缺省进行数据翻译,但一个domain的server之间缺省不进行数据翻译!

4.tlisten password应该相同.我发现%TUXDIR%/udataobj/tlisten.pw中密码相同的条件应将回车考虑在内.

5.有时LANG环境变量无法改变为C, 可以在 %TUXDIR%/locale创建文件夹 mkdir %LANG%.

6.RM文件使用中发现有效的RM后一定要有回车,否则将报RM不存在.

以下是一个ubb的例子.

*MACHINES

SUN    LMID=SITE1

TYPE="SUN"

MAXACCESSORS=10

#here is NT configuration

NT   LMID=SITE2

UID=0

GID=0

TYPE="NT"

MAXACCESSORS=10

 ---------------------------------

D:/>tmadmin

tmadmin - Copyright (c) 1996-1999 BEA Systems, Inc.

Portions * Copyright 1986-1997 RSA Data Security, Inc.

All Rights Reserved.

Distributed under license by BEA Systems, Inc.

Tuxedo is a registered trademark.

No bulletin board exists. Entering boot mode.

> crdl -b 500 -z d:/test/TLOG

Device created: d:/test/TLOG

> crlog -m simple

TMADMIN_CAT:564: ERROR: TLOGDEVICE must be specified

配置的UBBCONFIG如下:

IPCKEY 123456

DOMAINID simpapp

MASTER simple

MAXACCESSERS 100

MAXSERVERS 50

MAXSERVICES 100

MODEL SHM

LDBAL N

*MACHINES

server LMID=simple

APPDIR="d:/test"

TUXCONFIG="d:/test/tuxconfig"

TUXDIR="E:/tuxedo8.1"

TLOGDEVICE="d:/test/TLOG"

TLOGNAME=TLOG

TLOGSIZE=100

*GROUPS

GROUP1 LMID=simple GRPNO=1

OPENINFO="Oracle_XA:Oracle_XA+Acc=P/scott/tiger+SesTm=600+MaxCur=5+LogDir=."

TMSNAME="TMS_ORA8i" TMSCOUNT=2

*SERVERS

DEFAULT:

CLOPT="-A"

test SRVGRP=GROUP1 SRVID=1

*SERVICES

---------------TUXEDO与ORACLE数据库的互连--------------------

前言

在银行、电信、金融等行业的大型计算机应用系统中,中间件的使用日益普及,中间件已与操作系统、数据库并列为三大基础软件。BEA Tuxedo作为最优秀的中间件产品,在我国的很多行业中广泛使用,本文通过一个简单的例子介绍如何在TUXEDO中访问ORACLE数据库。

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

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

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

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

系统说明

TUXEDO版本:7.1 安装目录 d:/tuxedo71

ORACLE版本:8.1.5 安装目录 d:/ora81

操作系统: win2000

配置的步骤

一、ORACLE的的配置

1.用internal用户(缺省的口令是oracle)进入SQLPLUS

C:/>sqlplus internal/oracle

2.运行ORACLE的安装路径下的/rdbms/admin/xaview.sql

SQL> @d:/ora81/rdbms/admin/xaview.sql

3.授权

SQL>grant select on v$xatrans$ to public with grant option;

SQL>grant select on v$pending_xatrans$ to public with grant option;

4. 用system用户(缺省的口令是manager)连接并授权

SQL>connect system/manager

SQL>grant select any table to public;

二、TUXEDO的配置

1.修改TUXEDO安装路径的udataobj目录下的RM文件,把以Oracle_XA:xaosw:开头的一行用#注释掉,并加入一行:

Oracle_XA;xaosw;d:/ora81/rdbms/xa/oraxa8.lib d:/ora81/precomp/lib/msvc/orasql8.lib

如果是在UNIX环境下,则为:

Oracle_XA:xaosw:-L${ORACLE_HOME}/lib -lclntsh

2. 在TUXEDO用户下创建TMS文件:TMS_ORA8i,TUXEDO通过TMS_ORA8i与ORACLE数据库采用XA协议进行通讯

buildtms -o d:/tuxedo71/bin/TMS_ORA8i -r Oracle_XA

注意:如果TUXEDO 服务端与ORACLE数据库不在同一台服务器上,可能会提示找不到 库文件oraxa8.lib和orasql8.lib,可到ORACLE数据库的服务端相应目录下把这两个文件拷到当前机器ORACLE的客户端下的对应目录下。

3. 配置 UBBCONFIG

(1)在*MACHINES节中增加:

TLOGDEVICE = "/home/oracle/temp/simpdb/TLOG"

TLOGNAME=TLOG

TLOGSIZE=200

(2)改*GROUPS节的配置为:(scott/tiger为本数据库所采用的用户及口令,可根据需要更改)

*GROUPS

GROUP1 LMID=simple GRPNO=1

OPENINFO="Oracle_XA:Oracle_XA+Acc=P/scott/tiger+SesTm=600+MaxCur=5+LogDir=."

TMSNAME="TMS_ORA8i" TMSCOUNT=2

修改后的配置文件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="d:/test"

TUXCONFIG="d:/test/tuxconfig"

TUXDIR="d:/tux71"

TLOGDEVICE = "d:/test/TLOG"

TLOGNAME=TLOG

TLOGSIZE=100

*GROUPS

GROUP1 LMID=simple GRPNO=1

OPENINFO="Oracle_XA:Oracle_XA+Acc=P/scott/tiger+SesTm=600+MaxCur=5+LogDir=."

TMSNAME="TMS_ORA8i" TMSCOUNT=2

*SERVERS

DEFAULT:

CLOPT="-A"

test SRVGRP=GROUP1 SRVID=1

*SERVICES

4.重命名下列文件,因为下列文件名与ORACLE带的文件名有冲突,所以要改名。

(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

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

D:/>tmadmin

>crdl -b 500 -z d:/test/TLOG

>crlog -m simple

>q

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

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

#include <stdio.h>

#include <atmi.h>

#include <userlog.h>

EXEC SQL INCLUDE sqlca;

EXEC SQL BEGIN DECLARE SECTION;

long al_empno=0;

char ac_ename[11]="";

EXEC SQL VAR ac_ename IS STRING(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,sqlcode=%ld, sqlerr=%s/n",sqlca.sqlcode,(char *)sqlca.sqlerrm.sqlerrmc);

strcpy(rqst->data,sqlca.sqlerrm.sqlerrmc);

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的值,并显示出来

#include <stdio.h>

#include "atmi.h" 

main(argc, argv)

{

long reqlen=1024;

char *reqbuf;

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");

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.用ORACLE的PROC把test.pc 文件预编译成test.c文件

d:/test> proc test.pc include=%TUXDIR%/include

2.用buildserver把test.c编译成可执行文件,注意-r 后带的Oracle_XA 与RM文件中的一致。

d:/test> buildserver -o simpserv -f simpserver.c -r Oracle_XA -s TEST

六、编译客户端程序

d:/test> buildclient -o testcli -f testcli.c

七、用 tmboot -y 启动TUXEDO

应能看到所有的SERVER都启动成功。这时,我们的服务端程序test 会自动与ORACLE数据库建立连接,并一直保持这个连接,直到TUXEDO系统或ORACLE数据库关闭。所以在我们的程序test.pc中看不到与数据库连接的语句,因为现在与数据库的连接由TUXEDO自动管理。如果TMS_ORA8i启动失败会在当前目录生成一个*.trc文件,记录失败的原因,同时TUXEDO的ULOG文件中也会有一些错误信息。可参考这些错误信息进行错误分析。

d:/test> tmboot -y

exec TMS_ORA8i-A :

process id=1072 ... Started.

exec TMS_ORA8i-A :

process id=528 ... Started.

exec test -A :

process id=876 ... Started.

八、运行客户端程序

运行后应能看到服务端返回的结果。

d:/test> testcli

name=bill

到此,整个配置过程就大功告成了。ORACLE的其他版本的配置及在其他操作系统上的配置基本与本文所述差不多,差别主要在RM文件中所连的库文件可能会不样。

tmloadcf 1

1. 创建Tuxedo设备文件

   crdl -b 512 -z /home/tuxedo/log/TLOG(借用楼上的)

2. 指定设备文件的所属关系

   crlog -m MASTER

   crdl -b 50 -z /home/amiskl/src/appbin/TLOG

tuxedo/log/TLOG(借用楼上的)

2. 指定设备文件的所属关系

   crlog -m MASTER

tm

crlog -m PROJ_MRS_KL