Google

Saturday, September 18, 2004

[COMMON]Basic concepts

有这么几个概念以及它们之间的关系:

GROUP:一个组中可以有多个server
SERVER:一个server中可以有多个service

从上向下看:可以理解成tuxedo通过对组的部署,管理所有的server及service

从资源管理(RM)的角度看:GROUP中的信息(如:要连接的数据库信息)被组中的所有server共享。

从 管理维护的角度看:server与service的关系。一个service对应一个server是最简单的方式,但这会增加server的数量,也就是 进程数,使tuxedo系统对系统的IPC资源要求增大,导致系统性能下降;或超过系统限制(UNIX:maxfiles,maxfiles_lim), 导致tuxedo系统无法启动成功。所以需要把多个service放到一个server中,以降低tuxedo对系统IPC资源的要求。当把一些 service放到一起时,有这么几个原则:
1.有相互调用的service不要放到一个server中,以免引起死锁现象。
2.执行时间相近的service可以放到一个server中。
3.同一个server中的service最好有相同的服务优先级。如果不同,优先级最低的请求可能要很长时间才得到处理。
4.一个server中不要有太多的service。
5.把资源要求相近的service放到同一个server中。
6.可根据业务规则把service放到同一个server中。
7.把一些使用率较高的service应单独放在一个server中,并采用MSSQ方式。

Friday, September 17, 2004

关于统计TUXEDO APPLICATION的并发连接数-小结

关于tuxedo时间控制相关参数的整理与大家分享

tuxedo中关于超时的参数较多,现收集整理了下相关文档与大家分享

SCANUNIT

BBL 系统进程对Bulletin Board的管理和监控是基于时间片的轮询方式,时间片的大小就是SCANUNIT的值,SCANUNIT是Tuxedo对系统进行管理的最基本时间单 位,其他许多时间方面的参数均是SCANUNIT的倍数。每隔SCANUNIT,BBL对Bulletin Board进行一次检查,看看有无超时的事务或服务请求。SCANUNIT必须是大于0的5的倍数,最大是60,缺省10,单位为秒。

BLOCKTIME

服 务请求的超时值,BBL发现有超时的Request时,会给相应的Client端发信息,Client端如果在调用时未加TPNOTIME标记,会报错返 回,tperrno值为13。由于BLOCKTIME是以SCANUNIT为单位的,所以时间的绝对值为(BLOCKTIME * SCANUNIT),BLOCKTIME缺省为(60/SCANUNIT)。

SANITYSCAN

健全性检查扫描,健 全性检查主要检查Server进程状态和Bulletin Board数据结构, BBL检查Server进程是否存活,如果已经不存在,会清理Bulletin Board中相应的数据项及IPC资源,并根据参数配置决定是否重新启动,如果设了RESTART=Y,所占的Message Queue不会被清,Queue中的Request得到保留,仍会被处理。如果是MP模式,BBL还会给DBBL发状态消息。
SANITYSCAN缺省为(120/SCANUNIT)。

BBLQUERY

BBL 检查,在MP模式下,DBBL会每隔一段时间检查是否所有的BBL都发了" I am ok "心跳信息给自己,如果没有收到某个BBL的信息,它会发Request给那个BBL,如果等了DBBLWAIT后仍然没有回复,DBBL会认为那台机器 有问题,将其partition。BBL QUERY缺省为(300/SCANUNIT),DBBLWAIT缺省为(20/SCANUNIT)。BBLQUERY必须大于等于 SANITYSCAN,tmloadcf 时会强制检查,如果设的值小于SANITYSCAN,tmloadcf会自动调整为SANITYSCAN。


其它和时间相关的参数还有:

WSL [-I init-timeout]
WorkStation Client和后台建立连接的超时参数值,缺省60秒

WSL [-T Client-timeout]
WorkStation Client和WSH建立连接后,如果在指定的时间内没有信息交互,WSH会自动释放和这个Client端的连接,并将此Client在Bulletin Board中的数据项请空,RollBack它未完成的事务 。


WSL [-N network-timeout]
此值实际上是WorkStation Client在做receive时的超时值,如果发生超时,此操作会出错,WorkStation Client会断开和后台的连接。

SERVICES中的SVCTIMEOUT
如果SERVICE执行时间超过SVCTIMEOUT,BBL会自动将此Server进程Kill掉。

