Tuxedo使用Non-XA模式连接Oracle数据库

Normal 0 7.8 磅 0 2 false false false MicrosoftInternetExplorer4 在播布客上观看小布老师的视频 “Tuxedo 如何连接 Oracle 数据库 之后,学会了 Tuxedo Oracle 的连接,写个文章记录一下其中的要点。

该实验的网络拓扑图:

bb

Normal 0 7.8 磅 0 2 false false false MicrosoftInternetExplorer4 软件安装环境:3台主机都安装Cent OS 5.3操作系统,第1台主机作为Tuxedo的客户端,只安装Tuxedo客户端(IP:192.168.1.61);第2台主机作为Tuxedo服务器安装Tuxedo Server,还要连接Oracle服务器,还安装了Oracle Client 11gR2(IP:192.168.1.66);第三台主机作为Oracle数据库服务器,只安装Oracle 11g R2(IP:192.168.1.81)

 

实验目的:了解Tuxedo使用Non-XA方式连接Oracle数据库。通过客户端发送一个请求到Tuxedo服务器,再由Tuxedo服务器连接Oracle服务器,把客户端发送的信息写入数据库表。

实验步骤:1. 安装Tuxedo的演示程序SimpApp (使用主机1和主机2)

               2. 作一个Pro/CDemo,来连接Oracle数据库 (使用主机2和主机3)

               3. 把第1步和第2步合并到一起,完成该实验

               4. 测试并排错

 

安装前准备:

要使Tuxedo服务器,能连接到Oracle服务器。Oracle服务器的实例名称为stone,在Tuxedo服务器上安装Oracle客户端后,建立一个服务,使其能够连接到Oracle数据库服务器。

Tuxedo Server(主机2)上,先建立网络服务,再连接到Oracle数据库服务器,使用hr用户,并建立一个测试表:

网络服务的名称为stone,结果为$ORACLE_HOME/network/admin目录下的tnsnames.ora文件

[oracle@myapache ~]$ cd /u01/app/oracle/product/11.2.0/client_1/network/admin/

[oracle@myapache admin]$ ls

samples  shrept.lst  sqlnet10031011AM2455.bak  sqlnet.ora  tnsnames.ora

[oracle@myapache admin]$ vi tnsnames.ora

# tnsnames.ora Network Configuration File: /u01/app/oracle/product/11.2.0/client_1/network/admin/tnsnames.ora

# Generated by Oracle configuration tools.

 

STONE =

  (DESCRIPTION =

    (ADDRESS_LIST =

      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.81)(PORT = 1521))

    )

    (CONNECT_DATA =

      (SERVICE_NAME = stone)

    )

  )

 

建立测试表

[oracle@myapache ~]$ sqlplus hr/hr@stone

SQL*Plus: Release 11.2.0.1.0 Production on Wed Mar 10 21:17:22 2010

Copyright (c) 1982, 2009, Oracle.  All rights reserved.

 

Connected to:

Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> create table t_test1(

  2  zj number,

  3  name varchar2(20)

  4  );

Table created.

SQL> insert into t_test1 values(1, 'aaa');

1 row created.

 

SQL> commit;

Commit complete.

 

SQL> select * from t_test1;

        ZJ NAME

---------- --------------------

         1 aaa

SQL>

 

◆在主机2上还要把Oracle用户的环境变量设置好,使其能正确编译pro/c程序

[oracle@myapache ~]$ vi .bash_profile

设置好以下环境变量

# User specific environment and startup programs

ORACLE_HOME=/u01/app/oracle/product/11.2.0/client_1

export ORACLE_HOME

 

LD_LIBRARY_PATH=$ORACLE_HOME/lib

LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:$ORACLE_HOME/oracm/lib

LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/lib:/usr/lib:/usr/local/lib

export LD_LIBRARY_PATH

 

PATH=$PATH:$ORACLE_HOME/bin

export PATH

 

stty erase ^H

()

 

测试一下Pro/C是否正确

[oracle@myapache ~]$ proc

