node.js连接Oracle数据库

接触了Node.js大概有一周时间了。异步的非阻塞编程很适合服务器端大量数据库/IO等信息的获取,减少了服务器线程的数量和负载。
第一步是配置Oracle的连接,Oracle的node.js driver基本都依赖于OCCI(Oracle C++ Call Interface),一共有两三个实现。其中node-oracle应该是比较稳定的一个。通过npm编译安装连接Oracle有些麻烦,下面是安装配置的方法。
1. 安装instant client
我的环境为CentOS 7.0 x86_64 & Node.JS 0.10.29
通过下面URL 下载instant client 12c的三个RPM包:

http://download.oracle.com/otn/linux/instantclient/121010/oracle-instantclient12.1-devel-12.1.0.1.0-1.x86_64.rpm?AuthParam=1406541161_bfb2503e922982b05efd708e2ec773f0

http://download.oracle.com/otn/linux/instantclient/121010/oracle-instantclient12.1-sqlplus-12.1.0.1.0-1.x86_64.rpm?AuthParam=1406540668_593922a07dbf3f63ffc3b5766217950a

http://download.oracle.com/otn/linux/instantclient/121010/oracle-instantclient12.1-basic-12.1.0.1.0-1.x86_64.rpm?AuthParam=1406540622_c103417f65077276a8460147cd8fd4c0

2. 安装nodejs.devel
编译Oracle module需要使用nodejs.devel,否则npm会报node-waf等依赖工具找不到。
yum install nodejs-devel

3. 安装node-oracle
这个module的github主页:https://github.com/joeferner/node-oracle
export OCI_INCLUDE_DIR=/usr/include/oracle/12.1/client64
export OCI_VERSION=12
export OCI_LIB_DIR=/usr/lib/oracle/12.1/client64/lib
export ORACLE_SID=/usr/include/oracle/12.1/client64
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$OCI_LIB_DIR
export PATH=$PATH:$ORACLE_HOME/bin
npm install oracle

4. 连接到Oracle
node-oracle提供了下面几种连接方式,可以通过指定hostname, port, sid, user和password连接。

可以直接指定tns字符串

也可以使用Oracle的tnsnames.ora定义的tns alias, Oracle Instant Client没有network/admin这样的默认目录结构,需要设置TNS_ADMIN来指定tnsnames.ora所在的目录
export TNS_ADMIN=$ORACLE_HOME
tnsnames.ora中我们包括一个测试数据库的地址:

connection提供了下面两个设置:
connection.setAutoCommit(false);
每次fetch的row数,配合reader对象使用。可以参考下面的测试。
connection.setPrefetchRowCount(1000):
5. 测试

获得一个JSON格式的结果:

^^

Posted in Dev, JavaScript, Oracle.
  1. Pingback: Nike111