免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5724 | 回复: 1
打印 上一主题 下一主题

[Tuxedo] XA接口下的TUXEDO与ORACLE [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-03-21 21:51 |只看该作者 |倒序浏览
基本概念介绍:

TUXEDO:与操作系统,数据库并称“三大基础软件”之一的中间件产品,一般在银行,电信等大型的操作系统中存在。

ORACLE:老外的产品,性能优良的数据库产品之一,与SQL平分当今的数据库市场,以安全性高著称于世。

使用XA接口的优点:

可以配置一个或者多个数据库,建议使用。

本文将对XA接口下的TUXEDO与ORACLE的配置方法做简单的阐述,希望对大家有所帮助,不足之处在所难免,望大家不吝赐教。

系统说明:

版本:TUXEDO  7.1与ORCACLE   8.1.5

安装目录:d:\

操作系统:windows2000

一、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_XAaosw:开头的一行用#注释掉,并加入一行:
Oracle_XA;xaosw;d:\ora81\rdbms\xa\oraxa8.lib d:\ora81\precomp\lib\msvc\orasql8.lib
如果是在UNIX环境下,则为:
Oracle_XAaosw${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 **)&amp;reqbuf, (long *)&amp;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文件中所连的库文件可能会不一样。

论坛徽章:
0
2 [报告]
发表于 2007-11-23 14:03 |只看该作者

回复 #1 づ★sl战神 的帖子

请教楼主一个问题:如果Tuxedo中要使用XA的话,那么就必须要是使用pro*C吗?假如我想使用otl或者其他的基于OCI的封装,那怎么办?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP