Vincent.Chan‘s Blog

常用链接

统计

积分与排名

网站

最新评论

Tuxedo的配置管理简要说明

Tuxedo的配置管理简要说明


Tuxedo的配置管理简要说明1
一、Tuxedo基本命令2
二、UBB文件配置说明3
三、数据库XA设置7
3.1 ORACLE XA7
3.2 SYBASE XA8
3.3 INFORMIX XA8
四、Tuxedo多机方式配置要点9
4.1启动tlisten9
4.2 ubb文件配置9
4.3管理11
五、用JOLT连接Tuxedo和Weblogic11
5.1在Tuxedo上安装、配置JOLT Server11
5.2 配置Weblogic Server 6.x12
5.3 Example setup13
六、TUXEDO动态配置13
6.1  用tmadmin修改配置13
6.2  用tmconfig更改TUXCONFIG(UBBCONFIG)14

一、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进程
-isrvid  启动/关闭某个server id指定的Server进程
-ggrpname启动/关闭某个server group名字指定的Server Group
-S启动/关闭所有应用服务器(LMID)
-sserver-name 启动/关闭某个server名字指定的Server进程
-llmid option 在指定的机器上启动/关闭所有TMS进程和应用服务器(LMID)
-Tgrpname 启动/关闭指定的server group中所有的TMS进程
-Blmid 在指定的机器上启动/关闭BBL进程
-ecommand 指定一个程序可以当在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节提供整个系统的基本参数。

IPCKEY55555 (32767-262143)
#进行IPC通讯的key值
DOMAINIDunicom  
#DOMAIN的ID值
MASTERunicom1,unicom2
#指定DOMAIN中的管理主机为unicom1,运行过程中unicom1若出现问题,管理主机切换至unicom2
MAXACCESSERS  1000
#这里该值表示整个系统中单个机器上可以访问TUXEDO的最多的Client和Server的总数(可以访问 BBL的最大进程数),应大于license用户数+server数(副本应记入)。该字段会被MACHINE部分的MAXACCESSERS覆盖。
#系统核心参数中SEMAPHORE的数目(SEMMNS)要大于这里的MAXACCESSERS数目,而ipc消息个数(MSGMAX)应大于MAXACCESSERS数+所有带REPLYQ的SERVER的个数。
MAXSERVERS80  
#最大的server数(副本应记入)
MAXSERVICES200
#最大的service数(多个server重复记入)
MAXGTT20
#系统最多的并发的全局交易数目
MODELMP  
#表示cluster方式,否则为SHM
OPTIONSLAN,MIGRATE  
#多机cluster方式时必须指定为LAN方式,MIGRATE表示可以以组为单位进行机器间SERVER的迁移。
LDBALY  
#允许负载均衡

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

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

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

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

BLOCKTIME6
#BLOCKTIME指定在阻塞队列中的被阻塞请求的超时时间(包括客户端从tpinit到tpterm的等待时间),以SCANUNIT为计算单位。缺省值满足(SCANUNIT * BLOCKTIME) 约为60秒。

*MACHINES
DEFAULT:
#该部分对各主机进行描述。
unicom2LMID=unicom2
APPDIR="/usr/tuxedo/apps/simpapp"
TUXCONFIG="/usr/tuxedo/apps/simpapp/tuxconfig"
TUXDIR="/usr/tuxedo"
UID=17
GID=26
MAXACCESSERS=100
unicom1LMID=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=unicom2GRPNO=1 OPENINFO=NONE
GROUP2  LMID=unicom3GRPNO=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) ,服务进程也不会增减。

WSLSRVGRP=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
LOAD=60  // 负载,当LDBAL=Y时有用
PRIO=80// 服务在请求队列中的优先级
TRANSTIME=120 // 交易时间
SVCTIMEOUT=600// 服务超时时间

*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"


分类总结

TypeParameters requiring tuning
IdentificationTUXCONFIG, UID, GID, IPCKEY, DOMAINID
ThresholdsMAXACCESSERS, MAXSERVERS, MAXSERVICES, MAXGTT, MAXCONV, MAXBUFSTYPE, MAXWSCLIENTS
Time-outsSCANUNIT, SANITYSCAN, DBBLWAIT, BBLQUERY, BLOCKTIME
AvailabilityMASTER, MIGRATE, RESTART, GRACE, MAXGEN, RCMD
MachineTYPE, CMPLIMIT, NETLOAD, SPINCOUNT, TLOGDEVICE, PERM
NetworkNADDR, NLSADDR
ServersCLOPT, ENVFILE
ServicesLOAD, PRIO, BUFTYPE, SVCTIMEOUT
WorkstationsWSNADDR, WSRPLYMAX

