Windows下Tuxedo的安装与配置-数据库
Windows下Tuxedo的安装与配置-数据库草木瓜 2005-5-18一、准备数据库环境 这里使用的是Linux+Oracle9的虚拟机数据库环境。本机配置Tuxedo服务器。在上篇无数据库配置 基础上,配置Tuxedo服务器连接Oracle理解起来就相对简单了。这里采用XA方式连接数据库。二、准备客户端,服务端的应用程序 这里是自已写的代码。 client.
Windows下Tuxedo的安装与配置-数据库
草木瓜 2005-5-18
一、准备数据库环境
这里使用的是Linux+Oracle9的虚拟机数据库环境。本机配置Tuxedo服务器。在上篇无数据库配置
基础上,配置Tuxedo服务器连接Oracle理解起来就相对简单了。这里采用XA方式连接数据库。
二、准备客户端,服务端的应用程序
这里是自已写的代码。
client.c
#include <stdio.h>
#include <atmi.h> /* TUXEDO Header File */
main(int argc, char *argv[])
{
char *sendbuf;
long sendlen=1024;
int ret;
if(argc != 2) {
(void) fprintf(stderr, "args not exist/n");
exit(1);
}
/* 与服务器建立连接 */
if (tpinit((TPINIT *) NULL) == -1)
{
(void) fprintf(stderr, "Tpinit failed/n");
exit(1);
}
/* 分配发送缓冲 */
sendbuf = (char *) tpalloc("STRING", NULL, sendlen);
if (sendbuf== (char *)NULL)
{
(void) fprintf(stderr,"Error allocating send buffer/n");
tpterm();
exit(1);
}
(void) strcpy(sendbuf, argv[1]);
(void) fprintf(stdout, "InputValue: %s/n", argv[1]);
/* 向服务发送请求 */
ret = tpcall("DBSERV", (char *)sendbuf, 0L, (char **)&sendbuf, &sendlen, 0L);
if(ret == -1) {
(void) fprintf(stderr, "Can't send request to service DBREAD/n");
(void) fprintf(stderr, "Tperrno = %d/n", tperrno);
tpfree(sendbuf);
tpterm();
exit(1);
}
(void) fprintf(stdout, "Returned string is: %s/n", sendbuf);
/* Free Buffers & Detach from System/T */
tpfree(sendbuf);
tpterm();
return(0);
}
server.pc 这里用到了ProC的一些方法
#include <stdio.h>
#include <ctype.h>
#include <atmi.h> /* TUXEDO Header File */
#include <userlog.h> /* TUXEDO Header File */
EXEC SQL INCLUDE sqlca;
EXEC SQL BEGIN DECLARE SECTION;
VARCHAR ora_no[2];
VARCHAR ora_value[10];
EXEC SQL END DECLARE SECTION;
DBREAD(TPSVCINFO *rqst)
{
strcpy(ora_no.arr,(char *)rqst->data);
ora_no.len=strlen(ora_no.arr);
ora_no.arr[ora_no.len]='/0';
userlog("ERRSRV: %s",ora_no.arr);
EXEC SQL select name into :ora_value from tuxedo_test where id=:ora_no;
if(sqlca.sqlcode!=0)
{
userlog("ERRSRV: select name from tuxedo_test where id=, sqlcode=%ld /n",sqlca.sqlcode);
tpreturn(TPFAIL, 0, rqst->data, 0L, 0);
}
strcpy(rqst->data,ora_value.arr);
tpreturn(TPSUCCESS, 0, rqst->data, 0L, 0);
}
三、编译客户端,服务端代码
buildclient -o client -f client.c -v
对pc文件,须首先编译为c,然后再编译为服务。在proc编译的过程,会出现link错误,这是因为tuxedo本身
带的sqlca.h与oracle proc冲突,将C:/bea/tuxedo9.0/include/sqlca.h改名即可。
proc server.pc include=%TUXDIR%/include
buildserver -o server -f server.c -r Oracle_XA -s DBREAD -v
四、配置Tuxedo的RM文件
本地Tuxedo9.0安装路径为C:/bea/tuxedo9.0。
打开C:/bea/tuxedo9.0/udataobj路径下的rm文件。找到Oracle_XA:这句,可以注释掉,然后增加下面内容。
Oracle_XA;xaosw;E:/oracle/ora92/rdbms/XA/ORAXA9.LIB E:/oracle/ora92/precomp/lib/orasql9.lib
注:本机如果没有装服务版的Oracle,可能找不到对应库文件,可从服务器端复制过来即可。
这两个lib是用于编译tms文件的,tuxedo通过TMS_ORA9i与Oracle数据库进行XA通讯。
修改完rm文件,运行命令buildtms -o C:/bea/tuxedo9.0/bin/TMS_ORA9i -r Oracle_XA编译生成TMS_ORA9i。
五、修改ubbconfig文件
在*GROUP下添加下面语句。liwei/liwei@linux是连接数据库的tns配置。TMSCOUNT=2表示启动两个TMS服务。
OPENINFO="Oracle_XA:Oracle_XA+Acc=P/liwei/liwei+SqlNet=linux+SesTm=600+MaxCur=5+LogDir=."
TMSNAME="TMS_ORA9i" TMSCOUNT=2
另外在*MACHINES添加日志的处理,语句如下。
TLOGDEVICE = "F:/Liwei/Tuxedo/dbread/TLOG"
TLOGNAME = TLOG
TLOGSIZE = 100
因为编译的服务文件名是server,*SERVERS下改为server
因为生成的服务是DBREAD,所以*SERVICES下也要改成DBREAD。
修改后文件如下:
#Liwei
*RESOURCES
IPCKEY 123456
DOMAINID liweiapp
MASTER lw
MAXACCESSERS 5
MAXSERVERS 5
MAXSERVICES 5
MODEL SHM
LDBAL N
*MACHINES
LWYM
LMID = lw
TUXDIR = "C:/bea/tuxedo9.0"
TUXCONFIG = "F:/Liwei/Tuxedo/dbread/tuxconfig"
APPDIR = "F:/Liwei/Tuxedo/dbread"
TLOGDEVICE = "F:/Liwei/Tuxedo/dbread/TLOG"
TLOGNAME=TLOG
TLOGSIZE = 100
#ULOGPFX = "F:/Liwei/Tuxedo/dbread/ULOG"
*GROUPS
GROUP1 LMID=lw GRPNO = 1
OPENINFO="Oracle_XA:Oracle_XA+Acc=P/liwei/liwei+SqlNet=linux+SesTm=600+MaxCur=5+LogDir=."
TMSNAME="TMS_ORA9i" TMSCOUNT=2
*SERVERS
DEFAULT:
CLOPT="-A"
server SRVGRP=GROUP1 SRVID=1
*SERVICES
DBREAD
编译日志后不能立刻tmboot运行,需要先用tmadmin创建TLOG。方法如下:
C:/>tmadmin
>crdl -b 500 -z F:/Liwei/Tuxedo/dbread/TLOG
>crlog -m lw
注:lw是ubbconfig里面的LMID。
六、Oracle的设置
Linux:
sqlplus /nolog
conn sys/*** as sysdba
执行xaview.sql 创建v$xatrans$和 v$pending_xatrans$两个视图
@...../rdbms/admin/xaview.sql
并把两个视图的select权限授给连接用户如liwei。
grant select on v$xatrans$ to liwei with grant option;
grant select on v$pending_xatrans$ to liwei with grant option;
最后
grant select any table to liwei;
七、运行tmboot
你会发现有个TMS_ORA9i启动不起来,没关系,将*RESOURCES max系列的设大点,tmshutdown,并且
结束掉tuxipc,重新编译config然后tmboot就ok了。
client 1
执行就会返回数据库结果了。
更多推荐
所有评论(0)