Pro*C/C++: Release 11.2.0.1.0 - Production on Thu Mar 11 01:16:42 2010

 

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

 

System default option values taken from: /u01/app/oracle/product/11.2.0/client_1/precomp/admin/pcscfg.cfg

(下面内容从略)

 

 

一、安装Tuxedo的演示程序SimpApp,并完成Tuxedo客户端访问服务器的配置

1.在主机2上安装Tuxedo10gR3 Server

建议采用字符安装界面,在安装过程中选择安装上Sample,以便运行SimpApp例子

[root@myapache ~]# cd /home/OraFile/

[root@myapache OraFile]# unzip tuxedo10gR3_32_Linux_01_x86.zip

[root@myapache OraFile]# chmod +x tuxedo10gR3_32_Linux_01_x86.bin

[root@myapache OraFile]# ./tuxedo10gR3_32_Linux_01_x86.bin -i console

Extracting the JRE from the installer archive...

Unpacking the JRE...

Extracting the installation resources from the installer archive...

Configuring the installer for this system's environment...

 

Launching installer...

(比较重要的地方)

Choose Oracle Home

------------------

    1- Create new Oracle Home

 

Enter a number: 1

Specify a new Oracle Home directory: /bea

 

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

Choose Product Directory

------------------------

    1- Modify Current Selection (/bea/tuxedo10gR3)

    2- Use Current Selection (/bea/tuxedo10gR3)

 

Enter a number: 1

Specify Product Installation Directory: /bea/tux10  (为操作方便,把安装目录修改为:/bea/tux10)

Install Samples (Y/N): Y  (选择安装 Samples)

 

2.在Tuxedo Server 上运行SimpApp例子

(1) SimpApp例子拷贝到/home/myTuxeSrv目录下

[oracle@myapache ~]$ cp -R /bea/tux10/samples/atmi/simpapp/ /home/myTuxSrv/

再拷贝环境变量

[oracle@myapache ~]$ cp /bea/tux10/tux.env  /home/myTuxSrv/simpapp/

[oracle@myapache ~]$ cd /home/myTuxSrv/simpapp/

[oracle@myapache simpapp]$ ls

README  simpcl.c  simpserv.c  tux.env  ubbsimple

[oracle@myapache simpapp]$

 

(2) 编辑simpapp的配置文件

[oracle@myapache simpapp]$ cp ubbsimple ubb

[oracle@myapache simpapp]$ vi ubb

修改结果:

#Example:

 

IPCKEY         

#               TUXCONFIG="/home/me/simpapp/tuxconfig"

#               APPDIR="/home/me/simpapp"

#Example:

                TUXDIR="/bea/tux10"

#       (c) 2003 BEA Systems, Inc. All Rights Reserved.

#ident  "@(#) samples/atmi/simpapp/ubbsimple    $Revision: 1.5 $"

 

#Skeleton UBBCONFIG file for the TUXEDO Simple Application.

#Replace the items with the appropriate values.

 

*RESOURCES

IPCKEY          123456

 

DOMAINID        simpapp

MASTER          simple

MAXACCESSERS    10

MAXSERVERS      5

MAXSERVICES     10

MODEL           SHM

LDBAL           N

 

*MACHINES

DEFAULT:

                APPDIR="/home/myTuxSrv/simpapp"

                TUXCONFIG="/home/myTuxSrv/simpapp/tuxconfig"

                TUXDIR="/bea/tux10"

 

myapache        LMID=simple

 

*GROUPS

GROUP1

        LMID=simple     GRPNO=1 PENINFO=NONE

 

*SERVERS

DEFAULT:

                CLOPT="-A"

 

simpserv        SRVGRP=GROUP1 SRVID=1

 

*SERVICES

TOUPPER

(配置文件完)

 

(3) 修改环境变量文件tux.env

[oracle@myapache simpapp]$ vi tux.env

在最后加入两行

TUXDIR=/bea/tux10; export TUXDIR

JAVA_HOME=$TUXDIR/jre; export JAVA_HOME

JVMLIBS=$JAVA_HOME/lib/i386/server:$JAVA_HOME/jre/bin

