专栏首页IT杂记CentOS6配置odbc访问Oracle

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 条评论
登录 后参与评论

相关文章

  • 关于JVM CPU资源占用过高的问题排查

    一、背景:     先执行一个java程序里面开了两个线程分别都在while循环做打印操作。 # java -cp ./test-threads.jar...

    囚兔
  • Hadoop SequnceFile.Writer 压缩模式及压缩库浅析

    先说明SequnceFile的压缩类型(Compression Type)分为三种NONE,RECORD,BLOCK,通过配置项io.seqfile.compr...

    囚兔
  • DateFormat 线程不安全

    一、测试 测试代码如下:  private static SimpleDateFormat sdf = new SimpleDateFormat("yy...

    囚兔
  • 定位amdu无法使用的根因并解决

    环境: OEL 5.7 + Oracle 10g + amdu_X86-64 现象: 我的两套实验环境,一套单实例,一套RAC,操作系统都是OEL 5.7,数...

    Alfred Zhao
  • 文件丢失?损坏?兼容性问题?到底是什么导致了错误

    在日常的维护中,免不了和文件打交道,文件涉及的问题有很多类,这里讨论: 文件丢失,损坏,兼容性问题。 而对于文件丢失导致的问题一般比较容易定位,而文件损坏,特...

    qsjs
  • SDK热更系列之如何获取应用在当前设备上的so对应的指令集

    子勰
  • Linux下so动态库一些不为人知的秘密

    Linux 下有动态库和静态库,动态库以.so为扩展名,静态库以.a为扩展名。二者都使用广泛。本文主要讲动态库方面知识。

    刘盼
  • 编译自定义Python二进制程序

    工作中需要自行编译一个Python二进制程序,并尽量减少该程序依赖的库文件,使之在相同CPU架构上有更良好的可移植性。先找了下网上的资料,都不太详尽,经过探索最...

    jeremyxu
  • Android 动态库压缩壳的实现

    计算机软件领域所说的壳实际上是一种软件加密技术。壳主要分为两大类:加密壳和压缩壳,加密壳侧重于防止软件被篡改,而压缩壳则侧重于减小软件体积。其实,在Window...

    小时光
  • LiteAVSDK集成,动态加载so库

    安卓开发中使用Android studio集成三方SDK(比如腾讯视频云移动直播、播放器、短视频、实时音视频),通常有两种集成方式:aar集成、jar+so集成...

    腾讯云-chaoli

扫码关注云+社区

领取腾讯云代金券