linux下使用go-oci8
地址:https://github.com/wendal/go-oci8
它是 https://github.com/mattn/go-oci8 的分支. win下安装步骤参考:http://www.cnblogs.com/ghj1976/p/3437250.html
下面的安装步骤主要参考了:https://github.com/Centny/Centny/blob/master/Articles/How%20build%20github.com%3amattn%3ago-oci8.md
首先通过pkg-config工具确认你已安装了oci8 c-lib
pkg-config这一工具是用来检索系统中安装库文件的信息。其主要功能如下:
- 检查库的版本号。如果所需要的库的版本不满足要求,它会打印出错误信息,避免链接错误版本的库文件。
- 获得编译预处理参数,如宏定义,头文件的位置。
- 获得链接参数,如库及依赖的其它库的位置,文件名及其它一些连接参数。
- 自动加入所依赖的其它库的设置。
--exists,可以用来测试模块的可用性。
$ pkg-config --exists oci8||echo no
显示 no 说明pkg-config 没有找到相应的 oci8.pc
http://www.cppblog.com/nenlong/archive/2012/09/04/189480.html
安装oci8:
从 OTN Instant Client 页面下载 Basic 和 SDK Instant Client 程序包。
OCI是指ORACLE调用接口(Oracle Call Interface),它提供了一组可对ORACLE数据库进行存取的接口子例程(函数),通过在代程序设计语言(如C语言)中进行调用可达到存取ORACLE数据库的目的。
OCI是集成在 Oracle Database Instant Client 的Basic 版本中的。下载地址如下:
http://www.oracle.com/technetwork/database/features/instant-client/index.html
比如我这里下载的是:
instantclient-sdk-linux.x64-12.1.0.1.0.zip
instantclient-basic-linux.x64-12.1.0.1.0.zip
如果您使用 ZIP 文件,应该将 SDK 解压缩到 basic 程序包所在的目录中
解压缩参数参考:http://www.ezloo.com/2008/01/linux_zip_unzip.html
1),切换到root帐号
2),解压缩 instantclient-basic-linux.x64-12.1.0.1.0.zip 到 /usr/local/ 目录下,得到的路径为 /usr/local/instantclient_12_1/
3),解压缩 instantclient-sdk-linux.x64-12.1.0.1.0.zip,会得到一个和步骤2)中相同名称的目录,该目录下有一个名称为 sdk 的子目录,将其移动到 /usr/local/instantclient_12_1/ 目录下,最终的目录结构如下:
具体命令如下:
解压缩 basic文件
[root@localhost oci]# unzip instantclient-basic-linux.x64-12.1.0.1.0.zip -d /usr/local/
Archive: instantclient-basic-linux.x64-12.1.0.1.0.zip
inflating: /usr/local/instantclient_12_1/BASIC_README
inflating: /usr/local/instantclient_12_1/adrci
inflating: /usr/local/instantclient_12_1/genezi
inflating: /usr/local/instantclient_12_1/libclntsh.so.12.1
inflating: /usr/local/instantclient_12_1/libclntshcore.so.12.1
inflating: /usr/local/instantclient_12_1/libnnz12.so
inflating: /usr/local/instantclient_12_1/libocci.so.12.1
inflating: /usr/local/instantclient_12_1/libociei.so
inflating: /usr/local/instantclient_12_1/libocijdbc12.so
inflating: /usr/local/instantclient_12_1/libons.so
inflating: /usr/local/instantclient_12_1/liboramysql12.so
inflating: /usr/local/instantclient_12_1/ojdbc6.jar
inflating: /usr/local/instantclient_12_1/ojdbc7.jar
inflating: /usr/local/instantclient_12_1/uidrvci
inflating: /usr/local/instantclient_12_1/xstreams.jar
解压缩 sdk 文件
unzip instantclient-sdk-linux.x64-12.1.0.1.0.zip -d /usr/local/
下一步,手动创建一个符号链接:
ln -s libclntsh.so.12.1 libclntsh.so
参考: http://blog.chinaunix.net/uid-20769015-id-3919458.html
修改oci8.pc文件
(/usr/lib/pkgconfig/ 目录下):
# Package Information for pkg-config
prefix=/usr/local/instantclient_12_1/
libdir=${prefix}
includedir=${prefix}/sdk/include/
Name: OCI
Description: Oracle database engine
Version: 12.1
Libs: -L${libdir} -lclntsh
Libs.private:
Cflags: -I${includedir}
修改完后,注意需要设置全局参数: PKG_CONFIG_PATH , 否则会报下面错误:
Package oci8 was not found in the pkg-config search path.
Perhaps you should add the directory containing `oci8.pc'
to the PKG_CONFIG_PATH environment variable
No package 'oci8' found
设置方法在 /etc/profile 文件中增加下面一条:
export PKG_CONFIG_PATH=/usr/lib/pkgconfig/
http://blog.csdn.net/joker_zhou/article/details/8907915
配置用户的Oracle客户端环境变量配置
到该用户的根目录,编辑 .bash_profile 文件,设置环境变量.
vi .bash_profile
在内容后面新增如下配置:
export ora_home=/usr/local/instantclient_12_1
export PATH=$PATH:$ora_home
export LD_LIBRARY_PATH=$ora_home
http://blog.csdn.net/lsxy117/article/details/8647600
这时候执行 go get github.com/wendal/go-oci8 就可以正常下载并编译了.
Oracle 客户端服务配置文件配置
要连接到某一台 oracle 服务器, 一般我们用 tnsnames.ora 文件方式来设置.
在一个目录下新建一个 tnsnames.ora 文件(比如我是建立在 /usr/local/instantclient_12_1/tns 目录下的 ),用于配置连接字符串别名。
这个文件内容类似如下,参考 http://hi.baidu.com/sunxden/item/f5e1423a9bfc298df4e4ad4b:
ORA10 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.10.1)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = ora10)
)
)
修改全局配置文件,增加一个 TNS_ADMIN 设置 ,指向这个目录。
set TNS_ADMIN=/usr/local/instantclient_12_1/tns
这杨我们连接字符串就可以写成 用户名/密码@实例名
整个安装过程中,全局变量设置的地方很多, 下面是我自己的 profile文件的相关设置:
export ora_home=/usr/local/instantclient_12_1
export PATH=$PATH:/sbin:/usr/local/go/bin:$ora_home
export GOPATH=/home/ghj1976/gocodes
export PKG_CONFIG_PATH=/usr/lib/pkgconfig/
export TNS_ADMIN=$ora_home/tns
export LD_LIBRARY_PATH=$ora_home
用工具检查oracle的连接
连接 oracle时,有时候我们需要用一些工具来判断连接问题,比如常见的:
ORA-12154: TNS:could not resolve the connect identifier specified 问题。
这时候就需要装一些类似下面的工具:
*Instant Client Package - SQL*Plus: Additional libraries and executable for running SQL*Plus with Instant Client
下载地址: http://618119.com/archives/2008/03/20/76.html
解压缩后我们会看到新加了 sqlplus 工具。
$unzip instantclient-sqlplus-linux.x64-12.1.0.1.0.zip -d ./
Archive: instantclient-sqlplus-linux.x64-12.1.0.1.0.zip
inflating: ./instantclient_12_1/SQLPLUS_README
inflating: ./instantclient_12_1/glogin.sql
inflating: ./instantclient_12_1/libsqlplus.so
inflating: ./instantclient_12_1/libsqlplusic.so
inflating: ./instantclient_12_1/sqlplus
**************sqlplus 连接远程数据库系统**********************
方式一:简易连接,不用进行网络配置,
其实就是不用tnsname.ora文件,但只支持oracle10G以上。
命令:sqlplus 用户名/密码@ip地址[:端口]/service_name [as sysdba]
示例:sqlplus sys/pwd@ip:1521/test as sysdba
备注:使用默认1521端口时可省略输入
如果上述方式测试没问题,表示网络是通的。
方式二:使用 tnsnames 配置的别名
进行网络配置
2.1、图形化操作:Net Configuration Assistant--> 本地Net服务名配置-->添加->服务名->协议(选tcp)->主机名称->端口->完成。
2.2、文本化操作:编辑$ORACLE_HOME/NETWORK/ADMIN/tnsnames.ora文件
test =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = ip或主机名称)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = 数据库的服务名称)
)
)
备注说明:红色为修改部分
- PROTOCOL:客户端与服务器端通讯的协议,一般为TCP,该内容一般不用改。
- HOST:数据库侦听所在的机器的机器名或IP地址,数据库侦听一般与数据库在同一个机器上,所以当我说数据库侦听所在的机器一般也是指数据库所在的机器。在UNIX或WINDOWS下,可以通过在数据库侦听所在的机器的命令提示符下使hostname命令得到机器名,或通过ipconfig(for WINDOWS) or ifconfig(for UNIX)命令得到IP地址。需要注意的是,不管用机器名或IP地址,在客户端一定要用ping命令ping通数据库侦听所在的机器的机器名,否则需要在hosts文件中加入数据库侦听所在的机器的机器名的解析。
- PORT:数据库侦听正在侦听的端口.可以察看服务器端的listener.ora文件或在数据库侦听所在的机器的命令提示符下通过lnsrctl status [listener name]命令察看。此处Port的值一定要与数据库侦听正在侦听的端口一样。
- SERVICE_NAME:在服务器端,用system用户登陆后,sqlplus> show parameter service_name命令察看。
======================================================================
如何保证客户端机器连接到oracle数据库呢? 引用:http://www.cnoug.org/viewthread.php?tid=15661
A. 客户端
1.在客户端机器上安装ORACLE的Oracle Net通讯软件,它包含在oracle的客户端软件中。
2.正确配置了sqlnet.ora文件
3.正确配置了tnsname.ora文件
B. 服务器端
1.保证listener已经启动 lsntctl start
2.保证数据库已经启动。 sql>startup
连接命令, 比如是上面的配置文件:
sqlplus user/password@test
sqlplus 连接用户名/密码@tns别名
方式三:tns别名部分用 tns的配置文件替代
sqlplus user/password@(DESCRIPTION=((ADDRESS=(PROTOCOL = TCP)(HOST = dbhost)(PORT = 1521))(CONNECT_DATA=(SERVICE_NAME = zzz)))
if you are using linux or unix OS you need to use quotes else the () are interpreted by the shell
e.g
sqlplus user/password@'(DESCRIPTION=((ADDRESS=(PROTOCOL = TCP)(HOST = dbhost)(PORT = 1521))(CONNECT_DATA=(SERVICE_NAME = zzz)))'
http://stackoverflow.com/questions/761418/how-come-sqlplus-not-connecting
这种方式对分析 tnsname 文件配置错误非常有帮助, 我就碰到过一次 ( 配错,导致连接不上的问题。
http://www.cnblogs.com/winkey4986/archive/2012/09/20/2695259.html
===
http://blog.csdn.net/lsxy117/article/details/8647600
http://blog.csdn.net/joker_zhou/article/details/8907915
https://github.com/Centny/Centny/blob/master/Articles/How%20build%20github.com:mattn:go-oci8.md
http://blog.csdn.net/joker_zhou/article/details/8907915
===
http://www.oracle.com/technetwork/cn/articles/dsl/technote-php-instant-090922-zhs.html
参考
pkg-config指南
http://blog.csdn.net/exbob/article/details/6991037
理解 pkg-config 工具
http://www.chenjunlu.com/2011/03/understanding-pkg-config-tool/
Linux中的configure、pkg-config、pkg_config_path
http://yiluohuanghun.blog.51cto.com/3407300/946170
linux下使用go-oci8的更多相关文章
- Linux下PHP安装oci8扩展
PHP通常搭配Mysql使用,但有时候也会连接到Oracle数据库.安装PHP的oci8扩张之前,需要先安装Oracle Instant Client( basic 或 basic lite 版就行了 ...
- Linux下php5.3编译oracle客户端
因项目需要在linux下进行php5.3的oracle客户端编译,简要介绍一下步骤及走过的弯路. 1.下载Oracle客户端程序包,其中包含OCI.OCCI和JDBC-OCI等相关文件. 1.1下载文 ...
- Linux下LANMP集成环境中编译增加pdo_odbc模块
linux版本为CentOs6.5,php集成环境为lanmp_v3.1,集成环境中默认的pdo扩展为:mysql, sqlite, sqlite2,现在有需求想链接微软的Access数据库,所以需要 ...
- 最近玩了下linux下的lampp注意一些使用
最近玩了下linux下的lampp注意一些使用 1 配置文件 /opt/lampp/etc 2 一些命令 mysql命令 /opt/lampp/bin/mysql php命令 /opt/lampp/b ...
- Linux 下LNMP环境搭建_【all】
LNMP = Linux + Nginx + Mysql + PHP 1.0 Linux环境搭建 Linux 系统安装[Redhat] 1.1. FastCGI介绍 1.什么是CGI(common g ...
- NodeJs在Linux下使用的各种问题
环境:ubuntu16.04 ubuntu中安装NodeJs 通过apt-get命令安装后发现只能使用nodejs,而没有node命令 如果想避免这种情况请看下面连接的这种安装方式: 拓展见:Linu ...
- Linux下服务器端开发流程及相关工具介绍(C++)
去年刚毕业来公司后,做为新人,发现很多东西都没有文档,各种工具和地址都是口口相传的,而且很多时候都是不知道有哪些工具可以使用,所以当时就想把自己接触到的这些东西记录下来,为后来者提供参考,相当于一个路 ...
- Linux下Nodejs安装(完整详细)
之前安装过windows下以及Mac下的node,感觉还是很方便的,不成想今天安装linux下的坑了老半天,特此记录. 首先去官网下载代码,这里一定要注意安装分两种,一种是Source Code源码, ...
- (转载)linux下各个文件夹的作用
linux下的文件结构,看看每个文件夹都是干吗用的/bin 二进制可执行命令 /dev 设备特殊文件 /etc 系统管理和配置文件 /etc/rc.d 启动的配置文件和脚本 /home 用户主目录的基 ...
- 萌新笔记——linux下查看内存的使用情况
windows上有各种软件可以进行"一键加速"之类的操作,释放掉一些内存(虽然我暂时不知道是怎么办到的,有待后续学习).而任务管理器也可以很方便地查看各进程使用的内存情况,如下图: ...
随机推荐
- React属性和状态对比
一.相似点 二.区别 三.如何区分 PS:所有的数据都可以变成属性
- Data Flow ->> Term Lookup
Term Lookup是和Term Extraction相反的一个组件.Term Extraction是为了找出term,Term Lookup是利用我们关心的term list来找出某个文本里面包含 ...
- z-index无效问题的解决方法
在使用z-index这个属性之前,我们必须先了解使用z-index的必要条件: 1.要想给元素设置z-index样式,必须先让它变成定位元素,说的明白一点,就是要给元素设置一个postion:rela ...
- 安装 jdk、tomcat
jdk 下载地址:http://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archive-downloads-java ...
- Android构建boot.img(二):kernel的拷贝与打包
上文已经对boot.img其中组成部分之一ramdisk.img做了分析,boot.img另外一个重要的组成部分就是kernel了, 这里所说的kernel,可以只理解为位于out/target/pr ...
- iOS设备升级iOS7
引自:http://lifehacker.com/how-to-upgrade-to-ios-7-right-now-1288208215 Although iOS 7 won't see an of ...
- poj 3744 Scout YYF I (矩阵快速幂 优化 概率dp)
题目链接 分析&&题意来自 : http://www.cnblogs.com/kuangbin/archive/2012/10/02/2710586.html 题意: 在一条不满地雷的 ...
- laravel Event执行顺序
laravel一大特色就是event事件系统.一般首先要listen一个事件,随后fire那个事件,这时执行路径将会调用event handler,返回后继续执行.例如: Event::listen( ...
- POJ (线段树) Who Gets the Most Candies?
这道题综合性挺强的,又牵扯到数论,又有线段树. 线段树维护的信息就是区间中有多少个人没跳出去,然后计算出下一个人是剩下的人中第几个. 我在这调程序调了好久,就是那个模来模去的弄得我头晕. 不过题确实是 ...
- HDU 1513 Palindrome
题目就是给一个字符串问最少插入多少个字符能让原字符串变为回文字符串. 算法: 用原串的长度减去原串与翻转后的串的最大公共字串的长度,就是所求答案. //#define LOCAL #include & ...