SERVICES中的TRANTIME
如果此SERVICE设置了AUTOTRAN=Y,则此值为事务超时值,超时后Transaction
Manager会自动RollBack此transaction。

Thursday, September 16, 2004

Welcome and Purpose of this blog.

The mission of this webblog is simple:

  • help me to well organize the knowledge learned day by day
  • meanwhile to share with those working with working with CSG in telecom billing system Kenan/Arbor's middleware --- Tuxedo.

Of course, the baisc aim is to make job leisurer.

Tuesday, September 14, 2004

[TESTING]What is Stress Testing


压 测测试主要是看并发请求量很大的情况下检验系统的稳定性和可用性,并得到不同压力时的响应时间等数据.当然有专业的测试软件,比如Load Runner等.其实也可以自己去做,比如写一个客户端程序,在里面开指定数目的进程,每个进程去调用服务,就达到了模拟多客户端的目的.

[PROBLEM] How to change file permissions on ULOG file??

Q:
Hi

I'm trying to change the file permissions on the ULOG file. By default it's being created with rw-rw-rw- permissions, and so any user can overwrite it.

I'm using Tuxedo 8.0 on HP-UX.

I've tried umask and that doesn't work. Nor does the PERM setting in the ubb file - looks like that is only for IPC structures.

I want it to be created with rw-r--r-- permissions so that only the tux administrator has write access.

Thanks in advance.



A: We also encouter this problem. Seems like hard code. As it doesn't related to umask.
As workaround solution, you may want to set ULOGPFX inside UBBCONFIG file, and proteck the directry with access mode 700.

[PROBLEM] "tmshutdown -y -s servername" can't stop service

tmshutdown -y -s servername

tmshutdown -y -s servername 有时会出现不能停下服务,一直停在那里等待。
但是这个server也是死掉了(客户端调用,会返回 tperrorno=6),如何强制停下该服务?我现在的操作系统是win2k,tuxedo server6.5。系统重新启动肯定是可用的,但不能这样,有很多应用在跑。

1. tmshutdown -s servername -k KILL
2. tmadmin进去,用bbc命令,再不行就pcl

使用ipcs查看IPC资源,使用ipcrm清除掉该进程占用的IPC资源。

LQ:Please not that If the application is running in SHM mode, then you should not execute the "tmadmin pclean" command. This command should be used in MP mode to remove from the
Bulletin Board information about partitioned (or failed) machines.
Otherwise , will encounter "TUXADMIN_CAT
165 ERROR: Should not pclean the current machine."


[MANAGEMENT] Problem Solving

几天不来了,这里还是这么热闹,看到越来越多的人不断的加入tuxedo的行列,想说点自己的体会:
1、首先我个人认为tuxedo不难学,而且功能非常强大,如果想实现一个功能最好的方法就是自己动手做一个简单的Demo,这样自己才会有很深的切身体会,实践是检验真理的唯一标准,光说不练没用^_^。
2、遇到问题我觉得四个字很重要:沉着冷静
a)看看错误的提示和ULOG中的提示信息等看能否解决问题
b)查查PDF文档的相关内容,其实PDF文档里面基本的应用都说得很详细的,可能因为是英文,很多人就懒得去看,有时候你会发现英文文档反而把很多问题解释得更清楚。
b)论坛搜索,一些常见的问题你碰到了,想想别人在开始的时候肯定不可避免的也会遇到,搜索一下我想大多数时候你都会有意外惊喜的^_^
c)可以到论坛上来大家一起讨论,wsywin和qiupeng两位斑竹我觉得还是很耐心的,我也是新手,但感觉有这样一个环境大家一起交流自己提高还是很快。现在俺已经被公司安排成了.net的一员,还是比较怀念这个论坛的^_^
3、老板来了,我溜,呵呵,待各位续!

一点感慨,各位见笑。
此文被HappyWin在2003/06/03 20:14:12修改!

[SAMPLE] Using XA to connect to 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
#include
#include

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 fai

[COMMON] tpinit error

Q:总是tpinit出错,有什么需要特别注意的吗

A: zongyn,你说的没有问题,封装是可以的。你说的tpinit出错,应该跟配置有关系。你把ulog信息发上来,看后就知道错误在哪里?
一般tpinit错误,在于网络不通,另外就是你的client程序是否是WS方式编译的,如果是必须使用buildclient参数-w参数,另外设置WSNADDR环境变量。

