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

时间:2018-11-05 16:50:18

标签: oracle go oracle9i

我有一个32位Oracle DB(版本9i-9.2.0.7.0),一个64位Mac,并尝试使用go-oci8和Go Lang(版本go1.11.1 darwin / amd64)连接到它

我使用SQL-Developer 4.0.2成功连接到数据库,然后使用this教程通过它启用InstantClient连接。因此,我从Oracle客户端这边开始工作。

我正在将InstantClient版本11.2.0.4.0(32位)用于MacOS(基本和SDK),我几乎成功地使用了this教程。毕竟,我得到的错误是:

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 DB?

对于如何使它运行的任何帮助,将不胜感激。

编辑:我已经尝试过10.2 Oracle Client,但是无法将其与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及更高版本中运行。

1 个答案:

答案 0 :(得分:1)

Oracle客户端的体系结构必须匹配,因此您的应用程序的体系结构。即如果您的Go Lang是64位,那么Oracle客户端也必须是64位。数据库是32位还是64位都没有关系。

我认为主要的问题是,您无法将Oracle 11.2 Client连接到(已有20年的历史了!)Oracle 9i数据库。

查看Client / Server Interoperability Support Matrix for Different Oracle Versions (Doc 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”。