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="http://130.36.0.102:8899"
NLSADDR="http://130.36.0.102:8891"
BRIDGE="/dev/streams/xtiso/tcp"
unicom1
NADDR="http://130.36.0.101:8899"
NLSADDR="http://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="http://10.128.5.201:6044"
? ? ? ?NLSADDR="http://10.128.5.201:6045"
site2NADDR="http://10.128.5.200:6044"
NLSADDR="http://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文件中所連的庫文件可能會不樣。