你还是把ulog信息发上来看看。一般是不能连接WSH等信息。

Return Values Upon failure, tpinit() leaves the calling process in its original context, returns -1,
and sets tperrno to indicate the error condition. Also, tpurcode() is set to the value
returned by the AUTHSVR(5) server.
Errors Upon failure, tpinit() sets tperrno to one of the following values:
[TPEINVAL]
Invalid arguments were specified. tpinfo is non-NULL and does not point
to a typed buffer of type TPINIT.
[TPENOENT]
The client cannot join the application because of space limitations.
[TPEPERM]
The client cannot join the application because it does not have permission to
do so or because it has not supplied the correct application password.
Permission may be denied based on an invalid application password, failure
to pass application-specific authentication, or use of restricted names.
tpurcode() may be set by an application-specific authentication server to
explain why the client cannot join the application.
[TPEPROTO]
tpinit() has been called improperly. For example: (a) the caller is a server;
(b) the TPMULTICONTEXTS flag has been specified in single-context mode; or
(c) the TPMULTICONTEXTS flag has not been specified in multicontext mode.
[TPESYSTEM]
A BEA Tuxedo system error has occurred. The exact nature of the error is
written to a log file.
[TPEOS]
An operating system error has occurred.

[COMMON] How to check version and License info

User tmamdin -v

C:\>tmadmin -v
INFO: TUXEDO(r) System Release 6.5
INFO: Serial #: 1000044115, Expiration NONE, Maxusers 5
INFO: Licensed to: XXX company

[COMMON] Config WSL for server load balancing

Q:我想问的 是,如果我的Tuxedo Server端想做load balance的话,有多台机器做Server端,那么对应的Client端不是要配置WSLADDR,这个WSLADDR就是对应的Server的地址 啊,那我如何去配置啊,如果增加了一台Tuxedo服务器,那我还要改那个client端的程序吗?

A:你可以在WSNADDR配置多个地址,第一个不好使,自动找下一个地址。例如:
WSNADDR=//IP1:port1;IP2:port2;IP3:port3。或者你多几个配置IP的WSNADDR的配置文件小节(section),那么通过程序来控制读第一个ip是否失败。


WSL SRVGRP=GP_COMMON SRVID=1 CLOPT="-A -t -- -n//10.1.2.69:8888 -m3 -M20 -x5"
CLOP中参数的含义
-A :option requests that the WSL offer all its services when it is booted. tuxedo启动时开放所有的service
-t :The amount of time to allow for a client to connect to the WSH tuxedo允许一个client连接的时间多长,指连接的动作,不是连接后的持续时间,如果你用tuxedo6.5的client去连tuxedo7, 则必须要写此参数(自己总结的)
-- :The double-dash (--) marks the beginning of a list of parameters that is passed to the WSL after it has been booted. 表示服务器起来之后的参数,其总的值与UBB中的参数有约束。
-n//10.1.2.69:8888 :The network address used by WSCs to contact the listener. The WSC must set the appropriate environment variable (WSNADDR) to the value specified after -n. 网络连接参数,客户端可以按照这个设置。
-m : The minimum number of handlers that should be booted and always available. The default is 0. 服务器起来之后的最小常连接
-M : The maximum number of handlers that can be booted. The default is the value of MAXWSCLIENTS for the machine being configured, divided by the multiplexing value (specified with -x).最大常连接,默认值是UBB中的MAXWSCLIENTS的数量。
-x : The maximum number of clients that a WSH can multiplex at one time. The value must be greater than 0. The default is 10.服务器一次处理的最大客户端数量,必须大于0,默认值是10。

[COMMON-SUN] Solaris 8 WSL error

