安装配置erlang_db_driver

erlang-db-driver是北京融易通公司开源的一个erlang支持众多数据库的一个驱动类库,据其wiki介绍,其支持MySQL, Oracle, Sybase, DB2 and Informix,功能不可不说强劲。html

公司的业务支持oracle,使用的是odbc方法,为了提升性能,特转换为使用erlang-db-driver。在使用的过程当中,遇到了不少问题,不过经过邮件跟融易通公司的工程师联系,获得了他们的快速回复,解决了很多问题。本文是集合了咱们联系的邮件而造成的一个归纳文档。若是大家在使用erlang-db-driver有问题,不妨给他们发邮件,他们是很乐意解决大家的问题的。git

1.安装Oracle Database Instant Clientgithub

oracle客户端类库中下载安装须要的类库,其中必须的是Basic、devel2个文件。也能够安装SQL PLUS文件,能够经过命令行来链接oracle服务器。
sql

2.连接动态类库数据库

安装的类库在/usr/lib,要使咱们的程序链接到oracle类库,咱们要执行下面命令:centos

cd /usr/lib/oracle/12.1/client/lib pwd >> /etc/ld.so.conf ldconfig

设置环境变量服务器

export ORACLE_HOME=/usr/lib/oracle/12.1/client

第2步到如今,基于一个假设,即oracle的客户端和服务器端是在不一样的主机上的。oracle

若是oracle的客户端和服务器端是在相同的主机上的,能够设置erlang-db-driver里面的build/oracle.config文件。app

{check_envs, [
    "ORACLE_HOME"
]}.
 
{include_search_dirs, [
    "${ORACLE_HOME}",
    "/usr/include/oracle/",
    "/usr/local/include/oracle",
    "/usr/local/oracle/include",
    "/opt/local/include/oracle"
]}.
 
{include_files, [
    "occi.h"
]}.
 
{lib_search_dirs, [
    "${ORACLE_HOME}/lib",
    "${ORACLE_HOME}"
]}.
 
{lib_files, [
    "occi",
    "clntsh"
]}.
 
{cflags, "-DUSE_ORACLE"}.
 
{srcs, ["c_src/oracle/*.cpp"]}.
 
你能够将里面的ORACLE_HOME改为客户端的路径,而后从新编译。
 
3.下载编译erlang-db-driver项目
准备阶段,安装erlang-db-driver编译须要的文件:
yum install git doxygen graphviz

下载erlang-db-driver性能

git clone https://github.com/denglf/erlang-db-driver

编译安装:

cd erlang-db-driver ./configure --with-oracle make 
make docs make installl

至此,erlang-db-driver安装完毕。

 

4.配置tnsnames.ora文件

配置tnsnames.ora跟odbc链接oracle的方式很像。

oracle的链接配置在配置文件中
$ORACLE_HOME/network/admin/tnsnames.ora
内容以下:
MY_DB_CONNECTION =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.95)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = XE)
)
)

EXTPROC_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC))
)
(CONNECT_DATA =
(SID = PLSExtProc)
(PRESENTATION = RO)
)
)

对应命令行,你能够经过下面的命令链接oracle数据库:
sqlplus SYSTEM/123456@192.168.0.95:1521/XE

链接参数以下:
[
{default_pool, true},
{table_info, true},
{driver, oracle},
{host, ""},
{port, 1521},
{user, "SYSTEM"},
{password, "123456"},
{database, "MY_DB_CONNECTION"}, %% 这里是配置文件里所配的名称
{poolsize, 8}]

erl 1>db_app:start(). 2>ConnArg = [ {default_pool, true}, {table_info, true}, {driver, oracle}, {host, ""}, {port, 1521}, {user, "SYSTEM"}, {password, "123456"}, {database, "MY_DB_CONNECTION"}, {poolsize, 8}]. 3> db_app:add_pool(xell, ConnArg).

这样就能够链接oracle数据库了。

5.在64位系统下找不到erlang_interface

上面使用的系统的是32位的centos,若是是64位的系统,要使用下面的命令来规避这个问题。

cd /usr/local/lib64 && ln -s /usr/local/lib/erlang .

能够看这里了解这个问题。

6.插入日期数据。

假设有个简单表,ss表定义只有date数据类型

CREATE TABLE ss ( toptime date NOT NULL );

可使用下面的语句插入数据:

db_app:execute_sql("insert into ss(toptime) values( to_date('2013-12-5 10:3:9', 'YYYY-MM-DD HH24:MI:SS'))").

也能够这样:

db_app:insert(ss, [{toptime,{"datetime", {{2013, 12, 5}, {2,3,4}}}}]).
相关文章
相关标签/搜索