在 docker hub 上搜索 oracle,找到一个 xe 11 镜像。
搬运工拉深潜水员/搬运工-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环境后,执行以下命令解决中文乱码问题。
导出 NLS_LANGu003d"SIMPLIFIED CHINESE_CHINA.AL32UTF8"
镜像已经安装了sqlplus工具,可以直接连接。系统用户的默认密码是 oracle。登录时会提示即将获取密码。只需更改密码。
连接oracle和sqlplus
sqlplus 系统/oracle@//localhost/xe
更改密码
Ubuntu 16.04 安装客户端更改由 oracle 识别的用户系统;
下载
在页面下载当前版本的basic和sdk客户端包。我在我这边下载版本 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
配置oci8
可以使用 /usr/lib/PKG config 来判断 Ubuntu 16.04 是否已经安装了 PKG config。直接在目录下添加oci8.pc。内容如下:
前缀u003d/opt/oracle/instantclient_19_3
exec_prefixu003d${前缀}
libdiru003d${exec_prefix}
includeiru003d${prefix}/sdk/include
glib_genmarshalu003dglib-genmarshal
gobject_queryu003dgobject 查询
glib_mkenumsu003dglib-mkenums
名称:oci8
说明:oci8库
库:-L${libdir} -lclntsh
Cflags:-I${includedir}
版本:19.3
配置环境变量
配置如下环境变量,否则golang执行会报错
golang导出 LD_LIBRARY_PATHu003d/opt/oracle/instantclient_19_3
编写oracle连接测试的单元测试,先导入驱动
进口(
_“github.com/mattn/go-oci8”
)
获取连接
func getConn() (*sql.DB, 错误) {
db, err :u003d sql.Open("oci8", "system/oracle@localhost/xe")
如果错误 !u003d nil {
logrus.Errorf("初始化 sql 连接错误:%s", err.Error())
返回数据库,错误
}
// 延迟 db.Close()
如果错误 u003d db.Ping();错误!u003d无{
logrus.Errorf("打开 sql 连接错误:%s", err.Error())
返回数据库,错误
}
返回数据库,错误
}
zoz100027`
调用存储过程
func TestOracleV2(t *testing.T) {
分贝,错误 :u003d getConn()
如果错误 !u003d nil {
返回
}
begin PKG_SMS_INTERFACE.send_sms('ms','SMS platform password',:1,:2,1,sysdate,:3);end;
是结果字符串
推迟 loginStmt.Close()
_, err u003d loginStmt.Exec("181027", "回家吃饭", sql.Out{Dest: &result})
如果错误 !u003d nil {
logrus.Errorf("执行错误:%s", err.Error())
返回
}
fmt.Println(结果)
}
调用结果:
u003du003du003d 运行测试OracleV2
成功
--- PASS:TestOracleV2 (0.03s)
通过sqlplus查询表中的数据:
祖兹 100033-
电话
内容
SEND_TIME
10.20.0.5:3906,2019-05-17 08:55:06
17-5月-19
181027
//回家吃饭
17-5月-19