三、数据库XA设置
3.1 ORACLE XA
1.在附件中提供了rm文件,另外建议运行oracle的demo文件获得要连接的所有lib库的名称.然后将这些名称全部写在RM文件中.
如: #Oracle 8i for NT
Oracle_XA;xaosw;%ORACLE_HOME%\RDBMS\XA\ORAXA8.LIB %ORACLE_HOME%\PRECOMP\LIB\MSVC\ORASQL8.LIB %ORACLE_HOME%\PRECOMP\LIB\MSVC\ORASQX8.LIB %ORACLE_HOME%\OCI\LIB\MSVC\OCI.LIB %ORACLE_HOME%\OCI\LIB\MSVC\OCIW32.LIB
#Oracle 8i for Unix
Oracle_XA:xaosw:-L${ORACLE_HOME}/lib -lclntsh

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用sys用户登录sqlplus,
a)运行${ORACLE_HOME}/rdbms/Admin/xaview.sql,
b)grant select on v$xatrans$ to public;
c)grant select on dba_pending_transactions to scott;
d)commit;

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=500

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

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

3.2 SYBASE XA
1.在RM文件,运行sybase获得要连接的所有lib库的名称.然后将这些名称全部写在RM文件中:#Sybase_11 for NT
SYBASE_XA_SERVER;sybase_xa_switch;C:\SYBASE_SERVER\lib\libxasrvlib.lib

2.ubbconfig 文件中的 *GROUP节
TMS_NAME=TMS_SYB TMSCOUNT=3  OPENINFO=" SYBASE_XA_SERVER: -Uuserid1 -Ppassword1 -Nconnection2 -Lxa_log -Tall "
具体察看Sybase文当中xa_open String中提供了解释

3.运行 buildtms -o $(TUXDIR)/bin/TMS_SYB -r SYBASE_XA_SERVER
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=500
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=500
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 //hostip:ipport
1.注意这里的ipport必须和ubb文件中NETWORK域的NLSADDR一致,最好都用IP地址,以避免双方对同一机器名解释出不同的IP地址。
2. tlisten必须在所有的机器上启动,启动后才能运行tmboot.建议操作系统启动时就运行tlisten.
3. 注意各个节点的tlisten都有PASSWORD,存在%APPDIR%\.adm\tlisten.pw文件下,如果那里没有,就读TUXEDO的% TUXDIR%\udataobj\tlisten.pw文件中的内容。各节点的tlisten password要保证绝对一样(包括回车!)。否则会报错:‘Security Violation’。
4.2 ubb文件配置
对于多机模式一般就是指单一domain管理的多台机器,所有机器上仅需要一个ubb文件,以下是ubb文件的模板
*RESOURCES
IPCKEY80952
MAXACCESSERS40
MAXSERVERS35
MAXSERVICES75
MASTERSITE1,SITE2
OPTIONSLAN,MIGRATE    // MIGRATE表示MASTER可以动态迁移
MODELMP// 多机模式
*MACHINES
"PATRICK"LMID="site1"
APPDIR="D:/Bea/tuxedo/samples/atmi/simpapp"
TUXCONFIG="d:/Bea/tuxedo/samples/atmi/simpapp/tuxconfig"
TUXDIR=" d:/Bea /tuxedo"
UID=0
GID=0
TYPE="NT"
MAXWSCLIENTS=5
MAXACCESSERS=40

"test60"LMID="site2"
APPDIR="/bea/tuxedo/samples/atmi/simpapp"
TUXCONFIG="/bea/tuxedo/samples/atmi/simpapp/tuxconfig"
TUXDIR="/bea/tuxedo"
UID=1002
GID=101
TYPE="Sun"
MAXWSCLIENTS=15
MAXACCESSERS=100

*GROUPS
GROUP1 LMID=site1GRPNO=1OPENINFO=NONE
GROUP2 LMID=site2GRPNO=2OPENINFO=NONE

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

WSLSRVGRP=GROUP1 SRVID=20 CLOPT="-A -- -n //10.128.5.201:9009"
WSLSRVGRP=GROUP2 SRVID=10 CLOPT="-A -- -n //10.128.5.200:9009"
simpservSRVGRP=GROUP1 SRVID=3
simpservSRVGRP=GROUP2 SRVID=4

