golang 連接oracle 11g數據庫

1.安裝Oracle的OCI套件(確定系統是否安裝gcc和libaio1) 下載地址:https://www.oracle.com/technetwork/database/database-technologies/instant-client/overview/index.html

2.下載版本實例 instantclient-basic-linux.x64-11.2.0.4.0.zip instantclient-sdk-linux.x64-11.2.0.4.0.zip instantclient-sqlplus-linux.x64-11.2.0.4.0.zip

3.按順序解壓到同一目錄
11g: instantclient_11_2

4.root權限移動文件夾到目錄 /usr/lib 下

5.root權限執行以下命令 11g:
ln /usr/lib/instantclient_11_2/libclntsh.so.11.1 /usr/lib/libclntsh.so
ln /usr/lib/instantclient_11_2/libocci.so.11.1 /usr/lib/libocci.so
ln /usr/lib/instantclient_11_2/libociei.so /usr/lib/libociei.so
ln /usr/lib/instantclient_11_2/libnnz11.so /usr/lib/libnnz12.so
以下兩條是爲了運行sqlplus
ln /usr/lib/instantclient_11_2/libsqlplusic.so /usr/lib/libsqlplusic.so
ln /usr/lib/instantclient_11_2/libsqlplus.so /usr/lib/libsqlplus.so

6.把 OCI路徑加入系統加載動態庫的路徑中,並重新加載一次 11g:
echo /usr/lib/instantclient_11_2 >> /etc/ld.so.conf ldconfig

7.安裝pkg-config

8.在/usr/lib 目錄下創建pkgconfig 目錄

9..在/usr/lib/pkgconfig 目錄下創建文件oci8.pc,內容如下 11g:
prefix= /usr/lib/instantclient_11_2
libdir=${prefix}
includedir=${prefix}/sdk/include/

Name: OCI
Description: Oracle database engine
Version: 11.2
Libs: -L${libdir} -lclntsh
Libs.private:
Cflags: -I${includedir}

10.在 .bashrc 文件中添加環境變量 11g:
# OCI安裝目錄
export ORACLE_HOME=/usr/lib/instantclient_11_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)
)
)

  1. 安裝go-oci8 (準備條件爲:安裝了git和go語言運行環境)
    可連接網絡:
    go get github.com/mattn/go-oci8
    不可連接網絡:

  2. 在Gopath 下創建sql.go 測試連接文件
    Sql.go
    package main
    import (
    "database/sql"
    "fmt"
    "log"
    "os"
    _ "github.com/mattn/go-oci8"
    )
    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)
    } }

  3. 編譯並運行測試文件
    編譯:go build –o sql sql.go
    運行:./sql system/[email protected]:1521/testpdb
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章