XA与oracle数据库连接_第1页
XA与oracle数据库连接_第2页
XA与oracle数据库连接_第3页
XA与oracle数据库连接_第4页
XA与oracle数据库连接_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、TUXEDO与ORACLE数据库的互连(来源:) 前言 在银行、电信、金融等行业的大型计算机应用系统中,中间件的使用日益普及,中间件已与操作系统、数据库并列为三大基础软件。BEA Tuxedo作为最优秀的中间件产品,在我国的很多行业中广泛使用,本文通过一个简单的例子介绍如何在TUXEDO中访问ORACLE数据库。 在两层的C/S结构中,客户端直接访问数据库,当采用TUXEDO中间件后,形成三层结构。这时,客户端不直接访问数据库,而是改为调用中间件TUXEDO服务端上的服务,由TUXEDO服务端访问数据库,并把结果返回给客户端。TUXEDO服务端可以和ORACLE在同一台服务器上,也可以在不同的

2、机器上,如果在不同的机器上,在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:>sql

3、plus internal/oracle 注意:在9i数据库需要用如下方法进入E: >sqlplus /nologSQL> connect sys as sysdba请输入口令:已连接。2运行ORACLE的安装路径下的/rdbms/admin/xaview.sql SQL> d:ora81rdbmsadminxaview.sql 9i数据库SQL> E:oracleora90rdbmsadminxaview.sql3授权 SQL>grant select on v$xatrans$ to public with grant option; SQL>grant

4、 select on v$pending_xatrans$ to public with grant option; grant select on pending_trans$ to public;grant select on dba_2pc_pending to public;grant select on dba_pending_transactions to public;4. 用system用户(缺省的口令是manager)连接并授权 SQL>connect system/manager SQL>grant select any table to public; 二、T

5、UXEDO的配置 1修改TUXEDO安装路径的udataobj目录下的RM文件,把以Oracle_XA:xaosw:开头的一行用#注释掉,并加入一行: Oracle_XA;xaosw;d:ora81rdbmsxaoraxa8.lib d:ora81precomplibmsvcorasql8.lib 8i: Oracle_XA;xaosw;Oracle_Homerdbmsxaoraxa8.lib Oracle_Homeprecomplibmsvcorasql8.lib9i: Oracle_XA;xaosw;Oracle_Homerdbmsxaoraxa9.lib Oracle_Homepreco

6、mplibmsvcorasql9.lib如果是在UNIX环境下,则为: Oracle_XA:xaosw:-L$ORACLE_HOME/lib -lclntsh 2. 在TUXEDO用户下创建TMS文件:TMS_ORA8i,TUXEDO通过TMS_ORA8i与ORACLE数据库采用XA协议进行通讯 buildtms -o d:tuxedo71binTMS_ORA8i -r Oracle_XA 注意:如果TUXEDO 服务端与ORACLE数据库不在同一台服务器上,可能会提示找不到 库文件oraxa8.lib和orasql8.lib,可到ORACLE数据库的服务端相应目录下把这两个文件拷到当前机器O

7、RACLE的客户端下的对应目录下。 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+LogDi

8、r=." 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:testtuxconfig"

9、TUXDIR="d:tux71" TLOGDEVICE = "d:testTLOG" TLOGNAME=TLOG TLOGSIZE=100 *GROUPS GROUP1 LMID=simple GRPNO=1 OPENINFO="Oracle_XA:Oracle_XA+Acc=P/scott/*+SesTm=600+MaxCur=5+LogDir=." TMSNAME="TMS_ORA8i" TMSCOUNT=2 *SERVERS DEFAULT: CLOPT="-A" test SRVGRP=

10、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:&g

11、t;tmadmin >crdl -b 500 -z d:testTLOG >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_ename11=""

12、 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=%sn",sq

13、lca.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的值,并显示

14、出来 #include <stdio.h> #include "atmi.h" main(argc, argv) long reqlen=1024; char *reqbuf; /* 与TUXEDO服务端建立连接 */ if (tpinit(TPINIT *) NULL) = -1) (void) fprintf(stderr, "Tpinit failedn"); exit(1); /* 分配发送缓冲区*/ reqbuf = (char *)tpalloc("STRING",NULL,reqlen); if ( reqb

15、uf = (char *)NULL) printf("tpalloc failedn"); tpterm(); strcpy(reqbuf,"1000"); /*调用TUXEDO的服务TEST*/ if (tpcall("TEST", (char *)reqbuf, 0L, (char *)&reqbuf, (long *)&reqlen, 0< 0 ) printf("tpcall failed,tperrno=%ld,tperrtext=%sn",tperrno,tpstrerror(tp

16、errno); tpfree(reqbuf); tpterm(); exit(1); printf("name=%sn",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 s

17、impserv -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> tm

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论