zoukankan      html  css  js  c++  java
  • 安装配置erlang_db_driver

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

    公司的业务支持oracle,使用的是odbc方法,为了提高性能,特转换为使用erlang-db-driver。在使用的过程中,遇到了很多问题,不过通过邮件跟融易通公司的工程师联系,得到了他们的快速回复,解决了不少问题。本文是集合了我们联系的邮件而形成的一个概括文档。如果你们在使用erlang-db-driver有问题,不妨给他们发邮件,他们是很乐意解决你们的问题的。

    1.安装Oracle Database Instant Client

    oracle客户端类库中下载安装需要的类库,其中必须的是Basic、devel2个文件。也可以安装SQL PLUS文件,可以通过命令行来连接oracle服务器。

    2.链接动态类库

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

    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的客户端和服务器端是在相同的主机上的,可以设置erlang-db-driver里面的build/oracle.config文件。

    {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}}}}]).
  • 相关阅读:
    生日小助手源码运行的步骤
    关于生日小助手跨平台兼容性的临时解决方案
    生日小助手V3.0——跨平台的农历生日提醒软件
    生日小助手V3.1——跨平台多语言的农历生日提醒软件
    有关生日小助手的内容,请浏览生日小助手官方网站……
    生日小助手的详细规划——本博文随时更新,持续有效
    生日小助手V2.0发布了——可以正式投入使用!
    前端开发入门的几本推荐书籍
    多想一想,JS中函数声明和函数表达式的区别
    table固定宽度大小
  • 原文地址:https://www.cnblogs.com/getong/p/3472096.html
Copyright © 2011-2022 走看看