XA与oracle数据库连接.docx
- 文档编号:10964031
- 上传时间:2023-05-28
- 格式:DOCX
- 页数:9
- 大小:17.97KB
XA与oracle数据库连接.docx
《XA与oracle数据库连接.docx》由会员分享,可在线阅读,更多相关《XA与oracle数据库连接.docx(9页珍藏版)》请在冰点文库上搜索。
XA与oracle数据库连接
TUXEDO与ORACLE数据库的互连
(来源:
)
前言
在银行、电信、金融等行业的大型计算机应用系统中,中间件的使用日益普及,中间件已与操作系统、数据库并列为三大基础软件。
BEATuxedo作为最优秀的中间件产品,在我国的很多行业中广泛使用,本文通过一个简单的例子介绍如何在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:
\>sqlplusinternal/oracle
注意:
在9i数据库需要用如下方法进入
E:
\>sqlplus/nolog
SQL>connectsysassysdba
请输入口令:
已连接。
2.运行ORACLE的安装路径下的/rdbms/admin/xaview.sql
SQL>@d:
\ora81\rdbms\admin\xaview.sql
9i数据库
SQL>@E:
\oracle\ora90\rdbms\admin\xaview.sql
3.授权
SQL>grantselectonv$xatrans$topublicwithgrantoption;
SQL>grantselectonv$pending_xatrans$topublicwithgrantoption;
grantselectonpending_trans$topublic;
grantselectondba_2pc_pendingtopublic;
grantselectondba_pending_transactionstopublic;
4.用system用户(缺省的口令是manager)连接并授权
SQL>connectsystem/manager
SQL>grantselectanytabletopublic;
二、TUXEDO的配置
1.修改TUXEDO安装路径的udataobj目录下的RM文件,把以Oracle_XA:
xaosw:
开头的一行用#注释掉,并加入一行:
Oracle_XA;xaosw;d:
\ora81\rdbms\xa\oraxa8.libd:
\ora81\precomp\lib\msvc\orasql8.lib
8i:
Oracle_XA;xaosw;{Oracle_Home}\rdbms\xa\oraxa8.lib{Oracle_Home}\precomp\lib\msvc\orasql8.lib
9i:
Oracle_XA;xaosw;{Oracle_Home}\rdbms\xa\oraxa9.lib{Oracle_Home}\precomp\lib\msvc\orasql9.lib
如果是在UNIX环境下,则为:
Oracle_XA:
xaosw:
-L${ORACLE_HOME}/lib-lclntsh
2.在TUXEDO用户下创建TMS文件:
TMS_ORA8i,TUXEDO通过TMS_ORA8i与ORACLE数据库采用XA协议进行通讯
buildtms-od:
\tuxedo71\bin\TMS_ORA8i-rOracle_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
GROUP1LMID=simpleGRPNO=1
OPENINFO="Oracle_XA:
Oracle_XA+Acc=P/scott/tiger+SesTm=600+MaxCur=5+LogDir=."
TMSNAME="TMS_ORA8i"TMSCOUNT=2
修改后的配置文件ubb内容如下,用tmloadcf-yubb重新生成tuxconfig
IPCKEY123456
DOMAINIDsimpapp
MASTERsimple
MAXACCESSERS100
MAXSERVERS50
MAXSERVICES100
MODELSHM
LDBALN
*MACHINES
serverLMID=simple
APPDIR="d:
\test"
TUXCONFIG="d:
\test\tuxconfig"
TUXDIR="d:
\tux71"
TLOGDEVICE="d:
\test\TLOG"
TLOGNAME=TLOG
TLOGSIZE=100
*GROUPS
GROUP1LMID=simpleGRPNO=1
OPENINFO="Oracle_XA:
Oracle_XA+Acc=P/scott/******+SesTm=600+MaxCur=5+LogDir=."
TMSNAME="TMS_ORA8i"TMSCOUNT=2
*SERVERS
DEFAULT:
CLOPT="-A"
testSRVGRP=GROUP1SRVID=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-b500-zd:
\test\TLOG
>crlog-msimple
>q
三、服务端的程序:
test.pc
功能:
根据客户端传的EMPNO到表EMP中取ENAME的值,并把它返回给客户端
#include
#include
#include
EXECSQLINCLUDEsqlca;
EXECSQLBEGINDECLARESECTION;
longal_empno=0;
charac_ename[11]="";
EXECSQLVARac_enameISSTRING(11);
EXECSQLENDDECLARESECTION;
TEST(TPSVCINFO*rqst)
{
/*接收客户端来的数据*/
al_empno=(FBFR32*)rqst->data;
EXECSQLselectenameinto:
ac_enamefromEMPwhereempno=:
al_empno;
if(sqlca.sqlcode!
=0)
{
userlog("selectfromEMPfailure,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
#include"atmi.h"
main(argc,argv)
{
longreqlen=1024;
char*reqbuf;
/*与TUXEDO服务端建立连接*/
if(tpinit((TPINIT*)NULL)==-1)
{
(void)fprintf(stderr,"Tpinitfailed\n");
exit
(1);
}
/*分配发送缓冲区*/
reqbuf=(char*)tpalloc("STRING",NULL,reqlen);
if(reqbuf==(char*)NULL)
{
printf("tpallocfailed\n");
tpterm();
}
strcpy(reqbuf,"1000");
/*调用TUXEDO的服务TEST*/
if(tpcall("TEST",(char*)reqbuf,0L,(char**)&reqbuf,(long*)&reqlen,0<0)
{
printf("tpcallfailed,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>proctest.pcinclude=%TUXDIR%/include
2.用buildserver把test.c编译成可执行文件,注意-r后带的Oracle_XA与RM文件中的一致。
d:
\test>buildserver-osimpserv-fsimpserver.c-rOracle_XA-sTEST
六、编译客户端程序
d:
\test>buildclient-otestcli-ftestcli.c
七、用tmboot–y启动TUXEDO
应能看到所有的SERVER都启动成功。
这时,我们的服务端程序test会自动与ORACLE数据库建立连接,并一直保持这个连接,直到TUXEDO系统或ORACLE数据库关闭。
所以在我们的程序test.pc中看不到与数据库连接的语句,因为现在与数据库的连接由TUXEDO自动管理。
如果TMS_ORA8i启动失败会在当前目录生成一个*.trc文件,记录失败的原因,同时TUXEDO的ULOG文件中也会有一些错误信息。
可参考这些错误信息进行错误分析。
d:
\test>tmboot-y
execTMS_ORA8i-A:
processid=1072...Started.
execTMS_ORA8i-A:
processid=528...Started.
exectest-A:
processid=876...Started.
八、运行客户端程序
运行后应能看到服务端返回的结果。
d:
\test>testcli
name=bill
到此,整个配置过程就大功告成了。
ORACLE的其他版本的配置及在其他操作系统上的配置基本与本文所述差不多,差别主要在RM文件中所连的库文件可能会不样。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- XA oracle 数据库连接