jinfeng_wang

          G-G-S,D-D-U!

          BlogJava 首頁 新隨筆 聯(lián)系 聚合 管理
            400 Posts :: 0 Stories :: 296 Comments :: 0 Trackbacks
          http://blog.csdn.net/liwei_cmg/archive/2006/05/28/759301.aspx

          http://blog.csdn.net/liwei_cmg/archive/2006/05/29/759803.aspx


          Windows下Tuxedo的安裝與配置-數(shù)據(jù)庫

          草木瓜 2005-5-18

          一、準(zhǔn)備數(shù)據(jù)庫環(huán)境

            這里使用的是Linux+Oracle9的虛擬機(jī)數(shù)據(jù)庫環(huán)境。本機(jī)配置Tuxedo服務(wù)器。在上篇無數(shù)據(jù)庫配置
            基礎(chǔ)上,配置Tuxedo服務(wù)器連接Oracle理解起來就相對(duì)簡(jiǎn)單了。這里采用XA方式連接數(shù)據(jù)庫。

          二、準(zhǔn)備客戶端,服務(wù)端的應(yīng)用程序
           
            這里是自已寫的代碼。
           
            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);
           }

           /* 與服務(wù)器建立連接 */
           if (tpinit((TPINIT *) NULL) == -1)
           {
            (void) fprintf(stderr, "Tpinit failed\n");
            exit(1);
           }

           /* 分配發(fā)送緩沖 */
           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]);

           /* 向服務(wù)發(fā)送請(qǐng)求 */
           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);
          }

          三、編譯客戶端,服務(wù)端代碼

            buildclient -o client -f client.c -v
           
            對(duì)pc文件,須首先編譯為c,然后再編譯為服務(wù)。在proc編譯的過程,會(huì)出現(xiàn)link錯(cuò)誤,這是因?yàn)閠uxedo本身
            帶的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:這句,可以注釋掉,然后增加下面內(nèi)容。
            Oracle_XA;xaosw;E:\oracle\ora92\rdbms\XA\ORAXA9.LIB E:\oracle\ora92\precomp\lib\orasql9.lib
            注:本機(jī)如果沒有裝服務(wù)版的Oracle,可能找不到對(duì)應(yīng)庫文件,可從服務(wù)器端復(fù)制過來即可。
           
            這兩個(gè)lib是用于編譯tms文件的,tuxedo通過TMS_ORA9i與Oracle數(shù)據(jù)庫進(jìn)行XA通訊。
            修改完rm文件,運(yùn)行命令buildtms -o C:\bea\tuxedo9.0\bin\TMS_ORA9i -r Oracle_XA編譯生成TMS_ORA9i。
           
           
          五、修改ubbconfig文件

            在*GROUP下添加下面語句。liwei/liwei@linux是連接數(shù)據(jù)庫的tns配置。TMSCOUNT=2表示啟動(dòng)兩個(gè)TMS服務(wù)。
           
            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
           
           因?yàn)榫幾g的服務(wù)文件名是server,*SERVERS下改為server
           因?yàn)樯傻姆?wù)是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運(yùn)行,需要先用tmadmin創(chuàng)建TLOG。方法如下:
           
            C:\>tmadmin
            >crdl -b 500 -z F:\Liwei\Tuxedo\dbread\TLOG
            >crlog -m lw

            注:lw是ubbconfig里面的LMID。
           
          六、Oracle的設(shè)置
           
            Linux:
           
            sqlplus /nolog
            conn sys/*** as sysdba
           
            執(zhí)行xaview.sql 創(chuàng)建v$xatrans$和 v$pending_xatrans$兩個(gè)視圖
            @...../rdbms/admin/xaview.sql
           
            并把兩個(gè)視圖的select權(quán)限授給連接用戶如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;
           
           
          七、運(yùn)行tmboot

            你會(huì)發(fā)現(xiàn)有個(gè)TMS_ORA9i啟動(dòng)不起來,沒關(guān)系,將*RESOURCES max系列的設(shè)大點(diǎn),tmshutdown,并且
            結(jié)束掉tuxipc,重新編譯config然后tmboot就ok了。
           
            client 1
            執(zhí)行就會(huì)返回?cái)?shù)據(jù)庫結(jié)果了。

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

          Windows下Tuxedo的安裝配置-數(shù)據(jù)庫補(bǔ)充

          草木瓜 2006-5-28

          一、序

          《Windows下Tuxedo的安裝配置-數(shù)據(jù)庫》一文中介紹了通過XA方法連接數(shù)據(jù)庫,步驟比較多,當(dāng)然也可以采
          用另一種方法,在服務(wù)程序里面直接寫入連接數(shù)據(jù)庫的命令。

          二、服務(wù)端程序

          小作修改

          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;


          //新增以下內(nèi)容,tpsvinit,tpsrdone是tuxedo默認(rèn)構(gòu)造和析構(gòu)函數(shù)。
          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相關(guān)項(xiàng),由于客戶端與服務(wù)器是同一臺(tái)機(jī)器,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

          四、編譯服務(wù)端的命令

          修改如下:

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

          如果在編譯過程中出現(xiàn)error LNK2001: unresolved external symbol _sqlcxt類似的錯(cuò)誤,那是因?yàn)?br /> 找不到orasql9.lib文件。設(shè)置環(huán)境變量lib,加上e:\oracle\ora92\precomp\lib,修改命令:

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

          五、編譯config文件,運(yùn)行tmboot

          六、補(bǔ)充說明

          Tuxedo配置一般如下步驟:

          1 設(shè)置環(huán)境變量。
          2 準(zhǔn)備服務(wù)端客戶端程序。
          3 服務(wù)端客戶端編譯(buildclient buildserver)。
          4 準(zhǔn)備tuxedo的config文件。
          5 編譯config文件(tmload)。
          6 如果config文件包含日志,必須通過tmadmin生成日志文件(crdl,crlog),如出錯(cuò)須將原日志文件刪除。
          7 啟動(dòng)tuxedo服務(wù)(tmboot)。

          posted on 2009-05-26 14:00 jinfeng_wang 閱讀(2529) 評(píng)論(0)  編輯  收藏 所屬分類: ZZtuxedo
          主站蜘蛛池模板: 廊坊市| 盐亭县| 缙云县| 新建县| 屯留县| 宜兰市| 兴隆县| 平陆县| 镇沅| 金秀| 梅州市| 民县| 浮梁县| 文化| 西乡县| 谷城县| 舞阳县| 河曲县| 德令哈市| 从江县| 新干县| 黑山县| 榆树市| 新宁县| 凤山市| 镶黄旗| 宁明县| 罗平县| 景谷| 阿克陶县| 东宁县| 西青区| 综艺| 洛隆县| 嘉黎县| 新乡县| 驻马店市| 商丘市| 黄骅市| 临湘市| 鞍山市|