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
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)
)
)
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}}}}]).