210455.tuxedo!TMS_ORA9i.2819: LIBTUX_CAT:262: INFO: Standard main starting
210455.tuxedo!WSL.2822: 061203: TUXEDO Version 6.5 SunOS 5.5.1 Generic sun4u sparc SUNW,Ultra-1.
210455.tuxedo!WSL.2822: LIBTUX_CAT:262: INFO: Standard main starting
210455.tuxedo!WSL.2822: WSNAT_CAT:1008: ERROR: Could not establish listening address on network //10
.21.10.223:3050
210455.tuxedo!WSL.2822: LIBTUX_CAT:250: ERROR: tpsvrinit() failed
210455.tuxedo!tmboot.2814: 061203: TUXEDO Version 6.5 SunOS 5.5.1 Generic sun4u sparc SUNW,Ultra-1.
210455.tuxedo!tmboot.2814: CMDTUX_CAT:825: ERROR: Process WSL at simple failed with /T tperrno (TPES
YSTEM - internal system error)
210455.tuxedo!test.2823: 061203: TUXEDO Version 6.5 SunOS 5.5.1 Generic sun4u sparc SUNW,Ultra-1.
210455.tuxedo!test.2823: LIBTUX_CAT:262: INFO: Standard main starting
210455.tuxedo!test.2823: LIBTUX_CAT:525: INFO: Default tpsvrinit() function used
210455.tuxedo!insert.2826: 061203: TUXEDO Version 6.5 SunOS 5.5.1 Generic sun4u sparc SUNW,Ultra-1.
210455.tuxedo!insert.2826: LIBTUX_CAT:262: INFO: Standard main starting
210455.tuxedo!insert.2826: Welcome to the simple server
210455.tuxedo!query.2829: 061203: TUXEDO Version 6.5 SunOS 5.5.1 Generic sun4u sparc SUNW,Ultra-1.
210455.tuxedo!query.2829: LIBTUX_CAT:262: INFO: Standard main starting
210455.tuxedo!query.2829: Welcome to the simple server


你看看bea的错误分析和解决:
WSNAT-1008 ERROR: Could not establish listening address on network string

Description
This error occurs if the WSH or the WSL cannot advertise its listening address on the network. This could happen for one of the following conditions.
WSH或者WSL不能在网络上发布监听地址产生的错误,下列条件之一产生的。

The format of the address supplied to the WSL is incorrect. If the address format is incorrect, the network provider will be unable to advertise the address and the request fails.
原因1.WSL支持的地址格式不正确,如果地址格式不正确,网络提供者将不能发布这个地址,所以请求失败。
------------------------------
The address used in the -n command line option to the WSL is already in use by another process. For TCP/IP, this can be verified by using the netstat command.
原因2:WSL在-n命令行使用的地址已经被其他进程使用了。对于TCP/IP,这个地址能够使用netstat命令验证。
------------------------------
The system has run out of network addresses for the WSH. The WSH requests a new address from the system. If there are no addresses available, the request is rejected.
原因3:系统使用的WSH的网络地址越界了。从系统中让WSH请求新的地址,如果没有地址可以使用,请求将被拒绝。
A previously used address has not completed the close sequence. This occurs if the WSL or WSH was killed in an abortive manner such as kill -9. Some transports (among them, TCP/IP) keep the connection open for an "implementation dependent" time to flush the existing data on the buffered network connection.
原因4:以前使用的地址没有被完全关闭。如果 WSL或者WSH被以非正常的方式杀掉这个错误就发生了,例如:kill -9。一些transports为了实现独立的时间保持连接打开在网络连接buffer中而清空已经存在的数据
Action
To correct the problem, match one of the following solutions with the problem descriptions above:


Check that the address format is correct. For TCP/IP, the format is 0x0002ppppaaaaaaaa. This is a hexadecimal representation of the TCP/IP address, where pppp is a unique port number and aaaaaaaa is the IP dotted number in the /etc/hosts file for the machine on which the WSL will run.
检查地址的格式是否正确。............

See if other processes are using the requested network address. For TCP/IP, use the netstat command and, if the address is already in use, select a different address.
看其他的进程是否使用了请求的网络地址。。。。。。。。。。。
If the system is out of network addresses, check with the system administrator to increase the number of addresses to use.
如果系统用尽了网络地址,系统管理员检查,增加网络的端口号来使用。

If the connection is not closed yet, wait a few minutes and try again.
如果这个连接没有关闭,等一段时间重新试。

has not completed the close sequence. This occurs if the WSL or WSH was killed in an abortive manner such as kill -9. Some transports (among them, TCP/IP) keep the connection open for an "implementation dependent" time to flush the existing data on the buffered network connection.
原因4:以前使用的地址没有被完全关闭。如果 WSL或者WSH被以非正常的方式杀掉这个错误就发生了,例如:kill -9。一些transports为了


