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.Args0 + " user/password@host:port/sid")

}

db, err := sql.Open("oci8", os.Args1)

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

相关推荐
2301_789015621 分钟前
Linux基础开发工具一:软件包管理器、vim编辑器
linux·服务器·c语言·汇编·c++·编辑器·vim
wx_jiuyun6783 分钟前
渔夫Telegram群机器人系统详解
linux·服务器·机器人
开开心心就好5 分钟前
新手友好的音视频格式转换工具
linux·服务器·网络·智能手机·pdf·beautifulsoup·音视频
哎呦,帅小伙哦6 分钟前
Nanomsg 源码深度剖析:从 protocol.h 内核抽象到 Pair 一对一通信全实现
linux·nanomsg
hanlin0311 分钟前
基于OpenHarmony 5.0的CAN驱动移植步骤
linux·c语言·华为·can·openharmony·t527
刘国华-平价IT运维课堂12 分钟前
Ubuntu 26.04 LTS 发布,研发与运维需要关注什么?
linux·运维·服务器·人工智能·ubuntu
YIN_尹12 分钟前
【Linux系统编程】基础IO第一讲——系统文件IO
android·java·linux·c++
j_xxx404_13 分钟前
MySQL数据库基础硬核解析:从 C/S 网络服务到磁盘文件与存储引擎
linux·运维·服务器·开发语言·数据库·mysql·ai
艾莉丝努力练剑13 分钟前
【QT】系统相关:QT文件
linux·服务器·开发语言·网络·qt·tcp/ip·计算机网络
C137的本贾尼19 分钟前
【实战】实现一个带事务与索引的命令行图书借阅系统
数据库·microsoft·oracle