安装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++环境就搭建完成了。