PATH=$TUXDIR/bin:$JAVA_HOME/bin:$PATH; export PATH

COBCPY=:$TUXDIR/cobinclude; export COBCPY

COBOPT="-C ANS85 -C ALIGN=8 -C NOIBMCOMP -C TRUNC=ANSI -C SEXT=cbl"; export COBOPT

SHLIB_PATH=$TUXDIR/lib:$JVMLIBS:$SHLIB_PATH; export SHLIB_PATH

LIBPATH=$TUXDIR/lib:$JVMLIBS:$LIBPATH; export LIBPATH

LD_LIBRARY_PATH=$TUXDIR/lib:$JVMLIBS:$LD_LIBRARY_PATH; export LD_LIBRARY_PATH

WEBJAVADIR=$TUXDIR/udataobj/webgui/java; export WEBJAVADIR

APPDIR=/home/myTuxSrv/simpapp; export APPDIR

TUXCONFIG=$APPDIR/tuxconfig; export TUXCONFIG

 

  (4) 在服务器本地运行simpapp例子程序

使环境变量生效

[oracle@myapache simpapp]$ . ./tux.env

[oracle@myapache simpapp]$ ls

README  simpcl.c  simpserv.c  tux.env  ubb  ubbsimple

[oracle@myapache simpapp]$ env | grep TUX

TUXCONFIG=/home/myTuxSrv/simpapp/tuxconfig

TUXDIR=/bea/tux10

[oracle@myapache simpapp]$

 

编译ubb (生成tuxconfig)

[oracle@myapache simpapp]$ tmloadcf -y ubb

[oracle@myapache simpapp]$ ls

README  simpcl.c  simpserv.c  tuxconfig  tux.env  ubb  ubbsimple  ULOG.031010

 

编译simpserv.c文件和simpcl.c文件 (生成可执行文件)

[oracle@myapache simpapp]$ buildserver -f simpserv.c -o simpserv -s TOUPPER

(我这里有一些警告信息,不影响程序运行)

[oracle@myapache simpapp]$ buildclient -f simpcl.c -o simpcl

[oracle@myapache simpapp]$ ls

README  simpcl.c  simpserv.c  tux.env  ubbsimple

simpcl  simpserv  tuxconfig   ubb      ULOG.031010

 

运行服务器端程序

[oracle@myapache simpapp]$ tmboot -y

Booting all admin and server processes in /home/myTuxSrv/simpapp/tuxconfig

INFO: Oracle Tuxedo, Version 10.3.0.0, 32-bit, Patch Level (none)

 

Booting admin processes ...

 

exec BBL -A :

        process id=11402 ... Started.

 

Booting server processes ...

 

exec simpserv -A :

        process id=11403 ... Started.

2 processes started.

[oracle@myapache simpapp]$

 

测试一下运行情况:

[oracle@myapache simpapp]$ ./simpcl hello_alei

Returned string is: HELLO_ALEI

[oracle@myapache simpapp]$

看到以上结果,程序在本地已经可以使用了

 

3.把客户端程序转移到主机1上运行

(1) 在服务器端(主机2)先做一些设置,首先关闭服务程序

[oracle@myapache simpapp]$ tmshutdown -y

Shutting down all admin and server processes in /home/myTuxSrv/simpapp/tuxconfig

Shutting down server processes ...

 

        Server Id = 1 Group Id = GROUP1 Machine = simple:       shutdown succeeded

 

Shutting down admin processes ...

 

        Server Id = 0 Group Id = simple Machine = simple:       shutdown succeeded

2 processes stopped.

[oracle@myapache simpapp]$

 

(2) 修改配置文件ubb,添加一些配置;并重新编译

[oracle@myapache simpapp]$ vi ubb

修改了以下内容(标红部分)

IPCKEY          123456

 

DOMAINID        simpapp

MASTER          simple

MAXACCESSERS    10

MAXSERVERS      5

MAXSERVICES     10

MODEL           SHM

LDBAL           N

 

*MACHINES

