我做了一个小应用程序,它应该连接到在虚拟机器内运行的远程Oracle数据库(W8.1).
在一个成功的连接上,应该弹出一个showmessage.
我完成了以下步骤以确保我的应用程序能够连接:
installing Oracle Instantclient on Mac OS/X without setting environment variables?
该应用程序使用FireDac的Oracle FireDAC.Phys.Oracle驱动程序进行连接,并使用TFDGUIxLoginDialog进行登录.
确实没什么特别的:
procedure TForm1.Button1Click(Sender: TObject); begin FDConnection1.Connected := True; end; procedure TForm1.FDConnection1AfterConnect(Sender: TObject); begin ShowMessage('Connected'); end; procedure TForm1.FDConnection1Error(ASender: TObject; const AInitiator: IFDStanObject; var AException: Exception); begin ShowMessage(AException.ToString); end;
这在Windows 8.1和10中运行良好而且快速.
但是在Mavericks中我得到了OID生成失败错误,如图所示.
如果我使用VM的IP或DNS名称进行连接并不重要.根本不会连接.
通过Oracle的SQL Developer能够连接.
Oralce SQL Developer大约需要15到20秒才能建立与数据库的连接.
我的应用程序甚至没有尝试那么长的连接.它在约7秒后失败.
也许在稳定连接可用之前它会超时?
如果是这样,有没有办法在抛出错误之前延长登录过程的时间?
或许这是一个完全的其他问题?
请注意,我花了大约5个小时来解决这个问题已经没有成功.
任何帮助是极大的赞赏.
解决方法
好的,这就是出了什么问题.
我的OSX Mavericks来宾系统的主机文件不正确.
就像@whosrdaddy发布的那样,您必须更改您的主机文件,如以下链接中所述:http://chaos667.tumblr.com/post/20006357466/ora-21561-and-oracle-instant-client-11-2
我确实输入了可以在分享中找到的Devicename – > OSX控制面板中的Devicename.
所以我所做的是在主机文件中输入此名称.
但是我使用的名称不正确.
我使用echo“127.0.0.1 $(hostname)打印正确的名称得到了正确的名称:127.0.0.1 LionVM.local.
我很长一段时间没有使用这个VM,可能忘记了我在不久前升级到Mavericks后重命名了devicename.
现在我的应用程序能够连接.