如何解决远程数据库上的 Firebird“不可用数据库”错误?

问题描述 投票:0回答:2

我有一个在远程 Windows XP PC 上运行的 Firebird 2.0 数据库。
使用 ADO.net 连接提供程序,我按如下方式配置连接:

Dim x As New FirebirdSql.Data.FirebirdClient.FbConnectionStringBuilder
x.Database = "[hostname]:FileShare:/db/REMOTE_SVR.FDB"
x.UserID = "SYSDBA"
x.Password = "masterkey"

Dim y As New FirebirdSql.Data.FirebirdClient.FbConnection(x.ConnectionString)
y.Open()

尝试打开连接引发

FbException
,消息“不可用数据库”。

下载 ODBC 驱动程序并尝试连接这些设置会产生相同的错误消息。

我已将数据库文件复制到我的开发环境并验证我可以使用这些设置连接到

x.Database = "c:\testdb\REMOTE_SVR.FDB"
(使用本地安装的 Firebird 2.0 服务器)。

我已经确认Firebird 2.0 Server 正在远程PC 上运行。数据库所在的文件共享不需要任何登录或权限。

我可能在做一些愚蠢的事情,但我没有想法。

.net vb.net firebird
2个回答
8
投票

Firebird 默认情况下不会打开位于网络共享上的数据库文件。该文件必须位于服务器的物理磁盘上。这样做是为了防止数据库因文件锁定不正确或不充分而损坏(例如,当来自不同机器的多个 Firebird 服务器进程访问时)。

因此您需要将数据库移动到托管 Firebird 服务器进程的机器的真实驱动器之一。


0
投票

我的回答不是关于使用 ADO.net 设置连接,但我仍然尝试回答如何从 Windows 连接到远程 FDB。

  1. firebird.conf
    中将
    RemoteFileOpenAbility
    设置为1。此参数将允许您的DBMS连接到位于远程文件夹中的数据库。还要检查
    Redirection
    参数是否设置为 0 或用 #.

    注释
  2. https://learn.microsoft.com/en-us/sysinternals/downloads/psexec下载PSTools,解压。

  3. PSTools
    文件夹通过CMD(以管理员身份启动)执行
    psexec -i -s cmd.exe
    ,接受协议。

  4. 在弹出的 CMD 窗口中执行

    whoami
    以检查您现在是否被识别为
    nt authority\system
    .

  5. 在那个窗口中执行这样的命令:

net use z: \\123.111.111.111\my_share /persistent:yes
,其中
z
是您要分配的网络盘符,
123.111.111.111\my_share
是您的网络共享地址。如果命令成功执行,您将在资源管理器中看到新的网络驱动器。

如果你有

System error 58
,请尝试使用指定的用户/密码来执行命令,例如:

net use z: \\123.111.111.111\my_share /persistent:yes /user:"your username" "your password"

如果将来您需要断开该网络驱动器,请执行步骤 3,然后执行

net use z: /delete
。或者只是重启操作系统。

  1. 现在您可以启动您的客户端(ibexpert、dbeaver 等)并连接到远程 FDB 文件:
  • 服务器名称:
    localhost
  • FDB文件路径:
    Z:/path_to_FDB/some_db.FDB
© www.soinside.com 2019 - 2024. All rights reserved.