DEFAULT:

                APPDIR="/home/myTuxSrv/simpapp"

                TUXCONFIG="/home/myTuxSrv/simpapp/tuxconfig"

                TUXDIR="/bea/tux10"

 

myapache        LMID=simple

                MAXWSCLIENTS=5

 

*GROUPS

GROUP1

        LMID=simple     GRPNO=1 PENINFO=NONE

 

*SERVERS

DEFAULT:

                CLOPT="-A"

 

simpserv        SRVGRP=GROUP1 SRVID=1

WSL             SRVGRP=GROUP1 SRVID=10

                CLOPT="-A -- -n//192.168.1.66:3200 -m 2 -M 5 -x 5"

 

*SERVICES

TOUPPER

(配置文件完)

 

重新编译生成配置文件tuxconfig

[oracle@myapache simpapp]$ ls

access.031010  simpcl    simpserv    stderr  tuxconfig  ubb        ULOG.031010

README         simpcl.c  simpserv.c  stdout  tux.env    ubbsimple

[oracle@myapache simpapp]$ rm -rf tuxconfig  (先删除)

[oracle@myapache simpapp]$ tmloadcf -y ubb

[oracle@myapache simpapp]$ tmboot -y

Booting all admin and server processes in /home/myTuxSrv/simpapp/tuxconfig

INFO: Oracle Tuxedo, Version 10.3.0.0, 32-bit, Patch Level (none)

Booting admin processes ...

exec BBL -A :

        process id=13105 ... Started.

 

Booting server processes ...

 

exec simpserv -A :

        process id=13106 ... Started.

exec WSL -A -- -n//192.168.1.66:3200 -m 2 -M 5 -x 5 :

        process id=13107 ... Started.

3 processes started.

[oracle@myapache simpapp]$

[oracle@myapache simpapp]$ netstat -anp

可以看到WSL也已经侦听了

 

  (3) Tuxedo Client (主机1) 上运行simpapp的客户端程序

Tuxedo客户端上,也要安装Tuxedo10gR3,但只安装Tuxedo的客户端就行了,其安装目录也是:/bea/tux10;客户端程序在/home/myTuxClient/simpapp目录中运行。先拷贝simpapp例子程序和tux.env环境变量文件

[root@tuxclient ~]# cp -R /bea/tux10/samples/atmi/simpapp/ /home/myTuxClient/

[root@tuxclient ~]# cp /bea/tux10/tux.env /home/myTuxClient/simpapp/

[root@tuxclient ~]# cd /home/myTuxClient/simpapp/

[root@tuxclient simpapp]# ls

README  simpcl.c  simpserv.c  tux.env  ubbsimple

[root@tuxclient simpapp]#

 

修改tux.env环境变量,把WSL请求指向Tuxedo Server

[root@tuxclient simpapp]# vi tux.env

在最后加一行

TUXDIR=/bea/tux10; export TUXDIR

JAVA_HOME=$TUXDIR/jre; export JAVA_HOME

JVMLIBS=$JAVA_HOME/lib/i386/server:$JAVA_HOME/jre/bin

PATH=$TUXDIR/bin:$JAVA_HOME/bin:$PATH; export PATH

COBCPY=:$TUXDIR/cobinclude; export COBCPY

COBOPT="-C ANS85 -C ALIGN=8 -C NOIBMCOMP -C TRUNC=ANSI -C SEXT=cbl"; export COBOPT

SHLIB_PATH=$TUXDIR/lib:$JVMLIBS:$SHLIB_PATH; export SHLIB_PATH

LIBPATH=$TUXDIR/lib:$JVMLIBS:$LIBPATH; export LIBPATH

LD_LIBRARY_PATH=$TUXDIR/lib:$JVMLIBS:$LD_LIBRARY_PATH; export LD_LIBRARY_PATH

WEBJAVADIR=$TUXDIR/udataobj/webgui/java; export WEBJAVADIR

USNADDR=//192.168.1.66:3200; export WSNADDR

(环境变量文件完)

 

使环境变量生效,并查看是否正确

[root@tuxclient simpapp]# . ./tux.env

