Windows下Tuxedo的安装与配置_MQ, Tuxedo及OLTP讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  MQ, Tuxedo及OLTP讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 4326 | 回复: 0   主题: Windows下Tuxedo的安装与配置        下一篇 
鲲鹏展翅
注册用户
等级:少校
经验:1148
发帖:79
精华:9
注册:2012-11-19
状态:离线
发送短消息息给鲲鹏展翅 加好友    发送短消息息给鲲鹏展翅 发消息
发表于: IP:您无权察看 2012-11-19 15:20:42 | [全部帖] [楼主帖] 楼主

一、准备数据库环境

     这里使用的是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


  执行就会返回数据库结果了。

=========================

Windows下Tuxedo的安装配置-数据库补充

草木瓜 2006-5-28

一、序

《Windows下Tuxedo的安装配置-数据库》一文中介绍了通过XA方法连接数据库,步骤比较多,当然也可以采
用另一种方法,在服务程序里面直接写入连接数据库的命令。

二、服务端程序

小作修改

EXEC SQL BEGIN DECLARE SECTION;
VARCHAR ora_no[2];
VARCHAR ora_value[10];
VARCHAR ora_cn[30]; //新增
EXEC SQL END DECLARE SECTION;
EXEC SQL INCLUDE sqlca;
//新增以下内容,tpsvinit,tpsrdone是tuxedo默认构造和析构函数。
tpsvrinit()
{
      strcpy(ora_cn.arr,"liwei/liwei@windb");
      ora_cn.len = strlen(ora_cn.arr);
      ora_cn.arr[ora_cn.len]='\0';
      EXEC SQL CONNECT :ora_cn;
      return(0);
}
tpsrvdone()
{
EXEC SQL COMMIT WORK RELEASE;
}


三、配置文件

注释掉与XA相关项,由于客户端与服务器是同一台机器,WSL要不要无所谓。这里也注释掉。

*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
server SRVGRP=GROUP1 SRVID=1
#WSL SRVGRP=GROUP1  SRVID =300
#CLOPT="-A -- -n //192.168.98.166:5898 -d/dev/tcp -m1 -M5 -x 10"
*SERVICES
DBREAD


四、编译服务端的命令

修改如下:

proc server.pc include=%TUXDIR%\include
buildserver -o server -f server.c -s DBREAD -v


如果在编译过程中出现error LNK2001: unresolved external symbol _sqlcxt类似的错误,那是因为
找不到orasql9.lib文件。设置环境变量lib,加上e:\oracle\ora92\precomp\lib,修改命令:

buildserver -o server -f server.c -s DBREAD -v -l orasql9.lib


五、编译config文件,运行tmboot

六、补充说明

Tuxedo配置一般如下步骤:

1 设置环境变量。
2 准备服务端客户端程序。
3 服务端客户端编译(buildclient buildserver)。
4 准备tuxedo的config文件。
5 编译config文件(tmload)。
6 如果config文件包含日志,必须通过tmadmin生成日志文件(crdl,crlog),如出错须将原日志文件删除。
7 启动tuxedo服务(tmboot)。




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论