ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 如何实现Tuxedo 和 Oracle 的互连

如何实现Tuxedo 和 Oracle 的互连

原创 Linux操作系统 作者:hejian2002 时间:2019-07-21 21:15:02 0 删除 编辑

From binss'Blog

新编译生成的gcc ,使用的标准连接库都在/usr/local/lib 下了,但使用的缺省的连接路径是 /usr/lib 怎样添加?
应用程序 — 作者 binss @ 18:58
新编译生成的gcc ,使用的标准连接库都在/usr/local/lib 下了,但使用的缺省的连接路径是 /usr/lib 怎样添加?(除了在每次编译时 增加 -L /usr/local/lib 以外)(sakulagi)
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
写到~/.bash_profile里面。

linux下调试core文件

应用程序 — 作者 binss @ 18:56
linux下调试core文件
gdb
:出错产生core dump的可执行程序。
: core dump的文件名,缺省是“core” 查看全文

Pro*C 开发环境参考

应用程序 — 作者 binss @ 10:57
Pro*C 开发环境参考 查看全文

编译错误解决

应用程序 — 作者 binss @ 10:57
编译错误解决 查看全文

Pro*C 简介

应用程序 — 作者 binss @ 10:53
Pro*C 简介 查看全文

如何实现Tuxedo 和 Oracle 的互连

应用程序 — 作者 binss @ 10:46

如何实现Tuxedo 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:ora81rdbmsadminxaview.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:ora81rdbmsxaoraxa8.lib d:ora81precomplibmsvcorasql8.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数据库的服务端相应目录下把这两个文件拷到当前机器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:testtuxconfig"

TUXDIR="d:tux71"

TLOGDEVICE = "d:testTLOG"

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:testTLOG

>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 failure,sqlcode=%ld, sqlerr=%sn",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)

{

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 ( reqbuf == (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(tperrno));

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 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文件中所连的库文件可能会不样。


Powered by pLog


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/16629/viewspace-78765/,如需转载,请注明出处,否则将追究法律责任。

上一篇: ORACLE FAQ
下一篇: Exp/Imp
请登录后发表评论 登录
全部评论

注册时间:2002-07-16

  • 博文量
    27
  • 访问量
    17519