[root@tuxclient simpapp]# env | grep WS

WSNADDR=//192.168.1.66:3200

[root@tuxclient simpapp]#

 

编译客户端程序,加 -w 代表远程访问

[root@tuxclient simpapp]# buildclient -f simpcl.c -o client –w

[root@tuxclient simpapp]# ls

client  README  simpcl.c  simpserv.c  tux.env  ubbsimple

[root@tuxclient simpapp]# ./client bbk

Returned string is: BBK

[root@tuxclient simpapp]#

可以看到,能够完成大小写转换,代表客户端可以正确发送请求到Tuxedo服务器了。

 

Tuxedo服务器端查看simserv服务程序接受请求的情况

[oracle@myapache simpapp]$ tmadmin

tmadmin - Copyright (c) 2007-2008 Oracle.

Portions * Copyright 1986-1997 RSA Data Security, Inc.

All Rights Reserved.

Distributed under license by Oracle.

Tuxedo is a registered trademark.

 

> psr

Prog Name      Queue Name  Grp Name      ID RqDone Load Done Current Service

---------      ----------  --------      -- ------ --------- ---------------

BBL            123456      simple         0      0         0 (  IDLE )

simpserv       00001.00001 GROUP1         1      1        50 (  IDLE )

WSL            00001.00010 GROUP1        10      0         0 (  IDLE )

 

在客户端,再发送3个请求后,RqDone一列会变为4

> psr

Prog Name      Queue Name  Grp Name      ID RqDone Load Done Current Service

---------      ----------  --------      -- ------ --------- ---------------

BBL            123456      simple         0      0         0 (  IDLE )

simpserv       00001.00001 GROUP1         1      4       200 (  IDLE )

WSL            00001.00010 GROUP1        10      0         0 (  IDLE )

 

到此Tuxedo客户端和服务器端的通信设置完毕了。

再开始下一步配置前,先关闭Tuxedo服务,在主机2

[oracle@myapache simpapp]$ tmshutdown -y

Shutting down all admin and server processes in /home/myTuxSrv/simpapp/tuxconfig

Shutting down server processes ...

 

        Server Id = 10 Group Id = GROUP1 Machine = simple:      shutdown succeeded

        Server Id = 1 Group Id = GROUP1 Machine = simple:       shutdown succeeded

 

Shutting down admin processes ...

 

        Server Id = 0 Group Id = simple Machine = simple:       shutdown succeeded

3 processes stopped.

[oracle@myapache simpapp]$

 

 

二、用Tuxedo Server作为数据库的客户端,来连接Oracle数据库服务器 (使用Pro/C程序)

1.在/home/myTuxSrv/simpapp目录下编写一个Pro/C程序

[oracle@myapache simpapp]$ cd /home/myTuxSrv/simpapp/

[oracle@myapache simpapp]$ vi oracle_dome.pc

编辑以下程序

#include

#include

 

#include "sqlca.h"

 

EXEC SQL BEGIN DECLARE SECTION;

        char *uid = "hr/hr@stone";

        char name[20];

        int id;

EXEC SQL END DECLARE SECTION;

 

void sqlerr()

{

        EXEC SQL WHENEVER SQLERROR CONTINUE;

        printf("The SQLCODE is %d\n", sqlca.sqlcode);

        EXEC SQL ROLLBACK WORK RELEASE;

        exit(1);

}

 

int main(int argc, char* argv[])

{

        EXEC SQL WHENEVER SQLERROR DO sqlerr();

        EXEC SQL CONNECT :uid;

 

        id = 10;

        strcpy(name, "wilson");

 

        EXEC SQL INSERT INTO T_TEST1 VALUES(:id, :name);

        EXEC SQL COMMIT WORK RELEASE;

}

()

 

2.把.pc原程序编译为.c程序

[oracle@myapache simpapp]$ proc oracle_dome.pc

Pro*C/C++: Release 11.2.0.1.0 - Production on Thu Mar 11 01:33:26 2010

 

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

 

