安装ODBC及配置pro*C/C++编译环境。

1 安装unixODBC

下载unixODBC-2.3.0.tar.gz

./configure
make
sudo make install

安装完毕后,odbc的配置文件在/usr/local/etc下,包括odbc.ini和odbcinst.ini两个文件,暂时不用修改。odbc的相关头文件在/usr/local/include下,编译proC*/C++时需要引用。

注:最好安装2.3.0版本,如果安装2.3.2或以上版本,可能会出现动态链接文件找不到的错误,因为2.3.2版本缺少相关的符号链接文件。

2 安装oracle客户端

两种安装方法,包括zip格式和rpm格式,zip格式安装,直接configure && make && make install,然后设置相关环境变量并修改配置,这里主要介绍rpm格式安装。

rpm –ivh oracle-instantclient11.2-basic-11.2.0.4.0-1.x86_64.rpm
rpm –ivh oracle-instantclient11.2-devel-11.2.0.4.0-1.x86_64.rpm
rpm –ivh oracle-instantclient11.2-jdbc-11.2.0.4.0-1.x86_64.rpm
rpm –ivh oracle-instantclient11.2-odbc-11.2.0.4.0-1.x86_64.rpm
rpm –ivh oracle-instantclient11.2-sqlplus-11.2.0.4.0-1.x86_64.rpm
rpm -ivh oracle-instantclient11.2-tools-11.2.0.4.0-1.x86_64.rpm
rpm -ivh oracle-instantclient11.2-precomp-11.2.0.4.0-1.x86_64.rpm

其中,oracle客户端默认安装路径/usr/lib/oracle/11.2/client64下。

因此,设置环境变量

$ORACLE_HOME=/usr/lib/oracle/11.2/client64

oracle的部分说明文档及Demo实例在文件夹/usr/share/oracle/11.2/client64下。该文件夹下还包含了oracle初始化ODBC驱动odbcinst.ini及用户ODBC配置文件.odbc.ini的脚本odbc_update_ini.sh。

完成odbc客户端的安装后,执行/usr/share/oracle/11.2/client64下的ODBC初始化脚本odbc_update_ini.sh。

odbc_update_ini.sh /usr/local

其中参数/usr/local为unixODBC的安装路径。odbc_update_ini.sh会在odbcinst.ini中添加ODBC的驱动信息,详情如下:

[Oracle 11g ODBC driver]
Description     = Oracle ODBC driver for Oracle 11g
Driver          = /usr/share/oracle/11.2/client64/libsqora.so.11.1
Setup           =
FileUsage       =
CPTimeout       =
CPReuse         =

上面配置文件中的Driver路径的值可能不正确(在ZIP格式安装时,路径是正确的),正确的应该为/usr/bin/oracle/11.2/client64/lib/libsqora.so.11.1,即

Driver          = /usr/bin/oracle/11.2/client64/lib/libsqora.so.11.1

odbc_update_ini.sh同时在用户目录的.odbc.ini文件中添加用户的odbc配置信息,详情如下:

[OracleODBC-11g]
Application Attributes = T
Attributes = W
BatchAutocommitMode = IfAllSuccessful
BindAsFLOAT = F
CloseCursor = F
DisableDPM = F
DisableMTS = T
Driver = Oracle 11g ODBC driver
DSN = OracleODBC-11g
EXECSchemaOpt =
EXECSyntax = T
Failover = T
FailoverDelay = 10
FailoverRetryCount = 10
FetchBufferSize = 64000
ForceWCHAR = F
Lobs = T
Longs = T
MaxLargeData = 0
MetadataIdDefault = F
QueryTimeout = T
ResultSets = T
ServerName =
SQLGetData extensions = F
Translation DLL =
Translation Option = 0
DisableRULEHint = T
UserID =
StatementCache=F
CacheBufferSize=20
UseOCIDescribeAny=F
MaxTokenSize=8192

(目前不清楚用户目录下.odbc.ini文件的作用,sqlplus连接时没用到该文件,isql连接则用的是/usr/local/etc/odbc.ini文件。)

接下来配置tns文件,在$ORACLE_HOME目录(即/usr/lib/oracle/11.2/client64)下创建目录/network/admin并在新建目录下添加tnsname.ora文件,在该文件中配置oracle监听实例信息。比如:

orcl =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.107.100)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SID = orcl)
    )
  )

然后,设置环境变量,在用户目录的.bashrc下添加如下语句:

export ORACLE_HOME=/usr/lib/oracle/11.2/client64
export ODBCSYSINI=/usr/local/etc
export TNS_ADMIN=$ORACLE_HOME/network/admin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib:/usr/local/lib
PATH=$PATH:$ORACLE_HOME/bin
export PATH

接下来执行.bashrc使环境变量生效:

. ~/.bashrc

现在,就可以用sqlplus连接数据库了:

sqlplus scott/tiger@orcl

但是,由于/usr/local/odbc.ini还没有设置,所以目前还不能够用isql连接,配置odbc.ini如下(可以不用设置default):

[orcl]
Driver = ORACLE 11g ODBC driver
DSN = orcl
ServerName = orcl
Server = 172.16.107.100
Port   = 1521

[default]
Driver = ORACLE 11g ODBC driver
DSN = default
ServerName = orcl
Server = 172.16.107.100
Port   = 1521

下面,就可以使用isql进行连接了

isql orcl scott tiger

以上便完成了Oracle客户端及ODBC的配置,但是如果要使用pro*C/C++,还有部分配置文件需要修改。

首先,需要将文件夹/usr/lib/oracle/11.2/client64/lib/precomp移动至/usr/lib/oracle/11.2/client64(即按照ZIP格式安装的位置)。

mv /usr/lib/oracle/11.2/client64/lib/precomp /usr/lib/oracle/11.2/client64

然后,修改配置/usr/lib/oracle/11.2/client64/precomp/admin文件夹下的pcscfg.cfg文件,目前redhat5.5版本的配置文件如下,请根据系统中相关头文件的位置自行配置:

sys_include=(/usr/local/include,/usr/include/oracle/11.2/client64,/usr/include,/usr/lib/gcc/x86_64-redhat-linux/4.1.1/include,/usr/lib64/gcc/x86_64-suse-linux/4.1.2/include)
sys_include=/usr/lib/gcc/x86_64-redhat-linux/4.1.1/include/
sys_include=/usr/lib/gcc/x86_64-redhat-linux/4.1.2/include/
ltype=short
define=__x86_64__

下面,就可以到实例存放文件夹/usr/share/oracle/11.2/client64下,查看样例代码procdemo.pc,然后修改其make文件demo_proc_ic.mk中的部分文件选项,并执行

make –f demo_proc_ic.mk

测试成功,pro*C/C++环境就搭建完成了。