tuxedo 6.5 for solaris8安装后,如果使用WSL启动有问题,需要打补丁。错误信息类似如下:
180259.wsy!WSL.29856: WSNAT_CAT:1008: ERROR: Could not establish listening address on network //192.168.0.101:8850
180259.mach!WSL.29856: LIBTUX_CAT:250: ERROR: tpsvrinit() failed

因为Solaris 8, 默认的IP是 IP v6.tuxedo 6.5需要增加一个flag运行在IP version 6. 这个标志的增加需要打patch了。

[COMMON] Concep of Servie&Server

最近我开始作有关Tuxedo的开发,感觉这个问题非常重要,那位能给我提供一点线索.谢谢了
server是一些你写的应用,比如你的服务端可执行程序,service是可执行程序里所包含的一种服务,也就是一个函数。

我觉得service就是所谓的商业逻辑

其实简单点理解:SERVER就是集成了几个SERVICE的可执行程序。就好象一个服务器上可以安装多个应用服务一样。SERVICE是商业逻辑层面的

前面几位说的是对的.从客户端的角度,他们只用知道SERVICE name和参数就可以了,不必关心是放在哪个server里面.但是从服务端的角度两个都要关心,因为server是你的程序,你要编辑,编译,运行它, 这个在运行的时候是一个进程,很多TUXEDO的管理是基于这个的;SERVICE是具体的服务,你要关心它的处理流程和输入输出的数据.当然细说起来还 有很多,有了大致的概念后就可以自己去理解了.在UNIX下面,这里主要是用到进程的概念了.

server是一个进程,它接收client或其他server的请求和对它们发送应答信息。它包含一个或如果若干个services。

service是一个server程序的函数,它根据商业逻辑的需要执行一个特定的任务。

LQ: View from technical, service is similar to function/API, server comprises certain relevant sets of service.
View from business, service parses a single simple business logical.
With the help of Tuxedo, the application is a 3 tier client/server system actually .



[COMMON] Setting for running tmadmin as non-admin user

example is for HP UNIX

export TUXPATH=/software/local/tuxedo/bin
export TUXCONFIG=/software/local/arborsec/appdir/tuxconfig
export TUXDIR=/software/local/tuxedo
export TUXLIBS=/software/local/tuxedo/lib
export SHLIB_PATH=$TUXLIBS
export PATH=$PATH:.:$TUXPATH:/opt/sudo/bin:/usr/sbin

and must has read access to file $TUXCONFIG

[COMMON] Can't find path for shared library

Q:我所有环境变量都设好了,为何会出现
/usr/lib/dld.sl: Can't find path for shared library: libgp.sl
/usr/lib/dld.sl: No such file or directory
Abort(coredump)

A:将lib的环境变量设置上。LD_LIBRARY_PATH=$TUXDIR/lib等
如果是HP:那么设置SHLIB_PATH ,如果是IBM aix设置LIBPATH

[COMMON] Tpinit failed

[que] Tpinit failed该如何处理?
log 文件如下
224552.NY!?proc.1468.860.0: 06-10-2002: Tuxedo Version 8.0 32-bit Windows.
224552.NY!?proc.1468.860.0: LIBWSC_CAT:1055: ERROR: Unable to establish WSL connection
224552.NY!?proc.1468.860.0: LIBWSC_CAT:1027: ERROR: Unable to connect to WSH
224552.NY!?proc.1468.860.0: LIBWSC_CAT:1020: ERROR: Unable to obtain authentication level

这个错误初学者很常见,而且摸不着头脑!呵呵。以前已经讨论N变了。再post again!

你看这个错误:Unable to establish WSL connection 和
LIBWSC_CAT:1027: ERROR: Unable to connect to WSH

应 该是你的WSL不能连接到WSH。一个错误原因是你的WSNADDR配置的ip存在问题,导致不能找到WSH,另外一个就是网络不通,导致client不 能连接到WSH的机器上。还有一个就是你的程序编译有问题:例如:你没有使用-w参数编译client,但是却是使用WSNADDR寻找服务,导致出现这 样的错误。


Network connection establish

1.在会话连接后如发生网络故障,连接断开后是否tuxedo能够自动恢复连接?
2.在使用会话通讯中,通讯双方一方接必然一方收,是否通讯便只能同步处理,客户端发一条请求,通讯控制就交给服务端,客户端就无法向SERVER提交新的请求直到服务端处理完反馈给客户端,把会话控制交回。
3.tuxedo长联方式中只有会话一种吗?
不好意思,又问低级问题