*SERVICES

*NETWORK
site1NADDR="//10.128.5.201:6044"
       NLSADDR="//10.128.5.201:6045"

site2NADDR="//10.128.5.200:6044"
NLSADDR="//10.128.5.200:6045"
#  BRIDGE="/dev/tcp"

4.3管理
只能在master机上运行tmadmin进行管理。要获得统计信息在tmadmin中应运行default –m命令。
$tmadmin
>default –m SITE1
>psr
>bbi

当MASTER主机意外当机时,TUXEDO仍可以正常运行,可以在backup的节点上手工做MASTER的动态迁移,在当前的backup节点上 DBBL充当MASTER。
$tmadmin
>m

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之间缺省不进行数据翻译!
5.有时LANG环境变量无法改变为C, 可以在 %TUXDIR%\locale创建文件夹 mkdir %LANG%.
6.RM文件使用中发现有效的RM后一定要有回车,否则将报RM不存在.


五、用JOLT连接Tuxedo和Weblogic
5.1在Tuxedo上安装、配置JOLT Server
1 – 安装JOLT Server
2 -- set your environment
 set TUXDIR=d:\bea\tuxedo
set JOLTDIR=%TUXDIR%\udataobj\jolt
 set APPDIR=%TUXDIR%\samples\atmi\simpapp
 set PATH=%TUXDIR%\bin;%JOLTDIR%\bin;%APPDIR%;%PATH%
 set NLSPATH=%TUXDIR%\locale\C
 set TUXCONFIG=%APPDIR%\tuxconfig

3 – added in UBBconfig file
JSLSRVGRP=GROUP1 SRVID=6 CLOPT="-A -- -n //10.128.5.112:9001"JREPSVRSRVGRP=GROUP1 SRVID=7 CLOPT="-A -- -W -P d:\Bea\tuxedo\udataobj\jolt\repository\jrepository"JREPSVRSRVGRP=GROUP1 SRVID=8 CLOPT="-A -- -P d:\Bea\tuxedo\udataobj\jolt\repository\jrepository"

5.2 配置Weblogic Server 6.x
1,Download the Jolt client package for WLS from developer.bea.com, unzip it and copy the jar file to %WL_HOME%\lib.  Then add the jar files into your Weblogic domain environment file:
 classpath=%classpath%;%WL_HOME%\lib\jolt.jar;%WL_HOME%\lib\joltweblogic.jar

2,Config Jolt pool manager startup class  in Weblogic
 a,start Weblogic and access the console
 b,create Startup class and Shutdown class
   in console:Deployments->Startup & Shutdown,right click
  select create a new StartUp class...:
     name:demojoltpoolStartup
    classname:bea.jolt.pool.servlet.weblogic.PoolManagerStartUp

3,Create a jolt pool
 in console:Services->Jolt,right click
    Select the panel:Configuration
    in TAB General
    name:demojoltpool
    Minimum Pool Size:1
    Maximum Pool Size:3
    Click the button "Create"
    in TAB address
       Primary Address://hostname:port
       Failover Address://hostname:port
    Click the button "Apply"
    Select Targets:
       in Listbox Available:
        select your server add into the listbox Chosen
    Click the button "Apply"

4. Restart your Weblogic

5.3 Example setup
1.Run %WL_HOME%\config\example\setExampleEnv.cmd,
2.compile the SimpAppServlet by:
javac -d %EX_WEBAPP_CLASSES% SimpAppServlet.java
3.Edit WL_HOME%\config\examples\applications\examplesWebApp\WEB-INF\web.xml
add the servlet description:
 <servlet>    <servlet-name>JoltServlet</servlet-name>    <servlet-class>examples.jolt.servlet.simpapp.SimpAppServlet</servlet-class>  </servlet>  <servlet-mapping><servlet-name>JoltServlet</servlet-name> <url-pattern>/joltservlet</url-pattern>  </servlet-mapping>

4.Edit a html and put it to %WL_HOME%\config\examples\applications\examplesWebApp
内容包含调用JoltServlet
Type some text here and click the Post button:<form name="simpapp" action="joltservlet" method="post"><input type="hidden" name="SVCNAME" value="TOUPPER"><input type="text" name="STRING"></td><input type="submit" value="Post!"></form>

5.Goto %WL_HOME%\config\example, start the examples domain,
6.Access http://localhost:7001/examplesWebApp/jolt.html


