4

我制作了一个小应用程序,它应该连接到在虚拟机(W8.1)中运行的远程 Oracle 数据库。

在成功的连接上,应该会弹出一个显示消息。

我按照这些步骤确保我的应用程序能够连接: 在 Mac OS/X 上安装 Oracle Instantclient 而不设置环境变量?

该应用程序使用 FireDac 的 OracleFireDAC.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 中运行良好且快速。

但是在小牛队中,我得到了OID generation failed如图所示的错误。

如果我使用虚拟机 IP 或 DNS 名称进行连接并不重要。它根本不会连接。

Oracle 的 SQL Developer 能够连接。

Oralce SQL Developer 大约需要 15 到 20 秒才能建立到数据库的连接。

我的应用程序甚至没有尝试那么长时间来连接。约 7 秒后失败。

也许在稳定的连接可用之前它会超时?

如果是这样,有没有办法在抛出错误之前延长登录过程时间?

或者这可能是一个完整的其他问题?

请注意,我花了大约 5 个小时来解决这个问题,但没有成功。

任何帮助是极大的赞赏。

4

1 回答 1

3

好的,这就是问题所在。

我的 OSX Mavericks 访客系统的主机文件不正确。

就像@whosrdaddy 发布的一样,您必须更改您的主机文件,如以下链接中所述:http ://chaos667.tumblr.com/post/20006357466/ora-21561-and-oracle-instant-client-11-2

我确实输入了可以在 OSX 控制面板的共享 -> 设备名称中找到的设备名称。

osx 控制面板设备名

所以我所做的就是在主机文件中输入这个名称。

osx 主机文件

但是我使用了不正确的名称

我通过使用echo "127.0.0.1 $(hostname)which 打印了正确的名称得到了正确的名称:127.0.0.1 LionVM.local.

我很久没有使用这个虚拟机了,可能忘记了我前段时间升级到 Mavericks 后重命名了设备名。

现在我的应用程序能够连接。

于 2014-11-16T10:14:23.883 回答