Linux 环境下调用C++库ocilib操作Oracle数据
2017-09-08 09:54
267 查看
第一、下载ocilib源码库:
https://github.com/vrogier/ocilib/releases/
第二、配置ORACLE环境
1、到Oracle官网下载如下文件
oracle-instantclient11.2-basic-11.2.0.3.0-1.x86_64.rpm
oracle-instantclient11.2-devel-11.2.0.3.0-1.x86_64.rpm
oracle-instantclient11.2-odbc-11.2.0.3.0-1.x86_64.rpm
oracle-instantclient11.2-sqlplus-11.2.0.3.0-1.x86_64.rpm
2、安装
rpm -ivh *.rpm
安装完成后,查看/usr/lib/oracle/11.2/client64,有bin和lib两个目录
头文件在/usr/include/oracle/11.2/client64
3、设置ORACLE_HOME环境变量
设置ORACLE_HOME=/usr/lib/oracle/11.2/client64/
测试Oracle环境是否配置成功
在/usr/lib/oracle/11.2/client64/bin目录下执行sqlplus命令
./sqlplus reader/reader@172.16.8.200:1521/upapp
可能会报错,这是因为这个可执行程序依赖一些库,可以通过设置LD_LIBRARY_PATH环境变量来解决,登陆成功说明Oracle环境配置完成。quit命令退出sqlplus终端。
第三、修改ocilib的configure文件
前面的步骤完成后,进入到ocilib目录,执行./configure,会报错,提示找不到头文件路径,修改configure文件,直接给变量ac_headers_path赋值为前面步骤说到的头文件路径/usr/include/oracle/11.2/client64
第四、编译ocilib
./configure CFLAGS="-O2 -m64"(CFLAGS参数很重要,表示编译为64位)
make
make install
第五、调用ocilib库,生成c++客户端
这部分没有特殊操作,只要注意在Makefile文件中设置好-L和-I即可
第六、运行c++程序访问Oracle数据库
跟编译ocilib库一样,也需要配置好Oracle环境。运行程序之前注意配置LD_LIBRARY_PATH即可。如果遇到“cannot create oci environment”异常,多半是因为库没有链接对。
FAQ:
1、在启动sqlplus或者自己开发的调用oci库的程序的时候会报ORA-21561: OID generation failed错误
原因:这是因为本机的hostname和/etc/hosts文件中与127.0.0.1对应的主机名不一致。
解决方法:
(1)修改/etc/hosts,将本机的hostname加到该文件中;
(2)用hostname命令修改本机hostname,修改为与127.0.0.1对应的主机名一致即可。
2、通过sqlplus或者c++程序连接数据库,中文字符乱码。
原因:系统的字符集与oracle数据库的字符集不一致。
解决方法:需要设置NLS_LANG环境变量
(1)通过sqlplus终端执行命令:
select * from nls_database_parameters;
查看如下三个域的值,如下:
NLS_LANGUAGE AMERICAN
NLS_TERRITORY AMERICA
NLS_CHARACTERSET UTF8
(2)设置NLS_LANG环境变量的值为:AMERICAN_AMERICA.AL32UTF8
PS:在taf平台,如果修改了环境变量需要重启tafnode,否则环境变量不会在taf中生效。
https://github.com/vrogier/ocilib/releases/
第二、配置ORACLE环境
1、到Oracle官网下载如下文件
oracle-instantclient11.2-basic-11.2.0.3.0-1.x86_64.rpm
oracle-instantclient11.2-devel-11.2.0.3.0-1.x86_64.rpm
oracle-instantclient11.2-odbc-11.2.0.3.0-1.x86_64.rpm
oracle-instantclient11.2-sqlplus-11.2.0.3.0-1.x86_64.rpm
2、安装
rpm -ivh *.rpm
安装完成后,查看/usr/lib/oracle/11.2/client64,有bin和lib两个目录
头文件在/usr/include/oracle/11.2/client64
3、设置ORACLE_HOME环境变量
设置ORACLE_HOME=/usr/lib/oracle/11.2/client64/
测试Oracle环境是否配置成功
在/usr/lib/oracle/11.2/client64/bin目录下执行sqlplus命令
./sqlplus reader/reader@172.16.8.200:1521/upapp
可能会报错,这是因为这个可执行程序依赖一些库,可以通过设置LD_LIBRARY_PATH环境变量来解决,登陆成功说明Oracle环境配置完成。quit命令退出sqlplus终端。
第三、修改ocilib的configure文件
前面的步骤完成后,进入到ocilib目录,执行./configure,会报错,提示找不到头文件路径,修改configure文件,直接给变量ac_headers_path赋值为前面步骤说到的头文件路径/usr/include/oracle/11.2/client64
第四、编译ocilib
./configure CFLAGS="-O2 -m64"(CFLAGS参数很重要,表示编译为64位)
make
make install
第五、调用ocilib库,生成c++客户端
这部分没有特殊操作,只要注意在Makefile文件中设置好-L和-I即可
第六、运行c++程序访问Oracle数据库
跟编译ocilib库一样,也需要配置好Oracle环境。运行程序之前注意配置LD_LIBRARY_PATH即可。如果遇到“cannot create oci environment”异常,多半是因为库没有链接对。
FAQ:
1、在启动sqlplus或者自己开发的调用oci库的程序的时候会报ORA-21561: OID generation failed错误
原因:这是因为本机的hostname和/etc/hosts文件中与127.0.0.1对应的主机名不一致。
解决方法:
(1)修改/etc/hosts,将本机的hostname加到该文件中;
(2)用hostname命令修改本机hostname,修改为与127.0.0.1对应的主机名一致即可。
2、通过sqlplus或者c++程序连接数据库,中文字符乱码。
原因:系统的字符集与oracle数据库的字符集不一致。
解决方法:需要设置NLS_LANG环境变量
(1)通过sqlplus终端执行命令:
select * from nls_database_parameters;
查看如下三个域的值,如下:
NLS_LANGUAGE AMERICAN
NLS_TERRITORY AMERICA
NLS_CHARACTERSET UTF8
(2)设置NLS_LANG环境变量的值为:AMERICAN_AMERICA.AL32UTF8
PS:在taf平台,如果修改了环境变量需要重启tafnode,否则环境变量不会在taf中生效。
相关文章推荐
- Linux环境中Oracle数据导入与导出备份创建用户操作
- Linux环境中Oracle数据导入与导出备份操作
- Linux环境中Oracle数据导入与导出备份创建用户操作
- 【转载】linux中误删除oracle数据文件的恢复操作
- 【转载】linux中误删除oracle数据文件的恢复操作
- Linux 环境下Oracle安装与调试(二)之创建数据库,数据增删改
- linux下oracle数据文件管理操作命令
- Linux环境下用exp备份Oracle数据表并导入的脚本
- 4.windows和Linux下创建oracle用户名表空间,表,插入数据,用户管理表等操作
- 【linux/c/c++】linux 的服务器环境安装支持c/c++等操作
- Linux c/c++访问Oracle数据库--操作数据
- 【Linux环境编程入门】四、文件操作的系统调用
- Linux环境下Oracle数据泵(expdp)备份报ORA-39006: internal error
- Linux 环境变量设置问题及与Oracle的相关操作
- Linux下ORACLE误删除数据文件恢复操作
- 【转载】linux中误删除oracle数据文件的恢复操作 分类: H2_ORACLE 2013-06-14 12:07 353人阅读 评论(0) 收藏
- 【转载】linux中误删除oracle数据文件的恢复操作
- Linux环境下用exp备份Oracle数据表并导入的脚本
- Linux 环境下Oracle安装与调试(二)之创建数据库,数据增删改
- Linux下ORACLE误删除数据文件恢复操作