------------------------------------------------------------
好象一点都不低级呀,这些问题:-)
------------------------------------------------------------
1. TUXEDO/WS客户端在建立和服务端的连接时,首先发送请求到WSL,WSL按照负载均衡算法,挑一个比较闲的WSH的端口号,送回。客户端于是断开与WSL的连接,然后发送SOCKET连接请求给WSH。即一个tpinit()有两次TCP建链动作。
2. WSH接到客户端请求,就为其在共享内存中建立上下文,同时在BBL中注册该客户端。这里,WSH就是WORKSTATION在本地的代理了。
3. TUXEDO的长连接,短连接一般指在一个tpinit()/tpterm()之间是否有多个tpcall()/tpacall()等,即如果建链一次,反复做业务,为长连接;如果每次做业务都要先建链,为短连接。
4. 在TUXEDO的常用函数内部,比如tpcall()都包含了tpinit()代码,在未建链时会自动做初始化动作,但仅限于不含SECURITY的DOMAIN,否则怎么知道该填什么用户名和密码呢?
5. 如果是会话断开,那客户端的上下文也没了,真实情况比较复杂。简单的话,可以理解为不能自动重连。
6. 会话中,可以不把控制权交出去,可以在tpsend()中设置FLAG,让它SEND_ONLY.
7. 由于TUXEDO的SERVICE是无状态的,你所指的长联如果是在一个SERVICE不出来时来回交互,大概会话是最好的实时方法了。如果用广播,时间等等,也可以在一个SERVICE内部执行很多次活动,但不直观。

Fiat兄说得很对,不用tpinit,直接tpcall也是可以的,因为你编译的时候有或者无-w参数已经连接了不同的库了,这样tpcall就知道你 的连接是本地还是WS的,在没有连接的时候,它会先去连接,和tpinit的作用一样的.这个我已经试验过了,效果一样.正如他所说,这个只限于最低的安 全级别的,后3种都不行.

tpinit是一个可选的函数。如果直接使用tpcall或其他API也是可以得

尽管是这样,但是我觉得还是显式的做tpinit是一个好的风格,这样可以及早的发现join application的错误,程序的思路也比较清晰.

同意qiupeng的建议,还是使用tpinit,因为如果网络等有问题,在tpinit就发现了,不会做了什么tpalloc,Fchg32了,到 tpcall才报告网络不通或server有问题等。而且如果使用安全认证的,必须使用tpinit了。

Monday, September 13, 2004

What is the cause of "LIBTUX_CAT:669"

这个情况我们也有遇到过.有一种情况会导致这种情况:客户端在等待服务返回结果集的时候出错终止或者超时.这样原来要发给client的message就 无法正常发送,导致这个问题.少数的这种错误是正常的,因为客户端有时也会因某种情况异常,经常出现就要查一下了.

669

ERROR: Message operation failed because of the invalid message queue identifier

Description

msgsnd to a queue failed because of invalid message queue identifier. This can also occur if a request is made by a client who exits before the request is satisfied. The cleanup after the client exits removes the message queue.

Action

Check the message queue identifier in msgsnd(). The message may be corrupted. Contact your BEA TUXEDO system Technical Support.

What's the difference between tx_begin and tpbegin

tuxedo 支持两种事务接口:一个是ATMI transaction inerface,另一个是XA interface,它是X/Open组织发布的,他们完成的功能是一样的,不同的是他们的接口函数。
例如你说的tpbegin是bea的ATMI transaction接口API,tx_begin是 X/Open组织的API.
他们之间的API不能混用,例如你使用ATMI,你必须使用tpopen来启动transaction,不能使用tx_open,如果使用X/Open的API,那么你必须使用tx_open,不能使用tpbegin

What happens to core file

core文件没有必要分析它,如果软件产生了core,仔细检查程序,程序肯定有问题,不符合编程的规范,有漏洞产生。

Under HP-Unix, can use commands "strings core" to view it.

txrpt usage

txprt [-d mm/dd] [-s time] [-e time] < stderr | pg
txprt [-d mm/dd] [-s time] [-e time] <>

