该实验的网络拓扑图:
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/C的Demo,来连接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.pc和simpserv.c整合到一起,完成数据库访问。在Tuxedo服务器(主机2)上操作
1.把oracle_dome.pc和simpserv.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程序文件,但要用Tuxedo的buildserver命令来编译,这里有几点要注意:
Tuxedo的include目录中也有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 垃圾广告
至此本实验完成。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26712/viewspace-629275/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/26712/viewspace-629275/