Go lang连接到Oracle 9i(使用Go-oci8)



我有一个32位的Oracle DB(版本9i-9.2.0.7.0(,一个64位的Mac,我正试图使用go-oci8和go-Lang(版本go1.11.1 darwin/aamd64(连接到它。

我使用SQL Developer 4.0.2成功连接到数据库,然后使用本教程通过它启用了InstantClient连接。因此,我已经从Oracle客户端开始运行了。

我使用的是用于MacOS(基本版和SDK(的InstantClient 11.2.0.4.0版(32位(,我主要成功地使用了本教程。毕竟,我得到的错误是:

github.com/mattn/go-oci8 ld: warning: ignoring file /Users/myusername/Downloads/instantclient_11_2/libclntsh.dylib, file was built for i386 which is not the architecture being linked (x86_64): /Users/myusername/Downloads/instantclient_11_2/libclntsh.dylib Undefined symbols for architecture x86_64:

然后是一长串符号。基本上,Go oci8库尝试使用C(64位(,并尝试构建64位文件,然后由Go使用。如果我尝试使用64位版本的InstantClient,我没有问题,但我会收到一个"驱动程序:连接不好"的错误,这是因为64位由于某种原因无法连接。

我不知道该怎么解决这个问题——在使用go get -u -v github.com/mattn/go-oci8时,我能以某种方式强制构建32位文件吗?或者以某种方式使64位InstantClient版本连接到旧的32位Oracle数据库?

如果能为我们提供任何帮助,我们将不胜感激。

编辑:我已经尝试过10.2 Oracle客户端,但我无法将其与go-oci8连接(我认为它不支持它(。我得到的错误是../github.com/mattn/go-oci8/oci8.go:113:25: could not determine kind of name for C.OCI_SYSASM

对于有同样问题的人的最终编辑(使用非常旧的Oracle数据库(-您无法使用Go与现成的解决方案对接。列出的可与Oracle配合使用的库可与客户端11.2及更高版本配合使用。

Oracle客户端的体系结构必须与应用程序的体系结构相匹配。也就是说,如果你的Go Lang是64位的,那么Oracle客户端也必须是64位。数据库是32位还是64位并不重要。

我认为主要的问题是,您无法将Oracle 11.2客户端连接到(20年历史!(Oracle 9i数据库。

有关详细信息,请查看不同Oracle版本的客户机/服务器互操作性支持列表(文档ID 207303.1(。

上面写着:

对于10.2(或更高版本(和9.2之间的连接,9.2端必须9.2.0.4或更高。10.2(或更高(和9.2.0.1、9.2.0.2或9.2.0.3从未得到支撑。

您没有告诉我们您的ar使用的是哪个版本的"Oracle 9i"。

最新更新