六、TUXEDO动态配置
TUXEDO 的动态配置可以通过tmadmin和tmconfig两个命令行工具实现不同级别的配置修改。tmadmin的作用主要是监控TUXEDO的运行,可以修 改服务的参数;而tmconfig功能更强大,可以在线修改当前TUXEDO的系统UBB配置,即通过MIB修改用UBBCONFIG生成的二进制 TUXCONFIG在内存的拷贝。
6.1  用tmadmin修改配置
进入tmadmin后用命令help可以列出所有命令。

6.2  用tmconfig更改TUXCONFIG(UBBCONFIG)
tmconfig工具实际上遍历TUXCONFIG的内容并通过MIB API修改其配置。要正确运行tmconfig,建议设置以下环境变量:
TUXDIR=/usr/tuxedo
TUXCONFIG=/usr/app/tuxconfig
EDITOR=vi

主要的界面如下:

  $ tmconfig
  Section: 1) RESOURCES, 2) MACHINES, 3) GROUPS 4) SERVERS
   5)SERVICES  6) NETWORK 7) ROUTING q) QUIT 9) WSL
   10) NETGROUPS 11) NETMAPS 12) INTERFACES [1]:

  Operation: 1) FIRST 2) NEXT 3) RETRIEVE 4) ADD 5) UPDATE
   6) CLEAR BUFFER 7) QUIT [1]:  4
  Enter editor to add/modify fields [n]?
  Perform operation [y]?


1. 用tmconfig增加新主机

1.进入tmconfig后,选择2)MACHINES项
2.然后可以先选择3)RETRIEVE看看当前的配置,缺省是第一个MACHINE的配置
3.通过选择2)NEXT可以一直向后搜索MACHINE配置,直到空记录为止。
4.选择4)ADD
  Enter editor to add/modify fields [n]? y
5.进入vi编辑状态,可以按照一定格式增加配置。格式为:
MIB域名[tab]值
6.增加MACHINE必须加入以下的域:
oTA_TUXCONFIG
oTA_TUXDIR
oTA_APPDIR
oTA_TLOGDEVICE
oTA_TLOGSIZE
oTA_PMID
oTA_LMID
oTA_TYPE
例:
TA_TUXCONFIG             /usr/apps/bank/tuxconfig
TA_TUXDIR                /usr/tuxroot
TA_APPDIR                /usr/apps/bank
TA_TLOGDEVICE            /usr/apps/bank/TLOG
TA_ULOGPFX               /usr/apps/bank/ULOG
TA_ENVFILE               /usr/apps/bank/ENVFILE
TA_TLOGSIZE              150
TA_PMID                  SERVER109
TA_LMID                  SITE1
TA_TYPE                  Sun
7.存盘退出vi,执行操作即可。  
8.激活新增的MACHINE: 重新选择2)MACHINES –> 5)UPDATE
9.进入vi后查找TA_STATE,将其值从NEW改为ACTIVE
10.存盘退出vi并执行操作。


2. 用tmconfig增加新Server进程

1.进入tmconfig后,选择2)SERVER项
2.可以先选择3)RETRIEVE看看当前的配置,缺省是第一个SERVER的配置
3.通过选择2)NEXT可以一直向后搜索SERVER配置,直到空记录为止。
4.选择4)ADD
Enter editor to add/modify fields [n]? y
5.进入vi编辑状态,可以按照一定格式增加配置。格式为:MIB域名[tab]值
6.增加MACHINE必须加入以下的域:
oTA_SERVERNAME
oTA_SRVGRP  
oTA_SRVID  
例:
TA_SERVERNAME          /usr/apps/bank/teller_server
TA_SRVGRP                GROUP1
TA_SRVID                  15
7.存盘退出vi,执行操作即可。

七、系统核心参数参考
Message Queues Parameters

·MSGMNI: Total Number of Queues (Use this formula: Add  MAXACCESSERS + (No. Servers with Reply Queues) - (No. Servers in MSSQ Set) + (No. MSSQ Sets) + 7) to determine the appropriate value
·MSGMAP: Number of entries in control map used to manage message segments (Not defined in NT). Set to 2 * MSGMNI
·MSGMAX:  Maximum message size in bytes.  Set to the largest message size or 75% of the queue size (whichever is bigger)
·MSGMNB:  This is the queue size itself (64K, 128K, etc.)
·MSGSSZ: Size of a segment in bytes (Not defined in NT). The value of MSGSSZ should be such that a multiple of  MSGSSZ is equal to the size (including the BEA TUXEDO System header) of the most commonly sent message.  Usually set to 16, 32, or 64.
·MSGTQL: Total Number of In-Flight messages in the system at once
·MSGSEG: Number of message segments in the system (Not defined in NT). You need to find out the queue space of your machine and then the following formula applies:  MSGSEG * MSGSSZ = Machine Queue Space Size (note it will swap)
Semaphores Parameters

