CentOS6配置odbc访问Oracle

安装unixODBC

yum install unixODBC

安装Oracle odbc client

到oracle官网下载连接为http://www.oracle.com/technetwork/topics/linuxx86-64soft-092277.html

下载如下四个文件

  • oracle-instantclient11.2-basic-11.2.0.4.0-1.x86_64.rpm
  • oracle-instantclient11.2-odbc-11.2.0.4.0-1.x86_64.rpm
  • oracle-instantclient11.2-devel-11.2.0.4.0-1.x86_64.rpm
  • oracle-instantclient11.2-sqlplus-11.2.0.4.0-1.x86_64.rpm

执行yum localinstall oracle-instantclient11.2-* 安装

配置环境变量

/usr/lib/oracle/11.2/client64目录下执行 mkdir -p network/admin

配置如下环境变量

export ORACLE_HOME=/usr/lib/oracle/11.2/client64
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib64:$LD_LIBRARY_PATH
export TNS_ADMIN=$ORACLE_HOME/network/admin
export PATH=$PATH:$ORACLE_HOME/bin

验证oracle odbc 驱动

# dltest /usr/lib/oracle/11.2/client64/lib/libsqora.so.11.1
[dltest] ERROR dlopen: file not found

发现报错了 执行

# ldd /usr/lib/oracle/11.2/client64/lib/libsqora.so.11.1
	linux-vdso.so.1 =>  (0x00007fffd77ff000)
	libdl.so.2 => /lib64/libdl.so.2 (0x00007f19777f5000)
	libm.so.6 => /lib64/libm.so.6 (0x00007f1977570000)
	libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f1977353000)
	libnsl.so.1 => /lib64/libnsl.so.1 (0x00007f197713a000)
	libclntsh.so.11.1 => /usr/lib/oracle/11.2/client64/lib/libclntsh.so.11.1 (0x00007f19747ca000)
	libodbcinst.so.1 => not found
	libc.so.6 => /lib64/libc.so.6 (0x00007f1974436000)
	/lib64/ld-linux-x86-64.so.2 (0x00007f1977bce000)
	libnnz11.so => /usr/lib/oracle/11.2/client64/lib/libnnz11.so (0x00007f1974068000)
	libaio.so.1 => /lib64/libaio.so.1 (0x00007f1973e67000)

可以看到 libodbcinst.so.1 => not found ,这是redhat的一个问题,参考:https://bugzilla.redhat.com/show_bug.cgi?id=498311

解决该问题:

cd /usr/lib64
ln -s libodbcinst.so.2 libodbcinst.so.1

为libodbcinst.so.2文件创建一个软连接 libodbcinst.so.1,再执行:

ldd /usr/lib/oracle/11.2/client64/lib/libsqora.so.11.1
	linux-vdso.so.1 =>  (0x00007fff735ff000)
	libdl.so.2 => /lib64/libdl.so.2 (0x00007f3a7da69000)
	libm.so.6 => /lib64/libm.so.6 (0x00007f3a7d7e4000)
	libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f3a7d5c7000)
	libnsl.so.1 => /lib64/libnsl.so.1 (0x00007f3a7d3ae000)
	libclntsh.so.11.1 => /usr/lib/oracle/11.2/client64/lib/libclntsh.so.11.1 (0x00007f3a7aa3e000)
	libodbcinst.so.1 => /usr/lib64/libodbcinst.so.1 (0x00007f3a7a82d000)
	libc.so.6 => /lib64/libc.so.6 (0x00007f3a7a499000)
	/lib64/ld-linux-x86-64.so.2 (0x00007f3a7de42000)
	libnnz11.so => /usr/lib/oracle/11.2/client64/lib/libnnz11.so (0x00007f3a7a0cb000)
	libaio.so.1 => /lib64/libaio.so.1 (0x00007f3a79eca000)
	libltdl.so.7 => /usr/lib64/libltdl.so.7 (0x00007f3a79cc1000)

没有再报 not found。

# dltest /usr/lib/oracle/11.2/client64/lib/libsqora.so.11.1
SUCCESS: Loaded /usr/lib/oracle/11.2/client64/lib/libsqora.so.11.1

验证通过。

配置odbc

在$ORACLE_HOME/network/admin目录中创建文件tnsnames.ora

LOCAL_SERVICE_NAME =
    (DESCRIPTION =
        (ADDRESS_LIST =
            (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.1)(PORT = 1521))
        )
    (CONNECT_DATA =
        (SERVICE_NAME = oradb)
    )
)

/etc/odbcinst.ini 文件:

[Oracle]
Description     = ODBC for Oracle
Driver          = /usr/lib/oracle/11.2/client64/lib/libsqora.so.11.1
FileUsage       = 1
Driver Logging  = 7

/etc/odbc.init 文件:

[test]
Driver     = Oracle                                           ## 对应odbcinst.ini文件中的第一行[Oracle]
DSN        = OracleODBC-11g
ServerName = LOCAL_SERVICE_NAME      ## tnsnames.ora文件中对应的本地服务名
UserID     = oracle用户名
Password   =oracle密码

执行

# isql test
+---------------------------------------+
| Connected!                            |
|                                                 |
| sql-statement                         |
| help [tablename]                      |
| quit                                        |
|                                               |
+---------------------------------------+

select * from v$version;
+---------------------------------------------------------------------------------+
| BANNER                                                                          |
+---------------------------------------------------------------------------------+
| Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production    |
| PL/SQL Release 11.2.0.3.0 - Production                                          |
| CORE	11.2.0.3.0	Production                                                      |
| TNS for Linux: Version 11.2.0.3.0 - Production                                  |
| NLSRTL Version 11.2.0.3.0 - Production                                          |
+---------------------------------------------------------------------------------+
SQLRowCount returns -1
5 rows fetched

至此说明配置成功。

如果zabbix要添加odbc sql监控的话,须要重启zabbix_agent

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏xingoo, 一个梦想做发明家的程序员

Oracle 监听器无法启动(TNS-12555,TNS-12560,TNS-00525)

启动监听器无法打开,报错! 1 [oracle@localhost ~]$ lsnrctl start 2 3 LSNRCTL for Linux: V...

243100
来自专栏Android 研究

android本地lib通过gradle上传到本地nexus上

在apply plugin: 'com.android.library'下添加如下内容:

25440
来自专栏杨建荣的学习笔记

sqlplus / as sysdba无法登录的奇怪报错 (r8笔记第36天)

最近看了一个问题,看问题的表现着实比较奇怪,困扰了我好一会儿。 问题的背景是帮助开发的同学解决一个数据库问题,最后问题解决之后,我想做一个操作系统级的检查,帮他...

42380
来自专栏黑白安全

DHCP攻击的实施与防御

DHCP攻击针对的目标是网络中的DHCP服务器,原理是耗尽DHCP服务器所有的IP地址资源,使其无法正常提供地址分配服务。然后在网络中再架设假冒的DHCP服务器...

71940
来自专栏bboysoul

开源堡垒机jumpserver搭建

之前说了国产良心kodexplorer,今天再说一个国内比较好的开源项目jumpserver,除此之外还可以的国内开源项目我觉得就是宝塔面板了。废话不多说上教程...

95430
来自专栏ytkah

laravel dingo/api添加jwt-auth认证

前面我们学了laravel dingo/api创建简单的api,这样api是开放给所有人的,如何查看和限制api的调用呢?可以用jwt-auth来验证,JSON...

18120
来自专栏java思维导图

教你十分钟构建好 SpringBoot + SSM 框架

目前最主流的 java web 框架应该是 SSM,而 SSM 框架由于更轻便与灵活目前受到了许多人的青睐。而 SpringBoot 的轻量化,简化项目配置, ...

16940
来自专栏乐沙弥的世界

WSREP has not yet prepared node for application use

最近PXC 5.7出现脑裂,前端Navicate连接到MySQL时,提示WSREP has not yet prepared node for applicat...

59530
来自专栏猿天地

Netty 实现简单的HTTP服务

本篇文章是Netty专题的第八篇,前面七篇文章如下: 高性能NIO框架Netty入门篇 高性能NIO框架Netty-对象传输 高性能NIO框架Netty-整合k...

34060
来自专栏搜云库

Spring Boot 中使用 LogBack 配置

LogBack是一个日志框架,它与Log4j可以说是同出一源,都出自Ceki Gülcü之手。(log4j的原型是早前由Ceki Gülcü贡献给Apache基...

2.9K60

扫码关注云+社区

领取腾讯云代金券