System default option values taken from: /u01/app/oracle/product/11.2.0/client_1/precomp/admin/pcscfg.cfg

[oracle@myapache simpapp]$ ls

access.031010  oracle_dome.lis  simpcl    simpserv.c  tuxconfig  ubbsimple

access.031110  oracle_dome.pc   simpcl.c  stderr      tux.env    ULOG.031010

oracle_dome.c  README           simpserv  stdout      ubb        ULOG.031110

[oracle@myapache simpapp]$

 

3.编译oracle_dome.c程序文件

[oracle@myapache simpapp]$ gcc oracle_dome.c -I $ORACLE_HOME/precomp/public -L $ORACLE_HOME/lib -lclntsh

[oracle@myapache simpapp]$ gcc oracle_dome.c -o ora_demo -I $ORACLE_HOME/precomp/public -L $ORACLE_HOME/lib –lclntsh

(默认生成a.out程序文件,加-o参数指定程序文件名为ora_demo)

[oracle@myapache simpapp]$ ls

access.031010  oracle_dome.c    ora_demo  simpcl.c    stderr     tux.env    ULOG.031010

access.031110  oracle_dome.lis  README    simpserv    stdout     ubb        ULOG.031110

a.out          oracle_dome.pc   simpcl    simpserv.c  tuxconfig  ubbsimple

[oracle@myapache simpapp]$ ./a.out

[oracle@myapache simpapp]$ ./ora_demo

 

执行两遍该程序后,在Oracle数据库服务器(主机3)上可以看到多了两条记录

[root@ora11gR2 OraFile]# su - oracle

[oracle@ora11gR2 ~]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on Thu Mar 11 01:42:53 2010

Copyright (c) 1982, 2009, Oracle.  All rights reserved.

 

Connected to:

Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

 

SQL> conn hr/hr;

Connected.

SQL> select * from t_test1;

        ZJ NAME

---------- --------------------

         1 aaa

        10 wilson

        10 wilson

SQL>

 

 

三、把前面两步的操作整合到一起,使Tuxedo客户端通过Tuxedo Server访问Oracle数据库

这步要把oracle_dome.pcsimpserv.c整合到一起,完成数据库访问。在Tuxedo服务器(主机2)上操作

1.把oracle_dome.pcsimpserv.c两个程序合并到一起,成为ora_proc_demo.pc程序源文件

[oracle@myapache simpapp]$ rm -rf simpserv  (先把simpserv可执行程序删除)

[oracle@myapache simpapp]$ cp simpserv.c ora_proc_demo.pc  (simpserv.c程序文件拷贝到ora_proc_demo.pc)

[oracle@myapache simpapp]$ ls

access.031010  oracle_dome.lis   README      stderr     ubb

access.031110  oracle_dome.pc    simpcl      stdout     ubbsimple

a.out          ora_demo          simpcl.c    tuxconfig  ULOG.031010

oracle_dome.c  ora_proc_demo.pc  simpserv.c  tux.env    ULOG.031110

[oracle@myapache simpapp]$

 

oracle_dome.pc中的程序合并到ora_proc_demo.pc

 

[oracle@myapache simpapp]$ vi ora_proc_demo.pc

(添加以下标红的3处修改)

#include

#include

#include        /* TUXEDO Header File */

#include     /* TUXEDO Header File */

 

/*初始化内容,添加在前面*/

#include "sqlca.h"

 

EXEC SQL BEGIN DECLARE SECTION;

        char *uid = "hr/hr@stone";

        char name[20];

        int id;

EXEC SQL END DECLARE SECTION;

 

void sqlerr()

{

        EXEC SQL WHENEVER SQLERROR CONTINUE;

        printf("The SQLCODE is %d\n", sqlca.sqlcode);

        EXEC SQL ROLLBACK WORK RELEASE;

        exit(1);

}

 

/* tpsvrinit is executed when a server is booted, before it begins

   processing requests.  It is not necessary to have this function.

   Also available is tpsvrdone (not used in this example), which is

   called at server shutdown time.

*/

 

#if defined(__STDC__) || defined(__cplusplus)

