我试图从Linux上的C# DotNetCore2.2微服务连接到Oracle。它正在抛出一个“无法解决连接主机名”错误,ORA-12545。我试图避免使用IP地址进行连接,并且无法在此框上安装Oracle客户端,我怀疑这是一个简单的修复方法。我应该提到,直接连接到IP确实能在Linux上工作,只有主机名无法连接。
在没有安装Oracle客户端的情况下,在本地windows机器上运行时,连接工作正常。我尝试过几个版本的ODP.NET核心包,但都没有效果。linux机器是一个RedHat7.7盒。我尝试将ip/主机名添加到/etc/host文件中。主机名的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):资源暂时不可用
任何想法都会很棒的,我都快用完了!
发布于 2019-10-24 18:17:07
问题是linux盒位于与oracle盒不同的域上。一种非刺激型的东西。在最初的连接尝试中,非prod盒从oracle那里收到了主机名的缩短版本。Windows框解决了这一问题,因为它们与oracle框位于相同的域中。更新linux框上的/etc/rupve.conf以查看其搜索中的两个域,解决了这个问题。理想情况下,甲骨文会返回完全限定的主机名,但这也是可行的!
https://stackoverflow.com/questions/58523735
复制相似问题