linux下nodejs安装oracle驱动

问题

用Nodejs连接oracle是比较麻烦的,不像使用mysql,Mogondb,redis等有相当丰富的库。就连官方提供的oracledb也在linux上安装的时候屡屡失败。

准备工作

  1. Nodejs v8.3.0 —> 下载地址node-v8.3.0-linux-x64.tar.xz

    为什么指定8.3.0版本呢,经过多个版本Node在多个版本的linux上进行的多次测试,得出结论,8.3.0版本在安装oracledb的成功率最高,基本都能一次成功。

  2. 在oracle官网下载两个文件

    • instantclient-basic-linux.x64-12.2.0.1.0.zip
    • instantclient-sdk-linux.x64-12.2.0.1.0.zip

    oracle官网下载地址

  3. 检查gcc版本

    1
    # gcc --version

    如果版本低于4.7,则需要升级。

升级gcc版本

  1. 升级方案一:
1
2
3
# wget http://people.centos.org/tru/devtools-2/devtools-2.repo
# mv devtools-2.repo /etc/yum.repos.d
# yum install devtoolset-2-gcc devtoolset-2-binutils devtoolset-2-gcc-c++

更新软连接(逐条执行如下命令)

1
# mv /usr/bin/gcc /usr/bin/gcc-4.4.7
1
# mv /usr/bin/g++ /usr/bin/g++-4.4.7
1
# mv /usr/bin/c++ /usr/bin/c++-4.4.7
1
# ln -s /opt/rh/devtoolset-2/root/usr/bin/gcc /usr/bin/gcc
1
# ln -s /opt/rh/devtoolset-2/root/usr/bin/c++ /usr/bin/c++
1
# ln -s /opt/rh/devtoolset-2/root/usr/bin/g++ /usr/bin/g++
1
# gcc --version

成功打印版本号,则安装成功。

  1. 升级方案二:
1
# touch /etc/yum.repos.d/devtools-2.repo

在devtools-2.repo文件中填入以下内容

1
2
3
4
5
6
7
8
9
10
11
12
13
[devtools2]
name=testing 2 devtools for CentOS $releasever
baseurl=http://people.centos.org/tru/devtools-2/$releasever/$basearch/RPMS
enabled=1
gpgcheck=0

备用的升级源

[devtoolset2]
name=RedHat DevToolset v2 $releasever - $basearch
baseurl=http://puias.princeton.edu/data/puias/DevToolset/$releasever/$basearch/
enabled=1
gpgcheck=0

执行命令

1
# yum check-update
1
# yum install devtoolset-2-gcc  devtoolset-2-gcc-c++
1
# source /opt/rh/devtoolset-2/enable
1
# gcc -v

成功打印版本号,则安装成功。

安装Node

  1. 创建文件夹

    1
    2
    # sudo su
    # mkdir /usr/local/node
  2. 将下载的node8.3移动到创建的文件夹中,并解压

    1
    2
    # xz -d node-v8.3.0-linux-x64.tar.xz
    # tar -xvf node-v8.3.0-linux-x64.tar
  3. 设置软连接

    1
    2
    # ln -s /usr/local/node/node-v8.3.0-linux-x64/bin/node /usr/bin/node
    # ln -s /usr/local/node/node-v8.3.0-linux-x64/bin/lib/node_modules/npm/bin/npm-cli.js /usr/bin/npm
  4. 测试是否安装成功

    1
    2
    # node -v
    # npm -v

    如果正确的打印了版本号,说明安装成功。

设置oralce驱动环境

  1. 创建文件夹

    1
    2
    # sudo su
    # mkdir /usr/local/oracle
  2. instantclient-basic-linux.x64-12.2.0.1.0.zipinstantclient-sdk-linux.x64-12.2.0.1.0.zip两个文件移动到oracle目录下,解压

    1
    2
    # unzip instantclient-sdk-linux.x64-12.2.0.1.0.zip
    # unzip instantclient-basic-linux.x64-12.2.0.1.0.zip
  3. 进入解压目录并设软连接

    1
    # ln -s libclntsh.so.12.1 libclntsh.so
  4. 添加环境变量

    1
    # vim /etc/profile

    将下面这段命令粘贴到文件底部并保存

    1
    2
    3
    4
    export LD_LIBRARY_PATH=/usr/local/oracle/instantclient_12_2:$LD_LIBRARY_PATH  
    export OCI_LIB_DIR=/usr/local/oracle/instantclient_12_2
    export OCI_INC_DIR=/usr/local/oracle/instantclient_12_2/sdk/include
    export NLS_LANG=AMERICAN_AMERICA.UTF8
  5. 启用环境变量

    1
    # source /etc/profile

以上环境搭建完毕,我上面创建的文件夹名并非一定,大家可以随便起,只要与下面命令对应即可

安装oracledb

1
# npm install oracledb

如果打印如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
> oracledb@2.1.2 install /usr/local/whistle/oracle_test_sync/node_modules/oracledb
> node package/oracledbinstall.js

oracledb Beginning installation
oracledb Verifying installation
oracledb Binary not found
oracledb Continuing installation
oracledb Oracledb installed
oracledb Verifying installation
oracledb Binary SHA matches SHA in SHASUMS256.txt
oracledb
oracledb ********************************************************************************
oracledb ** Node-oracledb 2.1.2 installation complete for Node.js 8.3.0 (linux, x64)
oracledb **
oracledb ** To use the installed node-oracledb:
oracledb ** - You must have 64-bit Oracle client libraries in LD_LIBRARY_PATH, or configured with ldconfig
oracledb ** - If you do not already have libraries, install the Instant Client Basic or Basic Light package from
oracledb ** http://www.oracle.com/technetwork/topics/linuxx86-64soft-092277.html
oracledb **
oracledb ** Node-oracledb installation instructions: https://github.com/oracle/node-oracledb/blob/master/INSTALL.md
oracledb ********************************************************************************

npm notice created a lockfile as package-lock.json. You should commit this file.
npm WARN oracle_test_sync@1.0.0 No description
npm WARN oracle_test_sync@1.0.0 No repository field.

+ oracledb@2.1.2
added 1 package in 16.53s

那么恭喜你,安装完毕,可以去愉快的写代码了!