tpsvrinit(int argc, char *argv[])

#else

tpsvrinit(argc, argv)

int argc;

char **argv;

#endif

{

        /* Some compilers warn if argc and argv aren't used. */

        argc = argc;

        argv = argv;

 

        /*该函数程序启动时只运行一遍,把连接数据库的程序加在这里*/

        EXEC SQL WHENEVER SQLERROR DO slqerr();

        EXEC SQL CONNECT :uid;

 

        /* userlog writes to the central TUXEDO message log */

        userlog("Welcome to the simple server");

        return(0);

}

 

/* This function performs the actual service requested by the client.

   Its argument is a structure containing among other things a pointer

   to the data buffer, and the length of the data buffer.

*/

 

#ifdef __cplusplus

extern "C"

#endif

void

#if defined(__STDC__) || defined(__cplusplus)

TOUPPER(TPSVCINFO *rqst)

#else

TOUPPER(rqst)

TPSVCINFO *rqst;

#endif

{

 

        int i;

 

        for(i = 0; i < rqst->len-1; i++)

                rqst->data[i] = toupper(rqst->data[i]);

 

        /*该函数每接受一次请求执行一次,把写数据库的程序添加到这里*/

        id = strlen(rqst->data);

        strcpy(name, rqst->data);

 

        EXEC SQL INSERT INTO T_TEST1 VALUES(:id, :name);

        EXEC SQL COMMIT;

 

        /* Return the transformed buffer to the requestor. */

        tpreturn(TPSUCCESS, 0, rqst->data, 0L, 0);

}

()

 

2.编译合并后的程序源文件ora_proc_demo.pc

[oracle@myapache simpapp]$ proc ora_proc_demo.pc

Pro*C/C++: Release 11.2.0.1.0 - Production on Thu Mar 11 02:45:42 2010

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

 

System default option values taken from: /u01/app/oracle/product/11.2.0/client_1/precomp/admin/pcscfg.cfg

 

Error at line 16, column 10 in file ora_proc_demo.pc

#include        /* TUXEDO Header File */

.........1

PCC-S-02015, unable to open include file

Error at line 17, column 10 in file ora_proc_demo.pc

#include     /* TUXEDO Header File */

.........1

PCC-S-02015, unable to open include file

Syntax error at line 72, column 19, file ora_proc_demo.pc:

Error at line 72, column 19 in file ora_proc_demo.pc

TOUPPER(TPSVCINFO *rqst)

..................1

PCC-S-02201, Encountered the symbol "*" when expecting one of the following:

 

   , )

 

Error at line 0, column 0 in file ora_proc_demo.pc

PCC-F-02102, Fatal error while doing C preprocessing

[oracle@myapache simpapp]$

 

注意:出现了报错提示,是找不到Tuxedo的头文件。解决方法:修改Oracle Pro/C 的配置文件,路径为:$ORACLE_HOME/precomp/admin/pcscfg.cfg

[oracle@myapache simpapp]$ vi /u01/app/oracle/product/11.2.0/client_1/precomp/admin/pcscfg.cfg

添加标红内容:

sys_include=($ORACLE_HOME/precomp/public,/usr/include,/usr/lib/gcc/i386-redhat-linux/4.1.1/include,/usr/lib/gcc/i386-redhat-linux/3.4.5/include,/usr/lib/gcc-lib/i386-redhat-linux/3.2.3/include,/usr/lib/gcc/i586-suse-linux/4.1.2/include,/usr/lib/gcc/i586-suse-linux/4.3/include,/bea/tux10/include)

ltype=short

()

 

再次编译合并后的.pc程序文件,成功

[oracle@myapache simpapp]$ proc ora_proc_demo.pc

Pro*C/C++: Release 11.2.0.1.0 - Production on Thu Mar 11 02:54:46 2010

 

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

 

System default option values taken from: /u01/app/oracle/product/11.2.0/client_1/precomp/admin/pcscfg.cfg

[oracle@myapache simpapp]$ ls

access.031010  oracle_dome.lis  ora_proc_demo.lis  simpcl.c    tuxconfig  ULOG.031010