·SEMMNS: Maximum number of semaphores in the system. The minimum requirement for SEMMNS is MAXACCESSERS - MAXWSCLIENTS + 13 (local clients and all servers)
·SEMMNI:  Maximum number of active semaphore sets.  For small apps,(100 to 500 servers),10 sets are usually sufficient.  For large apps, (>500 servers) 32-64 sets are usually sufficient (do a tmloadcf -c to see which is the best)
·SEMMSL: Maximum number of semaphores per semaphore sets (Not defined in NT).  Use the formula:  SEMMNS = SEMMNI * SEMMSL
·SEMMAP: Size of the control map used to control semaphore sets (Not defined in NT).  Set to SEMMNI
·SEMMNU: Number of undo structures in the system.  Set to SEMMNS
·SEMUME:  Maximum number of undo entries per undo structure (Not defined in NT).  Set to SEMMNS

Shared Memory Parameters

·SHMMAX: Maximum shared memory segment size in bytes. Bulletin Board Size (must be greater than 1,400,000). Largest BB today is approx. 5 MB (this parameter is normally set much higher for the database, so use their rules)
·SHMSEG: Maximum number of segments one process can attach to (for a busy  application you need to set this from 32-64)
·SHMMNI: Maximum number of shared memory identifiers in the system. Normally the default of 100 is acceptable (unless more than 100 entities plan on allocating shared memory)
·SHMMIN: Minimum shared memory segment size in bytes.  MUST be set to 1.

Other Tunables

·ULIMIT: Maximum file size. ULIMIT needs to be large enough so that you can install BEA TUXEDO and build servers. 4 megabytes recommended.
·MAXUP: Maximum number of processes per non-super user. The BEA     TUXEDO system processes--servers and administrative processes—run      with the UID specified in the application's UBBCONFIG file. MAXUP needs      to be large enough to allow all of these processes to run.
·NOFILES:  Maximum number of open files per process. A BEA TUXEDO server requires a minimum of four file descriptors.
·NPROC:  Maximum number of processes (systemwide).
·NREGION:  Number of region table entries to allocate. Most processes have three regions: text, data, and stack. Additional regions are needed for each shared memory segment and shared library (text and data) attached. However, the region table entry for the text of a ``shared text'' program is shared by all processes executing that program. Each shared memory segment attached to one or more processes uses another region table entry.
·NUMTIM: Maximum number of STREAMS modules that can be pushed by the Transport Layer Interface (TLI). A typical default value is 16; you should have it set to at least 256.
·NUMTRW: The number of TLI read/write structures to allocate in kernel data  space. A typical default value is 16; you should have it set to at least 256.


Tuxedo系统平台的调试参数及步骤
1.配置MAXSERVERS、MAXSERVICES两个参数,看是否满足ubbfile文件的配置的服务数和服务参数的个数。Tmadmin——bbs,看里面的参数个数。
2.数据库的可以连接数的大小是否满足ubbfile文件里面同一个数据库连接得servers的数目。参照xa_NULL*.trc文件的错误提示。
3.用命令tmloadcf –c ubbfile看tuxedo的进程所需要的共享内存配置。然后修改系统的共享内存的配置。除了AIX平台外,系统的共享内存参数——set shmsys:shminfo_shmmin要设置为1。
4.Tmunloadcf  看现在运行的TUXEDO环境。
5.Tmadmin——crdl  -b   -z  创建日志文件。
6.TUXEDO环境的设置顺序。Tuxconfig——tmadmin——TLOG;


-- 作者: whiteclude
-- 发布时间: 2002/07/27 05:53pm

TUXEDO与ORACLE数据库的互连

(来源:http://www.ccw.com.cn)

前言
在 银行、电信、金融等行业的大型计算机应用系统中,中间件的使用日益普及,中间件已与操作系统、数据库并列为三大基础软件。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;

/* 与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.用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文件中所连的库文件可能会不样。

posted on 2006-09-04 23:23 Vincent.Chen 阅读(2200) 评论(0)  编辑  收藏 所属分类: BEA


只有注册用户登录后才能发表评论。


网站导航: