搜索
首页数据库mysql教程Erlang在Redhat 5.3下使用unixODBC连接Oracle数据库的配置

个人在安装配置时遇到一些麻烦,特此记录如下: 环境 数据库服务器操作系统:Windows 2003 数据库:Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 erlang运行的服务器操作系统:Redhat 5.3 erlang:Erlang R14B03 (erts-5.8.4) 注意 ==========

个人在安装配置时遇到一些麻烦,特此记录如下:

  • 环境

数据库服务器操作系统:Windows 2003

数据库:Oracle Database 10g Enterprise Edition Release 10.2.0.1.0

erlang运行的服务器操作系统:Redhat 5.3
erlang:Erlang R14B03 (erts-5.8.4)

  • 注意
===============================================================================
redhat 5.3中默认安装的unixODBC是2.2.11版本,这个版本与oracle的odbc驱动不兼容。所以需要将先将其卸载,然后安装unixODBC 2.3.0
卸载unixODBC的rpm包:
rpm -e mysql-connector-odbc-3.51.12-2.2.i386
rpm -e unixODBC-devel-2.2.11-7.1
rpm -e unixODBC-2.2.11-7.1

下载安装unixODBC 2.3.0
从www.unixodbc.org处下载,或者
http://olex.openlogic.com/package_versions/download/10003?package_version_id=5966&path=openlogic%2Funixodbc%2F2.3.0%2Fopenlogic-unixodbc-2.3.0-all-src-2.zip
在configure时加两个参数:--sysconfdir=/etc --prefix=/usr
然后make install就可以啦

安装完成后执行odbcinst -j可以看到配置文件等的位置
===============================================================================

1. 从Oracle网站下载客户端安装包
http://download.oracle.com/otn/linux/instantclient/11203/oracle-instantclient11.2-basic-11.2.0.3.0-1.i386.rpm
http://download.oracle.com/otn/linux/instantclient/11203/oracle-instantclient11.2-odbc-11.2.0.3.0-1.i386.rpm
最好再安装一下sqlplus
http://download.oracle.com/otn/linux/instantclient/11203/oracle-instantclient11.2-sqlplus-11.2.0.3.0-1.i386.rpm

2. 配置lib目录
cd /usr/lib/oracle/11.2/client/lib
pwd >>/etc/ld.so.conf
ldconfig

3. 修改/etc/odbcinst.ini
增加如下:
# Driver form oracle
[Oracle]
Desription      = ODBC for Oracle
Driver          = /usr/lib/oracle/11.2/client/lib/libsqora.so.11.1
Setup           = /usr/lib/liboraodbcS.so
FileUsage       = 1

这个加到odbcinst.ini文件的最后。测试时用,正常使用时应该去掉
[ODBC]
Trace           = 1
TraceFile    =/tmp/odbc.log
Debug           = 1
Pooling         = No


4. 修改/etc/odbc.ini

增加如下
[ORCL_146] #本地数据源名
Description     = ODBC for Oracle
Driver          = Oracle
Server          = 192.168.1.146
Port            = 1521
ServerName      = ORCL_146 #tnsnames.ora中的服务名
UserID          = mycomm
Password        = mycomm123



5. 增加/usr/lib/oracle/11.2/network/admin/tnsnames.ora

ORCL_146 =
        (DESCRIPTION =
                (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.146)(PORT = 1521))
                (CONNECT_DATA =
            (SERVER = DEDICATED)
                        (SERVICE_NAME = orcl)
                )
        )


其中ORCL_146要与odbc.ini的ServerName相同,
SERVICE_NAME为oracle的服务名
HOST为数据库所在主机IP,PORT为数据库所在主机port。

6. 在/etc/profile中增加:
export TNS_ADMIN=/usr/lib/oracle/11.2/network/admin/
然后,为了让TNS_ADMIN环境变化现在就生效,执行
. /etc/profile

7. 用isql测试一下
isql ORCL_146 -v
出错:
[01000][unixODBC][Driver Manager]Can't open lib '/usr/lib/oracle/11.2/client/lib/libsqora.so.11.1' : libclntsh.so.11.1: cannot open shared object file: No such file or directory
[ISQL]ERROR: Could not SQLConnect
发现是没有libclntsh.so.11.1这个库文件,这个库文件在/usr/lib/oracle/11.2/client/lib/下,之所以没有找到是由于在第2步时执行ldconfig的终端不是现在执行isql的终端。
重新执行一下ldconfig

再执行isql ORCL_146 -v
出错:
isql: symbol lookup error: /usr/lib/oracle/11.2/client/lib/libsqora.so.11.1: undefined symbol: SQLGetPrivateProfileStringW

这个问题就是unixODBC的版本问题啦,如果前面安装了unixODBC 2.3.0的话不会出现这个错误

如果sqlplus可以连接,但isql不可以,需要确认是否export了TNS_ADMIN这一环境变量


8. erlang odbc 连接oralce时出错如下:
------------------------------------------
Erlang R14B03 (erts-5.8.4) [source] [smp:2:2] [rq:2] [async-threads:0] [hipe] [kernel-poll:false]

Eshell V5.8.4  (abort with ^G)
1> odbc:start().
ok
2> odbc:connect("DSN=ORCL_146;UID=scott;PWD=tiger", []).

=ERROR REPORT==== 21-Oct-2011::19:23:49 ===
ODBC: received unexpected info: {tcp_closed,#Port}

{error,connection_closed}
3>
=ERROR REPORT==== 21-Oct-2011::19:23:49 ===
** Generic server terminating
** Last message in was {#Port,{exit_status,23}}
** When Server state == {state,#Port,
                               {,#Ref},
                               ,undefined,on,undefined,undefined,on,
                               connecting,undefined,0,
                               [#Port,#Port],
                               #Port,#Port}
** Reason for termination ==
** {port_exit,collecting_of_driver_information_faild}
----------------------------------------------
根据这里的方法
http://www1.erlang.org/pipermail/erlang-questions/2005-August/016816.html
这样连接就可以啦
3> odbc:connect("DSN=ORCL_146;UID=scott;PWD=tiger", [{scrollable_cursors, off}]).  
{ok,}
4>
其实这里可以不用UID和PWD,只要一个DSN就可以啦,形如:
odbc:connect("DSN=ORCL_146", [{scrollable_cursors, off}]).



声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
如何在Go中使用命名管道?如何在Go中使用命名管道?May 11, 2023 pm 04:22 PM

命名管道是一种在操作系统中相对比较低级的进程通信方式,它是一种以文件为中介的进程通信方式。在Go语言中,通过os包提供了对命名管道的支持。在本文中,我们将介绍如何在Go中使用命名管道来实现进程间通信。一、命名管道的概念命名管道是一种特殊的文件,可以被多个进程同时访问。在Linux系统中,命名管道是一种特殊的文件类型,它们存在于文件系统的某个位置上,并且可以在

redhat linux 免费吗redhat linux 免费吗Mar 25, 2023 am 10:43 AM

redhat linux是免费的,使用者是可以免费使用Redhat,但是Redhat的服务是需要收费的;也就是说,用户可以免费使用Redhat,但用户需要支付一定的费用来获取Redhat公司的服务。

redhat怎么安装php和mysqlredhat怎么安装php和mysqlFeb 09, 2023 am 09:50 AM

redhat安装php和mysql的方法:1、通过“yum install httpd”安装Apache2并启动;2、使用“yum install mysql mysql-server”安装MySQL并启动;3、通过“yum install php”安装PHP,然后重新启动Apache以使php生效即可。

如何在Go中使用第三方库?如何在Go中使用第三方库?May 11, 2023 pm 03:30 PM

在Go语言中,使用第三方库是非常方便的。许多优秀的第三方库和框架可以帮助我们快速地开发应用程序,同时也减少了我们自己编写代码的工作量。但是如何正确地使用第三方库,确保其稳定性和可靠性,是我们必须了解的一个问题。本文将从以下几个方面介绍如何使用第三方库,并结合具体例子进行讲解。一、第三方库的获取Go语言中获取第三方库有以下两种方式:1.使用goget命令首先

Centos与Redhat:对比与关联分析Centos与Redhat:对比与关联分析Jan 04, 2024 pm 10:10 PM

CentOS的简介  CentOS是CommunityENTerpriseOperatingSystem的简称,我们有很多人叫它社区企业操作系统,不管你怎么叫它,它都是Linux操作系统的一个发行版本。  CentOS并不是全新的Linux发行版,倘若一说到RedHat这个大名,大家似乎都听过。在RedHat家族中有企业版的产品,它是RedHatEnterpriseLinux(以下称之为RHEL),CentOS正是这个RHEL的克隆版本。RHEL是很多企业采用的Linux发行版本,需要向RedH

如何解决RedHat虚拟机中无法输入双引号的问题?如何解决RedHat虚拟机中无法输入双引号的问题?Dec 30, 2023 pm 08:01 PM

今天不知道修改了什么设置,我在vim里面写程序的时候,发现单引号和双引号都打不出来。双引号打出来的效果是¨¨,这会是导致程序出错!出现这种问题的原因是键盘布局与实际不相符,要进行修改。单/双引号打不出来的解决办法:(备注:如果你的桌面是英文版,请自己进行翻译。)1、点击系统-->选择管理-->选择键盘,将美国国际式改为美国英语式!2、点击系统-->选择首选项-->选择键盘。检查设置是否与下图一致:然后重新打开vim工具,问题应该就解决了!

如何在PHP中使用协程?如何在PHP中使用协程?May 12, 2023 am 08:10 AM

随着传统的多线程模型在高并发场景下的性能瓶颈,协程成为了PHP编程领域的热门话题。协程是一种轻量级的线程,能够在单线程中实现多任务的并发执行。在PHP的语言生态中,协程得到了广泛的应用,比如Swoole、Workerman等框架就提供了对协程的支持。那么,如何在PHP中使用协程呢?本文将介绍一些基本的使用方法以及常见的注意事项,帮助读者了解协程的运作原理,以

如何在Go中使用WebSocket?如何在Go中使用WebSocket?May 11, 2023 pm 04:17 PM

近年来,WebSocket技术已经成为了Web开发中不可或缺的一部分。WebSocket是一种在单个TCP连接上进行全双工通信的协议,它使得客户端和服务器之间的通信更加流畅和高效。如今,很多现代的Web应用程序都使用了WebSocket技术,例如实时聊天、在线游戏以及实时数据可视化等。Go语言作为一个现代的编程语言,自然也提供了很好的支持WebSock

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前By尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
4 周前By尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
4 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

安全考试浏览器

安全考试浏览器

Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

SublimeText3 英文版

SublimeText3 英文版

推荐:为Win版本,支持代码提示!

EditPlus 中文破解版

EditPlus 中文破解版

体积小,语法高亮,不支持代码提示功能

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版