Go lang подключается к Oracle 9i (используя go-oci8)

У меня есть 32-битная БД Oracle (версия 9i — 9.2.0.7.0), 64-битный Mac, и я пытаюсь подключиться к нему, используя go-oci8 с помощью Go Lang (версия go1.11.1 darwin/amd64).

Я использовал SQL-Developer 4.0 .2, чтобы успешно подключиться к БД, а затем включить подключение InstantClient через нее, используя этот учебник. Итак, у меня все работает со стороны Oracle Client.

Я использую InstantClient версии 11.2.0.4.0 (32-разрядная версия) для MacOS (базовая версия и SDK), в основном я использовал этот учебник почти успешно. После всего, ошибка, которую я получаю:

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-битная версия не будет работать для подключения по какой-то причине.

Я понятия не имею, что делать, чтобы решить эту проблему - могу ли я каким-то образом заставить сборку 32-битных файлов использовать go get -u -v github.com/mattn/go-oci8? Или как-то подключить 64-битную версию InstantClient к старой 32-битной БД Oracle?

Любая помощь в том, как заставить это работать, будет высоко оценена.

Редактировать: я пробовал 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 и выше.


person sideways    schedule 05.11.2018    source источник


Ответы (1)


Архитектура Oracle Client должна соответствовать архитектуре вашего приложения. т.е. если ваш Go Lang 64-битный, клиент Oracle также должен быть 64-битным. Неважно, 32-битная или 64-битная база данных.

Я думаю, что основная проблема заключается в том, что вы не можете подключиться с помощью клиента Oracle 11.2 к базе данных Oracle 9i (20-летней давности).

См. Матрицу поддержки взаимодействия клиент/сервер для различных версий Oracle (идентификатор документа 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 никогда не поддерживались.

Вы не сказали нам, какую версию "Oracle 9i" вы используете.

person Wernfried Domscheit    schedule 05.11.2018
comment
Версия 9.2.0.7. С тех пор я пытался использовать 64-битную версию 11.2, и я продолжаю получать Error connecting to the database: driver: bad connection, поэтому я предполагаю, что мне нужно будет перейти на версию ниже 11.2, попробовать 10.2 и молиться, чтобы она работала. - person sideways; 05.11.2018
comment
Как насчет обновления базы данных? - person Wernfried Domscheit; 06.11.2018
comment
Это в работе, но это долгосрочное решение. Я надеялся найти быстрый способ взаимодействовать с ним, но мне придется обратиться к более старому языку, такому как PHP или Python. После вашего комментария и моих последних вечерних раскопок я считаю, что ни один пакет Go не поддерживает версию клиента Oracle 10.2. Спасибо за помощь и прочтение моих мучений. - person sideways; 06.11.2018