设为首页 收藏本站
查看: 2401|回复: 0

[经验分享] Golang连接Oracle数据库

[复制链接]

尚未签到

发表于 2018-9-19 13:58:49 | 显示全部楼层 |阅读模式
  Golang连接Oracle的库有很多,比较常见的如下:
  不过,oralce 只提供了 oci8 的接口,必须通过它来调用,所以下面方案都逃不过相关设置。
1、go-db-oracle
  地址: https://code.google.com/p/go-db-oracle/
  官方介绍:
  Oracle Driver using cgo to call OCI libraries from Oracle Instant Client 11. Developed with Linux Status initial: connects, authenticates, basic SELECTs, missing error control, not deallocating memory
  关键点:

  • 使用CGO开发的;   
  • 基于Oracle 11   
  • 基于Linux环境下
2、go-oci8
  地址:https://github.com/wendal/go-oci8
  它是 https://github.com/mattn/go-oci8 的分支, 增加了windows下中文的安装说明及相关文件
  安装步骤,注意它的安装方式跟之前方式不一样了:之前是 http://wendal.net/459.html 这里提供的步骤, 跟github上安装步骤不一样。以github的为准。
2.1、安装最新版的git,并设置可以从命令行直接调用git命令。
  安装方式请看下面这篇文章:
  https://github.com/wohugb/git-reference/blob/master/Getting-Started/Installing-Git.rst
  比如我安装的是 Git-1.8.4-preview20130916 这个 版本。
2.2、下载OCI最新版,
  存放于C:\instantclient_12_1
  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
  注意,后面你装的MinGW是64位版本,就需要OCI也是64位版本, 如果MinGW是32位版本,则需要OCI是32位版本。
2.3、下载OCI SDK最新版,
  存放于C:\instantclient_11_2\sdk
  下载地址仍然是上面地址。
  注意,后面你装的MinGW是64位版本,就需要OCI也是64位版本, 如果MinGW是32位版本,则需要OCI是32位版本。
2.4、下载MinGW最新版,
  下载地址:http://sourceforge.net/projects/mingw/files/Installer/mingw-get-inst/  下载后安装在C:\mingw。
  MinGW全称Minimalist GNU For Windows,是个精简的Windows平台C/C++、ADA及Fortran编译器,相比Cygwin而言,体积要小很多,使用较为方便。MinGW提供了一套完整的开源编译工具集,以适合Windows平台应用开发,且不依赖任何第三方C运行时库。(http://www.mingw.org/wiki/Getting_Started)
  参考:http://www.cnblogs.com/ghj1976/p/3175591.html
  如果你安装的是MinGW 64 位版本,请参看下面这篇文章:
  http://www.cnblogs.com/ghj1976/p/3540257.html
  如果 MinGW是64位, oci 是32 会,编译时会报错:
  ld.exe: skipping incompatible C:/instantclient_12_1/oci.dll when searching for -loci
2.5、下载pkg-config.exe和oci8.pc
  (已经存放在windows文件夹下,)
  将pkg-config.exe复制到C:\mingw\bin\下
  将oci8.pc复制到C:\mingw\lib\pkg-config\下
  注意,oci8.pc 需要根据你下载的 oci进行修改。下面是我根据我下载的oci版本做的修改。
  # Package Information for pkg-config
  prefix=C:/instantclient_12_1
  exec_prefix=C:/instantclient_12_1
  libdir=${exec_prefix}
  includedir=${prefix}/sdk/include/
  Name: OCI
  Description: Oracle database engine
  Version: 12.1
  Libs: -L${libdir} -loci
  Libs.private:
  Cflags: -I${includedir}
2.6、修改系统环境变量,
  添加
  PATH=原有PATH;C:\instantclient_12_1;C:\MinGW\bin;
  PKG_CONFIG_PATH=C:\MinGW\lib\pkg-config
2.7、下载相关源码。
  执行 go get github.com/wendal/go-oci8
2.8、测试一下:
  cd %GOPATH%/src/github.com/wendal/go-oci8/example
  go run oracle.go
2.9、配置Oracle连接字符串
  在一个目录下新建一个 tnsnames.ora 文件,用于配置连接字符串别名。
  这个文件内容类似如下,参考 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)
  )
  )
  比如我是把这个文件放在 C:\instantclient_12_1\tns 目录下了。
  修改全局配置文件,增加一个 TNS_ADMIN 设置 ,指向这个目录。
  set TNS_ADMIN=C:\instantclient_12_1\tns
  这杨我们连接字符串就可以写成  用户名/密码@实例名
  这个包网上看到下面一些问题:
  https://groups.google.com/forum/#!topic/golang-china/4OmCsvqRcKA
3、goci
  https://github.com/hlife/goci  它是修改自 https://github.com/egravert/goci
  作者提供的编译注意事项:
  在相关程序中我加了 cgo 编译时需加的头文件和连接库
  #cgo CFLAGS: -I/home/oracle/app/oracle/product/11.2.0/client_1/rdbms/public
  #cgo LDFLAGS: -lclntsh -L/home/oracle/app/oracle/product/11.2.0/client_1/lib
  您在使用时,请将 /home/oracle/app/oracle/product/11.2.0/client_1 修改为你的
  系统中 $ORACLE_HOME 的字串值
  如果你使用简易的安装包,请在
  http://www.oracle.com/technetwork/topics/linuxx86-64soft-092277.html
  下载:
  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环境变量。
  同时需设置
  export TNS_ADMIN=/home/oracle/app/oracle/product/11.2.0/client_1/network/admin
  ### ORACLE_HOME 以您系统实际情况进行修改。
参考资料:
  参看资料:
  golang 和 oracle 数据库编程类库介绍
  http://bbs.mygolang.com/thread-202-1-1.html
  golang 在 redhat linux 下如何连接 oracle?
  http://www.oschina.net/question/110132_91394
  微博上一些相关讨论
  http://s.weibo.com/weibo/golang%2520oracle&b=1&page=1


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-594342-1-1.html 上篇帖子: golang命令行库cobra的使用 下篇帖子: Golang 读取写入Etcd
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表