linux oracle proc 配置文件,Linux下进行Proc开发

本文详细介绍如何在Linux环境下配置Proc开发环境,并提供一个简单的测试示例,包括配置.bash_profile和pcscfg.cfg文件的方法。
AI助手已提取文章相关产品:

之前在《VC6.0下搭建proc开发环境》文章中有讲到如何在Windows平台下,在Visual C++ 6.0开发工具上如何搭建Proc的开发环境。这里讲一下如何在Linux下搭建Proc开发环境,同时给出一个简单的例子

如何安装Oracle之类的就不说了,下面的流程是建立在你安装好Oracle的基础上的,Linux下如何安装Oracle请自行搜索

使用Oracle用户在Linux平台进行测试

准备测试数据

先创建一张测试数据表,并且在表中插入2条测试数据

create table tuser(username varchar(10), userdesc varchar(100));

insert into tuser t values('xumenger', 'www.xumenger.com');

insert into tuser t values('test', 'www.test.com');

配置.bash_profile文件

.bash_profile在~目录下,下面的内容需要根据自己环境上的安装情况进行适应性调整

# .bash_profile

# Get the aliases and functions

if [ -f ~/.bashrc ]; then

. ~/.bashrc

fi

# User specific environment and startup programs

export TMP=/tmp

export TMPDIR=$TMP

export LD_ASSUME_KERNEL=2.6.32

export ORACLE_BASE=/home/oracle/oracle

export ORACLE_HOME=/home/oracle/oracle/product/10201

export TNS_ADMIN=$ORACLE_HOME/network/admin

export ORACLE_OWNER=oracle

export LANG=en_US

export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK

export ORACLE_SID=trade

export PATH=$PATH:$HOME/bin:$ORACLE_HOME/bin:/bin:/usr/bin:/usr/local/bin:/sbin

export LD_LIBRARY_PATH=/lib:/usr/lib:/usr/local/lib:$ORACLE_HOME/lib

export ORA_NLS33=$ORACLE_HOMe/nls/admin/data

export CLASSPATH=$ORACLE_HOME/rdbms/jlib:$ORACLE_HOME/network/jlib

配置pcscfg.cfg文件

pcscfg.cfg文件的目录为:$ORACLE_HOME/precomp/admin/pcscfg.cfg

主要是在该文件中加上proc的库文件及oracle的home目录

sys_include=($ORACLE_HOME/precomp/public,/usr/include,/usr/lib/gcc/x86_64-redhat-linux/4.4.7/include,/usr/lib64/gcc/x86_64-suse-linux/4.1.0/include,/usr/lib64/gcc/x86_64-suse-linux/4.1.2/include,/usr/lib64/gcc/x86_64-suse-linux/4.3/include,/usr/lib/gcc/x86_64-redhat-linux/4.4.4/include/stddef.h)

ltype=short

define=__x86_64__

编写测试程序

实现如下测试程序

/*test.pc*/

#include

#include

EXEC SQL INCLUDE sqlca;

//在这里可以声明Oracle数据类型

EXEC SQL BEGIN DECLARE SECTION;

varchar username[20];

varchar password[20];

EXEC SQL END DECLARE SECTION;

int main(void)

{

strcpy(username.arr, "trade");

username.len = strlen("trade");

strcpy(password.arr, "trade");

password.len = strlen("trade");

//执行下面SQL和数据库建立连接

EXEC SQL CONNECT :username IDENTIFIED By :password;

if(0 != sqlca.sqlcode){

printf("login failed!\n");

return -1;

}

printf("login success!\n");

//以下测试需要依赖于数据库中只有两条数据

EXEC SQL BEGIN DECLARE SECTION;

char name[2][11];

char desc[2][101];

EXEC SQL END DECLARE SECTION;

EXEC SQL select t.username,

t.userdesc

into

:name,

:desc

from tuser t

where rownum in (1,2);

if(0 == sqlca.sqlerrd[2]){

printf("查询tuser表出错!\n");

return -1;

}

int i;

for(i=0; i<2; i++){

printf("user%d, name=%s, desc=%s\n", i, name[i], desc[i]);

}

return 0;

}

编译test.pc程序

472865ffcaadc996b7f883ad10e4eb92.png

在当前目录下生成test.lis和test.c文件

编译test.c程序

3a3aad56238c6c9a0e4f2e63babed17b.png

因为编译时要用到Oracle库,该库不在默认路径,需要手动指定

$ gcc test.c -o test -L /home/oracle/oracle/product/10201/lib/ -l clntsh

测试程序

917b7df8aee19562f4e1568664a6cd27.png

程序出现无响应

补充说明,中间出现过test程序无响应的情况,解决方法如下

$ ps -A | grep test

15074 pts/3 00:00:00 test

//查看该进程的PID

$ kill 15074

//强杀进程

另外可以使用top命令查看当前系统中的进程信息,类似于Windows下的任务管理器

另外,为什么进程无法退出来,其实完全可以拿GDB来调试分析(阻塞?死锁?死循环?)

经过排查发现是在登录的地方卡住导致的,使用PLSQL登录可以复现这个问题

3439163c1503a9a2f67d71b73dfb4600.png

并不是这个测试程序导致的,而是其他人对数据库进行压力测试导致的,最粗暴的解决方法就是重启Linux

重启后执行下面的命令

$ sqlplus ‘/as sysdba’

SQL> startup

但是报错:startupORA-27102: out of memory。然后参考《Oracle启动报错ORA-27102解决》解决问题

然后启动数据库监听

lsnrctl start

如此,可成功登录Oracle!

参考资料

您可能感兴趣的与本文相关内容

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值