Проблемы с соединением Oracle с dotnet в Linux - PullRequest
0 голосов
/ 23 октября 2019

Я пытаюсь подключиться к БД Oracle из микросервиса C # dotnet Core 2.2 на Linux. Выдает ошибку «Невозможно разрешить имя узла подключения», ORA-12545. Я пытаюсь избежать использования IP-адреса для подключения и не могу установить клиент Oracle на этом устройстве, что, я подозреваю, было бы легко исправить. Я должен отметить, что подключение напрямую к IP-адресу работает в Linux, при этом не удается установить соединение только с именем хоста.

Соединение прекрасно работает при запуске на локальной машине с Windows без установленного клиента Oracle. Я пробовал несколько версий пакета ODP.NET Core, но безрезультатно. Машина Linux - это Red Hat 7.7. Я попытался добавить ip / hostname в файл / etc / hosts. nslookup на имя хоста работает просто отлично.

Код-нарушитель довольно прост:

string sConnectionString = $"User Id={sUserId};Password={sPassword};Data Source={sHost}:1521/{sServiceName};";
_logger.LogI(sConnectionString);

OracleConnection con = new OracleConnection(sConnectionString);//Dies here on Linux.

System.Console.WriteLine(con.State.ToString());

OracleCommand cmd = con.CreateCommand();

Ошибка: Oracle.ManagedDataAccess.Client.OracleException (0x80004005): ORA-12545: Сетевой транспорт: невозможно разрешить имя узла подключения---> OracleInternal.Network.NetworkException (0x80004005): ORA-12545: сетевой транспорт: невозможно разрешить имя узла подключения ---> System.Net.Internals.SocketExceptionFactory + ExtendedSocketException (00000001, 11): ресурс временно недоступен

Любые идеи были бы великолепны, я их исчерпываю!

1 Ответ

0 голосов
/ 24 октября 2019

Проблема заключалась в том, что ящик linux находился в другом домене, чем ящик оракула. Непродолжительная вещь против прод. При подключении не являющийся продуктом Linux получал сокращенную версию имени хоста от oracle. Ящики Windows решали эту проблему, потому что они находятся в том же домене, что и окно Oracle. Обновление /etc/resolve.conf в окне linux для просмотра обоих доменов в поиске устранило проблему. В идеале, в этом сценарии oracle возвращает полные имена хостов, но это тоже будет работать!

...