golang 连接oracle 11g数据库

1.安装Oracle的OCI套件(确定系统是否安装gcc和libaio1) 下载地址:

Instant Client for Linux x86-64 (64-bit)

2.下载版本实例

instantclient-basic-linux.x64-12.2.0.1.0.zip

instantclient-sdk-linux.x64-12.2.0.1.0.zip

instantclient-sqlplus-linux.x64-12.2.0.1.0.zip

3.按顺序解压到同一目录

11g: instantclient_12_2

4.root权限移动文件夹到目录 /usr/lib 下

5.root权限执行以下命令 11g:

ln /usr/lib/instantclient_12_2/libclntsh.so.12.1 /usr/lib/libclntsh.so

ln /usr/lib/instantclient_12_2/libocci.so.12.1 /usr/lib/libocci.so

ln /usr/lib/instantclient_12_2/libociei.so /usr/lib/libociei.so

ln /usr/lib/instantclient_12_2/libnnz12.so /usr/lib/libnnz12.so

以下两条是为了运行sqlplus

ln /usr/lib/instantclient_12_2/libsqlplusic.so /usr/lib/libsqlplusic.so

ln /usr/lib/instantclient_12_2/libsqlplus.so /usr/lib/libsqlplus.so

6.把 OCI路径加入系统加载动态库的路径中,并重新加载一次 11g:

echo /usr/lib/instantclient_12_2 >> /etc/ld.so.conf ldconfig

7.安装pkg-config

8.在/usr/lib 目录下创建pkgconfig 目录

9..在/usr/lib/pkgconfig 目录下创建文件oci8.pc,内容如下 11g:

prefix= /usr/lib/instantclient_12_2

libdir=${prefix}

includedir=${prefix}/sdk/include/

Name: oci8

Description: Oracle database engine

Version: 12.2

Libs: -L${libdir} -lclntsh

Libs.private:

Cflags: -I${includedir}

10.在~/.bashrc 文件中添加环境变量 11g:

OCI安装目录

export ORACLE_HOME=/usr/lib/instantclient_12_2

#tnsnames.ora 文件地址需要创建network和admin目录(此步骤也可以省略)

#export TNS_ADMIN=$ORACLE_HOME/network/admin

#OCI安装目录加入动态库加载路径

export LD_LIBRARY_PATH=$ORACLE_HOME

#oci8.pc文件所在路径

export PKG_CONFIG_PATH=/usr/lib/pkgconfig

11.tnsnames.ora 文件的内容(如果export TNS_ADMIN=$ORACLE_HOME/network/admin 没有设置则不需操作此步骤)内容如下:

awsdb=

(DESCRIPTION =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.126)(PORT = 1521))

)

(CONNECT_DATA =

(SERVICE_NAME = awsdb)

)

)

EXTPROC_CONNECTION_DATA =

(DESCRIPTION =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))

)

(CONNECT_DATA =

(SID = PLSExtProc)

(PRESENTATION = RO)

)

)

12.安装go-oci8 (准备条件为:安装了git和go语言运行环境)

可连接网络:

go get github.com/mattn/go-oci8

不可连接网络:

13.在Gopath 下创建sql.go 测试连接文件

Sql.go

package main

import (

"database/sql"

"fmt"

_ "github.com/mattn/go-oci8"

"log"

"os"

)

func main() {

if len(os.Args) != 2 {

log.Fatalln(os.Args[0] + " user/password@host:port/sid")

}

db, err := sql.Open("oci8", os.Args[1])

if err != nil {

log.Fatalln(err)

}

defer db.Close()

rows, err := db.Query("select user from dual")

if err != nil {

log.Fatalln(err)

}

defer rows.Close()

for rows.Next() {

var data string

rows.Scan(&data)

fmt.Println(data)

}

if err = rows.Err(); err != nil {

log.Fatalln(err)

}

}

14.编译并运行测试文件

编译:go build --o sql sql.go

运行:./sql system/oracle@192.168.0.150:1521/testpdb

错误提示处理

1 error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory

sudo yum install libaio

相关推荐
xlq2232211 小时前
4.LInux权限
linux·运维·服务器
Bdygsl11 小时前
Linux(10)—— 进程控制(等待)
linux·运维·服务器
c++逐梦人11 小时前
进程的优先级与切换
linux·服务器·操作系统
重生之绝世牛码11 小时前
Linux软件安装 —— Redis集群安装(三主三从)
大数据·linux·运维·数据库·redis·数据库开发·软件安装
网安CILLE11 小时前
Wireshark 抓包实战演示
linux·网络·python·测试工具·web安全·网络安全·wireshark
是jin奥11 小时前
Ubuntu 18 安装 nodejs 合适版本
linux·ubuntu·vim
网硕互联的小客服11 小时前
如何彻底删除CentOS自带的postfix服务释放25端口?
linux·运维·centos
知识分享小能手11 小时前
Oracle 19c入门学习教程,从入门到精通,Oracle 过程、函数、触发器和包详解(7)
数据库·学习·oracle
天码-行空11 小时前
CentOS 误删 /dev 目录救援方案
linux·运维·centos