ubuntu16.04搭建oracle環境用於golang開發
阿新 • • 發佈:2019-05-17
映象版本
在docker hub上搜索oracle,隨便找了一個xe 11版本的映象。
docker pull deepdiver/docker-oracle-xe-11g
映象大小在1G左右,下載完成解壓後大約2.7GB。
執行
docker run -d -p 1522:22 -p 1521:1521 --name oracle deepdiver/docker-oracle-xe-11g
使用以上命令執行oracle。等1分鐘左右,使用ssh root@localhost -p 1522可進入該容器,密碼是admin。
進入bash環境後,執行如下命令,可解決中文亂碼問題。
export NLS_LANG="SIMPLIFIED CHINESE_CHINA.AL32UTF8"
映象已經安裝了sqlplus工具,可直接使用該工具進行連線,預設的system使用者的密碼是oracle。登入時會提示密碼即將獲取,改下密碼即可。
# 使用sqlplus連線oracle
sqlplus system/oracle@//localhost/xe
# 修改密碼
alter user system identified by oracle;
ubuntu16.04安裝client
下載
在頁面下載當前版本的basic和sdk client包,我這邊下載的是19.3版本,檔案是instantclient-basic-linux.x64-19.3.0.0.0dbru.zip , instantclient-sdk-linux.x64-19.3.0.0.0dbru.zip。
建立/opt/oracle目錄,將上面兩個檔案移動到/opt/oracle目錄並解壓,將得到/opt/oracle/instantclient_19_3目錄
配置oci8
可通過/usr/lib/pkgconfig目前是否存在確定當前ubuntu16.04已經安裝過pkg_config,直接在該目錄下新增oci8.pc,內容如下:
prefix=/opt/oracle/instantclient_19_3 exec_prefix=${prefix} libdir=${exec_prefix} includedir=${prefix}/sdk/include glib_genmarshal=glib-genmarshal gobject_query=gobject-query glib_mkenums=glib-mkenums Name: oci8 Description: oci8 library Libs: -L${libdir} -lclntsh Cflags: -I${includedir} Version: 19.3
配置環境變數
配置如下環境變數,不然golang執行會報錯
export LD_LIBRARY_PATH=/opt/oracle/instantclient_19_3
golang
編寫單元測試用於oracle連線測試,先import驅動
import(
_ "github.com/mattn/go-oci8"
)
獲取連線
func getConn() (*sql.DB, error) {
db, err := sql.Open("oci8", "system/oracle@localhost/xe")
if err != nil {
logrus.Errorf("init sql connection error:%s", err.Error())
return db, err
}
// defer db.Close()
if err = db.Ping(); err != nil {
logrus.Errorf("open sql connection error:%s", err.Error())
return db, err
}
return db, err
}
呼叫儲存過程
func TestOracleV2(t *testing.T) {
db, err := getConn()
if err != nil {
return
}
loginStmt, err := db.Prepare(`begin PKG_SMS_INTERFACE.send_sms('ms','簡訊平臺密碼',:1,:2,1,sysdate,:3);end;`)
var result string
defer loginStmt.Close()
_, err = loginStmt.Exec("181027", "回家吃飯了", sql.Out{Dest: &result})
if err != nil {
logrus.Errorf("exec error:%s", err.Error())
return
}
fmt.Println(result)
}
呼叫結果:
=== RUN TestOracleV2
success
--- PASS: TestOracleV2 (0.03s)
通過sqlplus查詢表中的資料:
PHONE
--------------------
CONTENT
--------------------------------------------------------------------------------
SEND_TIME
--------------
10.20.0.5:3906,2019-05-17 08:55:06
17-5月 -19
181027
回家吃飯了