我有一个 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 客户端运行了一些东西。

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

github.com/mattn/go-oci8 ld:警告:忽略文件/Users/myusername/Downloads/instantclient_11_2/libclntsh.dylib,文件是为 i386 构建的,它不是被链接的架构 (x86_64):/Users/myusername/Downloads/instantclient_11_2/libclntsh.dylib 体系结构 x86_64 的 undefined symbol :

然后是一长串符号。基本上,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_SYSAS

对遇到同样问题的人的最终编辑(进入一个非常古老的 Oracle 数据库)——您无法使用 Go 与现成的解决方案进行交互。列出的可与 Oracle 配合使用的库适用于客户端版本 11.2 及更高版本。

请您参考如下方法:

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

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

检查 Client / Server Interoperability Support Matrix for Different Oracle Versions (Doc ID 207303.1)了解详情。

它说:

For connections between 10.2 (or higher) and 9.2 the 9.2 end MUST be at 9.2.0.4 or higher. Connections between 10.2 (or higher) and 9.2.0.1, 9.2.0.2 or 9.2.0.3 have never been supported.

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


评论关闭
IT虾米网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!