美文网首页
Golang 连接 Oracle

Golang 连接 Oracle

作者: Hmcf | 来源:发表于2019-11-18 15:09 被阅读0次

    我们使用: https://github.com/rana/ora

    原本我们使用下面的命令就可以装好:

    go get gopkg.in/rana/ora.v4
    

    但因为墙的原因,无法下载,这时可以到github.com中直接把包下载下来,然后再安装:

    cd $GOPATH/src/gopkg.in/rana
    git clone https://github.com/rana/ora.git ora.v4
    cd ora.v4
    git checkout -b v4.1.15 v4.1.15
    

    然后再如下操作:

    git install gopkg.in/rana/ora.v4
    

    这时可能会缺一些依赖包,报如下错误:

    [dbrpcsrv@rabbitmq01 ora.v4]$ go install gopkg.in/rana/ora.v4
    num/ocinum.go:18:2: cannot find package "github.com/pkg/errors" in any of:
        /usr/local/go/src/github.com/pkg/errors (from $GOROOT)
        /home/dbrpcsrv/gopath/src/github.com/pkg/errors (from $GOPATH)
    conn.go:12:2: cannot find package "golang.org/x/sync/errgroup" in any of:
        /usr/local/go/src/golang.org/x/sync/errgroup (from $GOROOT)
        /home/dbrpcsrv/gopath/src/golang.org/x/sync/errgroup (from $GOPATH)
    

    需要把这几个依赖包装上:

    cd $GOPATH/src/golang.org/x
    git clone https://github.com/golang/sync.git sync
    go install sync
    
    go get github.com/pkg/errors
    

    这时因为没有装oracle的客户端库,需要把客户端库装上,到
    http://www.oracle.com/technetwork/topics/linuxx86-64soft-092277.html
    下载:

    • oracle-instantclient12.2-basic-12.2.0.1.0-1.x86_64.rpm
    • oracle-instantclient12.2-sqlplus-12.2.0.1.0-1.x86_64.rpm

    然后安装:

    rpm -ivh oracle-instantclient12.2-basic-12.2.0.1.0-1.x86_64.rpm
    rpm -ivh oracle-instantclient12.2-sqlplus-12.2.0.1.0-1.x86_64
    

    安装完后,驱动程序还不知道这些库在什么路径下,这个路径是靠$GOPATH/gopkg.in/rana/ora.v4路径下的contrib/oci8.pc文件指定的,按官方文档:

    cp -aL contrib/oci8.pc /usr/local/lib/pkgconfig/oci8.pc
    

    但上面是把文件拷贝到/usr/local/lib/pkgconfig目录下,这个目录不是工具pgk-config的默认目录,为了方便,我们直接把这个文件拷贝到pkg-config的默认目录/usr/lib64/pkgconfig目录下:

    cd $GOPATH/gopkg.in/rana/ora.v4
    cp -aL contrib/oci8.pc /usr/lib64/pkgconfig/.
    

    因为我们下载的oracle instant版本是12.2版本,需要把/usr/lilb64/pkgconifg/oci8.pc中的的version=12.1改成version=12.2

    再编译,会报如下错误:

    [dbrpcsrv@rabbitmq01 ~]$ go install gopkg.in/rana/ora.v4
    # gopkg.in/rana/ora.v4
    /bin/ld: warning: libmql1.so, needed by /usr/lib/oracle/12.2/client64/lib/libclntsh.so, not found (try using -rpath or -rpath-link)
    /bin/ld: warning: libipc1.so, needed by /usr/lib/oracle/12.2/client64/lib/libclntsh.so, not found (try using -rpath or -rpath-link)
    /bin/ld: warning: libnnz12.so, needed by /usr/lib/oracle/12.2/client64/lib/libclntsh.so, not found (try using -rpath or -rpath-link)
    /bin/ld: warning: libons.so, needed by /usr/lib/oracle/12.2/client64/lib/libclntsh.so, not found (try using -rpath or -rpath-link)
    /bin/ld: warning: libclntshcore.so.12.1, needed by /usr/lib/oracle/12.2/client64/lib/libclntsh.so, not found (try using -rpath or -rpath-link)
    /usr/lib/oracle/12.2/client64/lib/libclntsh.so: undefined reference to `ztcedec'
    /usr/lib/oracle/12.2/client64/lib/libclntsh.so: undefined reference to `sltstan'
    /usr/lib/oracle/12.2/client64/lib/libclntsh.so: undefined reference to `larch_query'
    /usr/lib/oracle/12.2/client64/lib/libclntsh.so: undefined reference to `LhtStrSearch'
    /usr/lib/oracle/12.2/client64/lib/libclntsh.so: undefined reference to `lpusets'
    /usr/lib/oracle/12.2/client64/lib/libclntsh.so: undefined reference to `LdiDateFromString1'
    /usr/lib/oracle/12.2/client64/lib/libclntsh.so: undefined reference to `ztcedchk'
    /usr/lib/oracle/12.2/client64/lib/libclntsh.so: undefined reference to `lrmpaa'
    ...
    ...
    ...
    

    这个错误是没有指定动态库的路径导致的,设置如下环境变量:

    export LD_LIBRARY_PATH=/usr/lib/oracle/12.2/client64/lib
    

    注:最好把上面的环境变量设置到.bash_profile文件中

    再编译安装就OK了。

    go install gopkg.in/rana/ora.v4
    

    相关文章

      网友评论

          本文标题:Golang 连接 Oracle

          本文链接:https://www.haomeiwen.com/subject/sbcbictx.html