Instant Client连接oracle数据库,直接连接会出现问题,必须要设置环境变量,下面就让我们来了解一下Instant Client连接oracle的环境变量设置方法。
最近写个代码用OCI在局域网内链接oracle数据库,开始天真的以为像链mysql数据库那样简单:下载了头文件和库文件开发包后就可以直接链接数据库了,结果我发现我错了,oracle声名在外果然不是盖的。
首先,去oracle官网下载C语言的库文件和头文件网址如下,选择对应的Instant Client版本(我下载的都是zip包,没有下载rpm包,rpm包应该安装的时候就把那些东西配置好了
http://www.oracle.com/technology/software/tech/oci/instantclient/index.html
下面是linux i386版本的
http://www.oracle.com/technology/software/tech/oci/instantclient/htdocs/linuxsoft.html
Instant Client Package - Basic 里面包含了动态库文件 libclntsh.so.11.1(***版本可能不一样) 并将其加载到动态库搜索路径中去,这里就不说详细步骤了,有疑问百度/狗狗搜索,实在不行在下面留言。
*Instant Client Package - SDK 这个则是包含的头文件
运行程简单的C链接序报错: ORA-12541: TNS:no listener 网络上一搜索都说是没有配置好oracle数据库的监听器或者是监听器没有启动,而那太oracle10g数据库的监听器明明启动了,而且网内另外一太机器安装了oracle client客户端用sqlplus能链接并操作数据库(那个标准client快500M,太肥了,不想装),于是我也下载了sqlplus包: *Instant Client Package - SQL*Plus 配置好以后发现在终端运行sqlplus命令链接oracle数据库错误依旧:
ERROR:
ORA-12541: TNS:no listener
连sqlplus都报一样的错误那就不是oci的问题了,是instant的环境配置问题鸟。在百度/狗狗上搜索一通,发现配置oracle的instant,要配置两个环境变量参数:TNS_ADMIN 和 ORACLE_HOME 。用export命令只对当前运行的系统有效,重启系统后就没了,因此要做到一次配置***生效就要编辑 ~/.bashrc 文件,在文件末尾加上两句:
- export TNS_ADMIN=/home/oracle/network/admin
- export ORACLE_HOME=/home/oracle
注:ORACLE_HOME 环境变量的路径是解压 Instant Client Package - Basic zip包的解压路径,路径下包含了从Basic包里解压出来的so文件jar文件等。
TNS_ADMIN环境则是标识tnsnames.ora文件的路径,在 ORACLE_HOME 路径下新建立network文件夹,然后在network文件夹内新建admin文件夹在admin文件夹内有 tnsnames.ora 文件即可,至于为什么TNS_ADMIN要这么设置,oracle默认路径的层次结构就是这样,因此我也照抄,理论上说TNS_ADMIN 没必要一定要在 ORACLE_HOME 路径里面,我没试过,谁有兴趣可以去试试,我的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 和 TNS_ADMIN 两个环境变量生效,检查方法很简单,分别在终端输入命令:
- [mgqw@localhost cutest]$ echo $ORACLE_HOME
- /home/oracle
- [mgqw@localhost cutest]$ echo $TNS_ADMIN
- /home/oracle/network/admin
如果像上面那样有路径输出则说明配置成功了,如果没有输出那重新再编辑一下 ~/.bashrc 看看哪里出了问题吧。
检查完成以后运行sqlplus登录数据库成功,运行C程序链接数据库也成功。
【编辑推荐】