access.031110  oracle_dome.pc   ora_proc_demo.pc   simpserv.c  tux.env    ULOG.031110

a.out          ora_demo         README             stderr      ubb

oracle_dome.c  ora_proc_demo.c  simpcl             stdout      ubbsimple

[oracle@myapache simpapp]$

 

可以看到已经生成了ora_proc_demo.c程序文件,但要用Tuxedobuildserver命令来编译,这里有几点要注意:

Tuxedoinclude目录中也有sqlca.h头文件,为防止冲突,可以把它们移走

[oracle@myapache simpapp]$ ls /bea/tux10/include/sql*

/bea/tux10/include/sqlca.h    /bea/tux10/include/sqlda.h    /bea/tux10/include/sqlcode.h

重命名为以下文件:

[oracle@myapache simpapp]$ ls /bea/tux10/include/sql*

/bea/tux10/include/sqlca.h.2010    /bea/tux10/include/sqlda.h.2010

/bea/tux10/include/sqlcode.h.2010

 

编译生成可执行文件

[oracle@myapache simpapp]$ . ./tux.env

[oracle@myapache simpapp]$ buildserver -f ora_proc_demo.c -o simpserv -s TOUPPER

(出现错误提示)

需要把Oracle的库连接过来

[oracle@myapache simpapp]$ buildserver -f ora_proc_demo.c -o simpserv -s TOUPPER -l "-I$ORACLE_HOME/precomp/public -L$ORACLE_HOME/lib -lclntsh"

(有一些警告提示,不影响程序使用)

[oracle@myapache simpapp]$ ls

access.031010  oracle_dome.lis  ora_proc_demo.lis  simpcl.c    stdout     ubbsimple

access.031110  oracle_dome.pc   ora_proc_demo.pc   simpserv    tuxconfig  ULOG.031010

a.out          ora_demo         README             simpserv.c  tux.env    ULOG.031110

oracle_dome.c  ora_proc_demo.c  simpcl

已经生成了simpserv可执行程序

 

3.测试

Oracle数据库服务器(主机3)上,以sysdba登录sqlplus,执行以下语句查看连接的用户情况

SQL> select sid, serial#, username from v$session;

SID    SERIAL# USERNAME

---------- ---------- ------------------------------

        34          3

        40          1

        41        362 SYS

现在只有一个SYS用户

 

Tuxedo Server上启动simpserv服务程序

[oracle@myapache simpapp]$ tmboot -y

Booting all admin and server processes in /home/myTuxSrv/simpapp/tuxconfig

INFO: Oracle Tuxedo, Version 10.3.0.0, 32-bit, Patch Level (none)

 

Booting admin processes ...

 

exec BBL -A :

        process id=19565 ... Started.

 

Booting server processes ...

 

exec simpserv -A :

        process id=19566 ... Started.

exec WSL -A -- -n//192.168.1.66:3200 -m 2 -M 5 -x 5 :

        process id=19567 ... Started.

3 processes started.

[oracle@myapache simpapp]$

 

Tuxedo服务已经启动,在Oracle数据库服务器(主机3)上,再次执行以下语句

SQL> select sid, serial#, username from v$session;

       SID    SERIAL# USERNAME

---------- ---------- ------------------------------

        26          1

        29       2386 HR

        30       2052

        31          3

        34          3

        40          1

        41        362 SYS

        43         15

可以看到HR用户已经连接上来了

 

在主机1上发送2个请求

[root@tuxclient simpapp]# ./client aleialei

Returned string is: ALEIALEI

[root@tuxclient simpapp]# ./client 垃圾广告

Returned string is: BOO垃圾广告

 

在主机3上可以看到结构

SQL> select * from HR.t_test1;

        ZJ NAME

---------- --------------------

         1 aaa

        10 wilson

        10 wilson

         8 ALEIALEI

        11 垃圾广告

 

至此本实验完成。

 


fj.png绘图1.gif

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

转载于:http://blog.itpub.net/26712/viewspace-629275/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值