e.g.
txrpt -d 01/01 -s 14 -e 16 < stderr | pg
txrpt -d 03/30 -s 14 -e 16 < stderr | grep SS_CQJZ
or
cat *.err |txrpt -d 09/10 -s 08:00:00 -e 18:00:00 |pg

Sunday, September 12, 2004

Oracle XA Privilege setting

oracle817以下版本好像都不要进行授权配置,在817以下版本要为XA用户授权,
1.运行ORACLE的安装路径下的/rdbms/admin/xaview.sql
SQL> @d:\ora81\rdbms\admin\xaview.sql
2.授权
SQL>grant select on v$xatrans$ to public with grant option;
SQL>grant select on v$pending_xatrans$ to public with grant option;
3. 用system用户(缺省的口令是manager)连接并授权
SQL>connect system/manager
SQL>grant select any table to public;

Create XA connection

A. 修改TUXEDO安装路径的udataobj目录下的RM文件,把以Oracle_XA:xaosw:开头的一行用#注释掉,并加入一行:
Oracle_XA;xaosw;%ORACLE_HOME%\rdbms\xa\xa90.lib %ORACLE_HOME%\precomp\lib\msvc\orasql9.lib

B. 在TUXEDO下创建TMS文件:TMS_ORA,TUXEDO通过TMS_ORA与ORACLE数据库采用XA协议进行通讯
buildtms -o TMS_ORA -r Oracle_XA
注意:
a. 如果TUXEDO 服务端与ORACLE数据库不在同一台服务器上,可能会提示找不到 库文件oraxa90.lib和orasql9.lib,可到ORACLE数据库的服务端相应目录下把这两个文件拷到当前机器ORACLE的客户端下的对应目录下。
b. TMS_ORA 是一个可执行的文件

C. 配置 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

D. 重命名下列文件,因为下列文件名与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

E. 用TMADMIN创建TLOG文件,TUXEDO用一个文件TLOG记录对数据库操作的日志。用于协调分布式数据库的提交与回滚。
D:\>tmadmin
>crdl -b 500 -z d:\test\TLOG
>crlog -m simple


Oracle_XA:xaosw:-L${ORACLE_HOME}/lib -lxa -lsql -lncr
-lsqlnet -lclient -lcommon -lgeneric -lcommon -lepc
-lnlsrtl3 -lc3v6 -lcore3 -lm -lsocket

Typcal LIBTUX_CAT error sets

111802.JINGY!BBL.1400.628.0: LIBTUX_CAT:297: ERROR: _tlog_open: _gp_crtbl: no space can be allocated for disk table or for VTOC/UDL

Action: Create TLOG

LANG setting under RedHat

If encounter the following Message udner Redhat or Fedora Core

tuxwsvr and wlinstn logs :
165622.linuxcts!wlisten.1380.1024.-2: 09-11-2002: Tuxedo Version 8.0

165622.linuxcts!wlisten.1380.1024.-2: WEBGUI_CAT:3102: INFO: wlisten starting

165622.linuxcts!wlisten.1380.1024.-2: NLS:4: Cannot open message catalog WEBGUI_CAT, set 1, num 3108; check TUXDIR=/usr/bea/tuxedo8.0, LANG=en_US

Then
LANG=C; export LANG

WSL configuration

154804.JINGY!WSL.1604.1484.0: WSNAT_CAT:1008: ERROR: Could not establish listening address on network //192.168.67.196:40001

154804.JINGY!WSL.1604.1484.0: LIBTUX_CAT:250: ERROR: tpsvrinit() failed

154804.JINGY!tmboot.1800.1904.-2: CMDTUX_CAT:825: ERROR: Process WSL at HIS0001 failed with /T tperrno (TPESYSTEM - internal system error)


第一个错误表示没有建立起网络监听。
可能的原因:这个端口是不是被其他应用占用了
第二个错误是tuxedo在与数据库连接的时候没有连上
可能的原因:是不是程序中关于连库的语句写得有问题?

给你一个WSL的例子:

WSL SRVGRP=GP_COMMON SRVID=1 CLOPT="-A -t -- -n//10.1.2.69:8888 -m3 -M20 -x5"
CLOP中参数的含义
-A :option requests that the WSL offer all its services when it is booted. tuxedo启动时开放所有的service
-t :The amount of time to allow for a client to connect to the WSH tuxedo允许一个client连接的时间多长,指连接的动作,不是连接后的持续时间,如果你用tuxedo6.5的client去连tuxedo7, 则必须要写此参数(自己总结的)
-- :The double-dash (--) marks the beginning of a list of parameters that is passed to the WSL after it has been booted. 表示服务器起来之后的参数,其总的值与UBB中的参数有约束。
-n//10.1.2.69:8888 :The network address used by WSCs to contact the listener. The WSC must set the appropriate environment variable (WSNADDR) to the value specified after -n. 网络连接参数,客户端可以按照这个设置。
-m : The minimum number of handlers that should be booted and always available. The default is 0. 服务器起来之后的最小常连接
-M : The maximum number of handlers that can be booted. The default is the value of MAXWSCLIENTS for the machine being configured, divided by the multiplexing value (specified with -x).最大常连接,默认值是UBB中的MAXWSCLIENTS的数量。
-x : The maximum number of clients that a WSH can multiplex at one time. The value must be greater than 0. The default is 10.服务器一次处理的最大客户端数量,必须大于0,默认值是10。

可以在CLOPT中加入[-m minh] [-M maxh] [-x mpx-factor]来说明,
例如最大客户端为50时,可以这样说明,
WSL SRVGRP=GROUP1 SRVID=100
CLOPT="-A -- -n //192.168.67.196:40001 -d /dev/tcp -m1 -M10 -x5"
WSL负责监听,由WSH进程和客户端进行通讯,每个WSH最多连接5个客户端(缺省10个),当客户端超过处理数时,WSL增加一个WSH进程来处理,直到达到-M参数指定的值。


In addtional,
-I, 客户端与服务器端建立连接的超时时间;
-N, 客户端发起请求的响应超时时间;
-T, 客户端在与服务器端建立连接后,允许最大的空闲时间(即没有任何请求提交)。

XA or Non-XA

采用XA的原因是--应用中需要使用到全局事务,也就是说你的应用需要在一个事务中去更新两个或两个以上的数据库,并保证该事务的一致性。如果不是这样,通常应该使用NON-XA。因为NON-XA比XA的效率高!

采用XA的原因是你的应用中需要使用到全局事务,如果你的应用需要在一个事务中去更新两个或两个以上的数据库,并保证该事务的一致性。使用tuxedo的XA提供的全局事务最好。
如果一个数据库,可以不使用XA,事务有自己控制。因为NON-XA比XA的效率高!

但是不使用XA也可以连接数据库的时间,可以把db connect 放到tpsvrinit中,db shutdown 放到tpsvrdone中。也就是在tmboot就连接到数据库上。tmshutdown时候就db disconnect 数据库了。

使用XA,那么整个数据库的操作都教给tuxedo完成,如果不使用XA,那么有自己连接数据库,提交数据库等。这些代码可以在tpsvrinit or tpsvrdone来完成,也可以在代码中完成。

您的问题:
也就是说,我需要在tpsvrinit中使用proc语句连接数据库对吗。
那么buildserver时有什么需要注意的吗?

回答:
你应该在tpsvrinit中使用pro*C的语句连接数据库。例如:
tpsvrinit()
{
EXEC SQL BEGIN DECLARE SECTION;
VARCHAR username[20];
VARCHAR passwd[20];
...
EXEC SQL END DECLARE SECTION;

strcpy(username.arr,"TEST");
username.len = strlen(username.arr);
strcpy(passwd.arr,"abc");
passwd.len = strlen(passwd.arr);

EXEC SQL CONNECT ....
if (sqlcode <>

Difference between TUXEDO and WebLogic

Tuxedo是用C开发的中间件,不走J2EE路线, 是和IBM的CICS类似的中间件,和WEBLOGIC概念是不一样的,作用不一样的。WEBLOGIC一般用于Web Service,例如在用JAVA的系统中就很可能用WebLogic.性能上Tuxedo比其他J2EE应用服务器都好。

Tuxedo是用C开发的中间件,不走J2EE路线,是和IBM的CICS类似的中间件,和WEBLOGIC概念是不一样的,作用不一样的。WEBLOGIC一般用于Web Service,例如在用JAVA的系统中就很可能用WebLogic.建议在网上用“TUXEDO”搜索一下,可找到相关的文章,技术性不高但是可以了 解很多。 性能上Tuxedo比其他J2EE应用服务器都好!