1.oracle的 instantclient 的安装
首先,你需要到官网中下载这几个文件
a. oracle-instantclient11.1-basic-11.1.0.7.0-1.x86_64.rpm
b. oracle-instantclient11.1-devel-11.1.0.7.0-1.x86_64.rpm
c. instantclient-sdk-linux-x86-64-11.2.0.2.0.zip
版本可以自行选择,但是两个 rpm 包的版本必须一致,三个都一致更好
安装步骤:
Rpm 包安装时,使用命令, rpm –ivh 包名称,即可看到安装进度,完成后, basic 包和 devel 分别被安装到了 /usr/lib/ 下的 oracle 目录和 /usr/include 下的 oracle 目录。
sdk的zip包,是用命令 unzip 包名称 解压后 cd 命令进入instantclient目录,使用命令cp –r sdk /usr/lib/oracle/11.1/client64/sdk ,将sdk复制到/usr/lib/oracle/11.1/client64/目录下并命名为sdk。
2. linux用户、组、权限的一些 ( 一点题外话 )
Linux 中,用户和组的概念,是和权限密切相关的,大致分为三类:读权限 ® 、写权限 (w) 、执行权限 (x) ,而在 linux 中,这三种权限分别带有他的值, r=4,w=2,x=1
举例子:
最左边一列就表示了对应这个目标的属性,可以分为 4 段
d rwx r-x r-x
第一段 d 表示,他是一个目录( Directory ),如果是 - 的话表示是一个文件 ( 常见的两种 )
d rwx r-x r-x
第二段,表示所属用户对于该目标拥有的权限,这里是 读、写、执行都有,从数值上来讲权限是 7 ,后面会说到数值的作用
d rwx r-x r-x
大同小异,第三段也是权限,只是它代表的是某个用户组对于这个目标的权限,在这个组内的用户对它的权限都一样
d rwx r-x r-x
第四段表示的是其他用户的权限,即除了所属用户和组用户的其他用户
关于权限代表的值, 7 是怎么来的,前面说到每种权限代表的值,那么就是这么来的, 7 = 4 + 2 + 1 ,有什么用, 在改变某个文件权限的时候
你可以使用 chmod 755 aaa.txt 这种方式方便简单,即为 aaa.txt 设置了 rwxr-xr-x 权限,当然,你也可以使用其他方式
$ chmod u+x file 给 file 的属主增加执行权限
$ chmod 751 file 给 file 的属主分配读、写、执行 (7) 的权限,给 file 的所在组分配读、执行 (5) 的权限,给其他用户分配执行 (1) 的权限
$ chmod u=rwx,g=rx,o=x file 上例的另一种形式
$ chmod =r file 为所有用户分配读权限
$ chmod a-wx,a+r file 同上例
$ chmod -R u+r directory 递归地给 directory 目录下所有文件和子目录的属主分配读的权限
$ chmod 4755 设置用 ID ,给属主分配读、写和执行权限,给组和其他用户分配读、执行的权限。
安装过程基本完成了,接下来开始配置。
**3.**配置node-oracle
首先,安装 node-oracle 需要用到前面安装的 oracle instantclient ,在这之前有几个前提:
a. 安装 python 2.7( 测试过 2.6 可用 )
b. C++ 编译所需要的( gcc ) 使用命令 yum install gcc 即可
c. 设置环境变量
以下环境变量需要设置到配置文件中,文件位置在 /root/.bash_profile
使用 vim /root/.bash_profile 来编辑此文件,刚进入时是只读状态,按以下 i 键,可以看到做下角变成了 INSERT 或者 插入,此时是输入模式,将以下输入到文件中后(注意:OCI_HOME是根据你自己的实际路径来的,版本等不一定完全和这里一样),此时还是输入模式,按一下 Esc 键退出输入模式到只读模式,再按 Shift+; (分号键)左下角变成一个冒号,这时接收指令,输入 wq 按下回车即保存并退出 vim 编辑器。
还有一个 重要 的步骤 ,执行命令source /root/.bash_profile****使刚才的环境变量生效
export OCI_HOME=/usr/lib/oracle/11.1/client64
export OCI_LIB_DIR=$OCI_HOME/lib
export OCI_INCLUDE_DIR=$OCI_HOME/sdk/include
export OCI_VERSION=11 #Integer. Optional, defaults to ‘11’
d. 创建软连接(符号连接,其实就和 windows 中的快捷方式差不多)
首先在 /usr/lib/oracle/11.1/client64/lib/ 创建动态链接库的软连接
cd /usr/lib/oracle/11.1/client64/lib/
ln –s libclntsh.so.11.1 libclntsh.so ( 可以注意到这里的 11.1 是前面安装 rpm 包的版本 )
ln –s libocci.so.11.1 libocci.so
在 /usr/lib 目录下创建软连接
cd /usr/lib
ln –s /usr/lib/oracle/11.1/client64/lib/libclntsh.so.11.1 libclntsh.so.11.1
ln –s /usr/lib/oracle/11.1/client64/lib/libocci.so.11.1 libocci.so.11.1
e. Linux 中需要安装 libaio 包
yum install libaio
f. 配置动态连接库的环境变量到 oci 库的 lib 下
vim /root/.bash_profile
按 i 切换输入模式,在最后一行输入
LD_LIBRARY_PATH=/usr/lib/oracle/11.1/client64
按 Esc , shift+; 输入 wq 保存退出,记得生效命令source /root/.bash_profile
配置完这些环境之后就可以使用 npm install node-oracle 下载编译 node oracle 的驱动包了。这个过程一般出现的问题有几个:
a. gcc 未安装
b. 环境变量配置不正确找不到 occi.h 和 oro.h 头文件(如果配置了还找不到,可以尝试把 /usr/lib/oracle/11.1/client64/sdk/include/ 中的这两个文件复制到 /usr/include 中)
c. 动态链接库文件找不到
d. NLS_LANG的问题,这里我也遇到过,但是不太清楚原因,因为发现root用户的NLS_LANG和oracle用户的NLS_LANG可能不同,后来我直接没设置,而且用的叫node-oracle这个包,似乎是国人小伙伴写的吧
可以参考 https://github.com/joeferner/node-oracleoracle 包(模块未采用,因为出错的时候没有返回oracle的错误代码,难以调试,不知道是否和oracle客户端的用户权限有关,有待测试,配置可参考)