<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    談笑有鴻儒,往來無白丁

    在恰當(dāng)?shù)臅r(shí)間、地點(diǎn)以恰當(dāng)?shù)姆绞奖磉_(dá)給恰當(dāng)?shù)娜?..  閱讀的時(shí)候請注意分類,佛曰我日里面是談笑文章,其他是各個(gè)分類的文章,積極的熱情投入到寫博的隊(duì)伍中來,支持blogjava做大做強(qiáng)!向dudu站長致敬>> > 我的微博敬請收聽
    前言
    在銀行、電信、金融等行業(yè)的大型計(jì)算機(jī)應(yīng)用系統(tǒng)中,中間件的使用日益普及,中間件已與操作系統(tǒng)、數(shù)據(jù)庫并列為三大基礎(chǔ)軟件。BEA Tuxedo作為最優(yōu)秀的中間件產(chǎn)品,在我國的很多行業(yè)中廣泛使用,本文通過一個(gè)簡單的例子介紹如何在TUXEDO中訪問ORACLE數(shù)據(jù)庫。
    在兩層的C/S結(jié)構(gòu)中,客戶端直接訪問數(shù)據(jù)庫,當(dāng)采用TUXEDO中間件后,形成三層結(jié)構(gòu)。這時(shí),客戶端不直接訪問數(shù)據(jù)庫,而是改為調(diào)用中間件TUXEDO服務(wù)端上的服務(wù),由TUXEDO服務(wù)端訪問數(shù)據(jù)庫,并把結(jié)果返回給客戶端。TUXEDO服務(wù)端可以和ORACLE在同一臺服務(wù)器上,也可以在不同的機(jī)器上,如果在不同的機(jī)器上,在TUXEDO的服務(wù)端所在的機(jī)器要安裝一個(gè)ORACLE的客戶端。
    TUXEDO服務(wù)端與ORACLE數(shù)據(jù)庫連接有兩種方式:
    1、不通過XA接口直接互連。適用于整個(gè)系統(tǒng)只有一個(gè)數(shù)據(jù)庫的情況。
    2、通過XA接口互連,對整個(gè)系統(tǒng)有一個(gè)數(shù)據(jù)庫或多個(gè)數(shù)據(jù)庫都適用,建議采用,本文介紹這種互連的配置方法。
    系統(tǒng)說明
    TUXEDO版本:7.1 安裝目錄 d:\tuxedo71
    ORACLE版本:8.1.5 安裝目錄 d:\ora81
    操作系統(tǒng): win2000
    配置的步驟
    一、ORACLE的的配置
    1.用internal用戶(缺省的口令是oracle)進(jìn)入SQLPLUS
    C:\>sqlplus internal/oracle
    2.運(yùn)行ORACLE的安裝路徑下的/rdbms/admin/xaview.sql
    SQL> @d:\ora81\rdbms\admin\xaview.sql
    3.授權(quán)
    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)連接并授權(quán)
    SQL>connect system/manager
    SQL>grant select any table to public;
    二、TUXEDO的配置
    1.修改TUXEDO安裝路徑的udataobj目錄下的RM文件,把以O(shè)racle_XA:xaosw:開頭的一行用#注釋掉,并加入一行:
    Oracle_XA;xaosw;d:\ora81\rdbms\xa\oraxa8.lib d:\ora81\precomp\lib\msvc\orasql8.lib
    如果是在UNIX環(huán)境下,則為:
    Oracle_XA:xaosw:-L${ORACLE_HOME}/lib -lclntsh
    2. 在TUXEDO用戶下創(chuàng)建TMS文件:TMS_ORA8i,TUXEDO通過TMS_ORA8i與ORACLE數(shù)據(jù)庫采用XA協(xié)議進(jìn)行通訊
    buildtms -o d:\tuxedo71\bin\TMS_ORA8i -r Oracle_XA
    ?
    注意:如果TUXEDO 服務(wù)端與ORACLE數(shù)據(jù)庫不在同一臺服務(wù)器上,可能會提示找不到 庫文件oraxa8.lib和orasql8.lib,可到ORACLE數(shù)據(jù)庫的服務(wù)端相應(yīng)目錄下把這兩個(gè)文件拷到當(dāng)前機(jī)器ORACLE的客戶端下的對應(yīng)目錄下。
    3. 配置 UBBCONFIG
    (1)在*MACHINES節(jié)中增加:
    TLOGDEVICE = "/home/oracle/temp/simpdb/TLOG"
    TLOGNAME=TLOG
    TLOGSIZE=200
    (2)改*GROUPS節(jié)的配置為:(scott/tiger為本數(shù)據(jù)庫所采用的用戶及口令,可根據(jù)需要更改)
    *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內(nèi)容如下,用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:\test\tuxconfig"
    TUXDIR="d:\tux71"
    TLOGDEVICE = "d:\test\TLOG"
    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.重命名下列文件,因?yàn)橄铝形募cORACLE帶的文件名有沖突,所以要改名。
    (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創(chuàng)建TLOG文件,TUXEDO用一個(gè)文件TLOG記錄對數(shù)據(jù)庫操作的日志。用于協(xié)調(diào)分布式數(shù)據(jù)庫的提交與回滾。
    D:\>tmadmin
    >crdl -b 500 -z d:\test\TLOG
    >crlog -m simple
    >q
    ?
    三、服務(wù)端的程序:test.pc
    功能:根據(jù)客戶端傳的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_ename[11]="";
    ?
    EXEC SQL VAR ac_ename IS STRING(11);?
    EXEC SQL END DECLARE SECTION;
    ?
    ?
    TEST(TPSVCINFO *rqst)
    {
    ?
    /*接收客戶端來的數(shù)據(jù)*/
    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=%s\n",sqlca.sqlcode,(char *)sqlca.sqlerrm.sqlerrmc);
    strcpy(rqst->data,sqlca.sqlerrm.sqlerrmc);
    tpreturn( TPFAIL, 0, rqst->data, 0, 0 );
    }
    /*把取出的結(jié)果返回給客戶端*/
    strcpy(rqst->data,ac_ename);
    tpreturn( TPSUCCESS, 0, rqst->data, 0, 0 );
    }
    四、編寫客戶端程序: testcli.c
    功能:調(diào)用TUXEDO服務(wù)端的服務(wù)TEST,取EMPNO=1000所對應(yīng)的ENAME的值,并顯示出來
    #include <stdio.h>
    #include "atmi.h"?
    ?
    main(argc, argv)
    {
    long reqlen=1024;
    char *reqbuf;
    ?
    /* 與TUXEDO服務(wù)端建立連接 */
    if (tpinit((TPINIT *) NULL) == -1)
    {
    (void) fprintf(stderr, "Tpinit failed\n");
    exit(1);
    }
    /* 分配發(fā)送緩沖區(qū)*/
    reqbuf = (char *)tpalloc("STRING",NULL,reqlen);
    if ( reqbuf == (char *)NULL)
    {
    printf("tpalloc failed\n");
    tpterm();
    }
    strcpy(reqbuf,"1000");
    /*調(diào)用TUXEDO的服務(wù)TEST*/
    if (tpcall("TEST", (char *)reqbuf, 0L, (char **)&reqbuf, (long *)&reqlen, 0< 0 )
    {
    printf("tpcall failed,tperrno=%ld,tperrtext=%s\n",tperrno,tpstrerror(tperrno));
    tpfree(reqbuf);
    tpterm();
    exit(1);
    }
    printf("name=%s\n",reqbuf);
    tpfree(reqbuf);
    tpterm();
    return(0);
    }
    五、編譯服務(wù)端程序
    1.用ORACLE的PROC把test.pc 文件預(yù)編譯成test.c文件
    d:\test> proc test.pc include=%TUXDIR%/include
    2.用buildserver把test.c編譯成可執(zhí)行文件,注意-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
    應(yīng)能看到所有的SERVER都啟動成功。這時(shí),我們的服務(wù)端程序test 會自動與ORACLE數(shù)據(jù)庫建立連接,并一直保持這個(gè)連接,直到TUXEDO系統(tǒng)或ORACLE數(shù)據(jù)庫關(guān)閉。所以在我們的程序test.pc中看不到與數(shù)據(jù)庫連接的語句,因?yàn)楝F(xiàn)在與數(shù)據(jù)庫的連接由TUXEDO自動管理。如果TMS_ORA8i啟動失敗會在當(dāng)前目錄生成一個(gè)*.trc文件,記錄失敗的原因,同時(shí)TUXEDO的ULOG文件中也會有一些錯(cuò)誤信息。可參考這些錯(cuò)誤信息進(jìn)行錯(cuò)誤分析。
    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.
    八、運(yùn)行客戶端程序
    運(yùn)行后應(yīng)能看到服務(wù)端返回的結(jié)果。
    d:\test> testcli
    name=bill
    到此,整個(gè)配置過程就大功告成了。ORACLE的其他版本的配置及在其他操作系統(tǒng)上的配置基本與本文所述差不多,差別主要在RM文件中所連的庫文件可能會不樣。


    忘記從哪里搞來的,不過也是中間件的使用,看看吧留著以后用
    posted on 2006-09-15 15:02 壞男孩 閱讀(911) 評論(0)  編輯  收藏 所屬分類: 資源整合
    主站蜘蛛池模板: 日韩高清在线免费看| 四虎影视成人永久免费观看视频 | 99久久99久久免费精品小说| 岛国岛国免费V片在线观看| 人妻仑乱A级毛片免费看| 免费中文字幕视频| yellow免费网站| 久久er国产精品免费观看8| 成人片黄网站色大片免费观看cn| CAOPORN国产精品免费视频| 最近中文字幕免费大全| 国产精品免费看久久久| 足恋玩丝袜脚视频免费网站| 曰批视频免费30分钟成人| 野花高清在线电影观看免费视频| 在线a人片天堂免费观看高清 | 一级毛片在线免费播放| 亚洲免费一区二区| 久久精品国产免费| 久久免费动漫品精老司机| 13一14周岁毛片免费| 成人性生交大片免费看无遮挡| 在线观看免费毛片| 免费人成网站在线高清| 亚洲小说区图片区另类春色| 久久久亚洲精品国产| 亚洲国产成人精品无码一区二区| 最新国产成人亚洲精品影院| 国产成人亚洲综合在线| A国产一区二区免费入口| 一级毛片在线免费观看| 免费精品人在线二线三线区别| 国产免费AV片无码永久免费| 伊人婷婷综合缴情亚洲五月| 亚洲高清美女一区二区三区| 亚洲午夜无码久久久久小说 | 亚洲三级视频在线| 国产精品亚洲专一区二区三区| 中文字幕高清免费不卡视频| 50岁老女人的毛片免费观看| 国产成人在线观看免费网站 |