Heim >Datenbank >MySQL-Tutorial >Linux下OCI基础:配置Instant Client连Oracle数据库

Linux下OCI基础:配置Instant Client连Oracle数据库

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOriginal
2016-06-07 16:54:43958Durchsuche

前段时间有位兄弟在我博客上找到一篇我以前写的用OCI链接oracle数据库配置方法的帖子,因为只是随手记录,那篇文章里面很多东西都

Linux下OCI连Oracle的基础----配置Instant Client连接oracle数据库

前段时间有位兄弟在我博客上找到一篇我以前写的用OCI链接oracle数据库配置方法的帖子,因为只是随手记录,那篇文章里面很多东西都没交代清楚,我看得懂人家看起来就云里雾里。oracle声名在外又不是盖的,而那位老兄被上面逼得很急,加我qq问了我三四天总算才基本搞定OCI链接oralce数据库。

也不能怪那个老兄,不像用C连mysql很简单,官方文档汉化很全很详细,市面上销售的mysql书籍很多都有关于C连mysql数据库的例子和相关介绍。想想当初我弄C通过OCI接口连oracle数据库去新华书店/当当网把oracle有关的书籍找了个遍,全部都是介绍java,php,多奶等语言连oracle的例子介绍,仅仅只有一本《Oracle Spatial与OCI高级编程》有一些OCI的介绍,唯一的这本书对怎么配置OCI连接环境也只字不提。

oracle官方文档全英文还藏着捏着生怕别人看到,相对mysql的C详细汉化文档完全让人吐血;网上搜索也基本只能搜索到windows下的配置方法,linux下基本没有,我当时就是根据windows下配置方法和一些英文文档一步一步弄出来的。为了不让后来人重蹈那位老兄的覆辙,通过这篇文章,我从零开始一步一步详细地教大家在linux下用C语言通过OCI连接oracle数据库。

要说明一下,oracle有对应的client客户端安装包,但那个标准client包不但巨肥有400多M,把七七八八的东西全加进去了,而且在linux下限制很多发版安装不了(我记得Fedora就不行)。

首先,去oracle官网下载C语言的库文件和头文件网址如下,,选择对应的Instant Client版本(我下载的都是zip包,没有下载rpm包,rpm包应该安装的时候就把那些东西配置好了):

下面是linux i386版本的

Instant Client Package - Basic     里面包含了动态库文件 libclntsh.so.11.1(最新版本可能不一样) 并将其加载到动态库搜索路径中去,这里就不说详细步骤了,有疑问百度/狗狗搜索,实在不行在下面留言。

*Instant Client Package - SDK     这个则是包含的头文件

*Instant Client Package - SQL*Plus   sqlplus这个东西最好还是下一个装上,试验客户端是否配置好,查看sql语句执行结果都需要他。

下载文件路径设置:

/home/oracle/lib 存放Basic和sqlplus的各种库文件,因此在/etc/ld.so.conf文件中添加路径/home/oracle/lib ,还有就是在当前文件下为libclntsh.so.11.1库文件建个软连接 ln -s libclntsh.so.11.1 libclntsh.so 让代码连接动态库的时候能找到库文件。

/home/oracle/include 存放SDK的头文件。

配置好以后发现在终端运行sqlplus链接oracle数据库错误:ERROR:ORA-12541: TNS:no listener  网络上一搜索都说是没有配置好oracle数据库的监听器或者是监听器没有启动,而那太oracle10g数据库的监听器明明启动了,而且网内另外一台windows机器安装了oracle client客户端用sqlplus能链接并操作数据库。

连sqlplus都报一样的错误那就不是sqlplus或者是oci的问题了,是instant的环境配置问题鸟。在百度/狗狗上搜索一通,发现配置oracle的instant,要配置一个环境变量参数:ORACLE_HOME 。用export命令只对当前运行的系统有效,重启系统后就没了,因此要做到一次配置永久生效就要编辑 ~/.bashrc 文件,在文件末尾加上一句:

export ORACLE_HOME=/home/oracle/lib

注:ORACLE_HOME 环境变量的路径是解压 Instant Client Package - Basic zip包的解压路径,路径下包含了从Basic包里解压出来的so文件jar文件等。

最后在 $ORACLE_HOME/network/admin 目录(没有就新建)下新建一个oracle配置文件tnsnames.ora文件 ,我的tnsnames.ora是从其他机器上直接拷过来的,内容如下:

# tnsnames.ora Network Configuration File: /home/oracle/oracle/product/10.2.0/db_1/network/admin/tnsnames.ora

TEST =

(DESCRIPTION =

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

(CONNECT_DATA =

(SERVER = DEDICATED)

(SERVICE_NAME = test)

)

)

EXTPROC_CONNECTION_DATA =

(DESCRIPTION =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))

)

(CONNECT_DATA =

(SID = PLSExtProc)

(PRESENTATION = RO)

)

)

配置好上面这些后,注销用户重新登录,让 ORACLE_HOME环境变量生效,检查方法很简单,分别在终端输入命令:

[mgqw@localhost ~]$ echo $ORACLE_HOME

/home/oracle

如果像上面那样有路径输出则说明配置成功了,如果没有输出那重新再编辑一下 ~/.bashrc 看看哪里出了问题吧。

检查完成以后运行sqlplus登录数据库成功!例子如下,运行C程序链接数据库也成功!总算把环境配好了。

[mgqw@localhost ~]$ sqlplus uname/pswd@dbname

SQL*Plus: Release 11.1.0.7.0 - Production on Sun May 31 14:22:00 2009

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

Connected to:

Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bit Production

With the Partitioning, OLAP and Data Mining options

SQL> select * from t1;

A        B

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

0        3

2        3

20        3

21        3

8        1

9        1

30       32

-1        2

1        4

3        6

5        8

A        B

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

7       10

22        2

26        2

14 rows selected.

下面补偿一点配置文件说明:

tnsnames.ora文件放在客户端机器上,并且在默认状态下存储在ORACLE_HOME/network/admin目录中。 sqlnet.ora文件控制着客户端Oracle Net Services的行为,例如跟踪级别和会话特性。我们已经知道了listener.ora和init.ora文件的用途和位置。

从根本上讲,当客户发出请求时,通过使用tnsnames.ora文件首先解析Oracle Net Services的名称。tnsnames.ora文件中的参数将该请求指引到适当的数据库节点。监听器进程监听客户请求,并且将其与一个服务器进程相连接。该请求将被处理,其结果被返回到客户端机器。

linux

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:Ubuntu编译MySQL5Nächster Artikel:Ubuntu 9.04安装Oracle XE