我们有一个运行Firebird数据库的POS系统,其余的业务都在基于SQL Server的SYSPRO上。
我想在两个数据库之间运行查询和视图,因为两个数据库都有可以匹配的唯一键。
是否通过链接服务器执行此操作?我已经尝试了链接服务器的一些变体,并且不断收到各种错误消息。这就是我到目前为止所得到的:
EXEC master.dbo.sp_addlinkedserver
@server = N'OMNI',
@srvproduct=N'OMNI',
@provider=N'MSDASQL',
@datasrc=N'C:\Omni\Company\Data\databasefile.FDB',
@provstr=N'Driver={Firebird/InterBase(r) driver};Dbname=C:\Omni\Company\Data\databasefile.FDB;CHARSET=NONE;UID=SYSDBA;'我也尝试过使用Excel进行连接,我可以使用以下连接字符串查看数据库和表:
Provider=MSDASQL.1;Persist Security Info=True;Data Source=Omni;Extended Properties="DSN=Omni;Driver={Firebird/InterBase(r) driver};Dbname=C:\Omni\Company\Data\databasefile.FDB;CHARSET=NONE;UID=SYSDBA;";Initial Catalog=Omni发布于 2016-12-19 18:49:37
好的,这就是答案(这之后我还有一小段头发;-)
我不能回答为什么这是可行的技术问题,但它是可行的。
首先,您需要安装
Firebird 2.5
然后是32位驱动程序
然后64位驱动程序
然后转到命令提示符(管理员)。转到安装Firebird 2.5的位置。在我的例子中是
C:\Program Files (x86)\Firebird\Firebird_2_5\bin\然后输入:
fbguard.exe - a这将使Firebird服务器的一个版本正常运行。
然后是一个ODBC链接的简单设置。
如果您尝试链接到数据库的本地实例,请不要忘记将
localhost:\Company\Data\Companydata.fdb发布于 2019-05-20 22:56:50
简短的回答是肯定的,它是有效的(有正确的驱动程序,SQL端)。
让我试着简化这个场景。事实上,目前还不清楚OP所说的是哪种安装。
SQL Server必须使用ODBC或OLE DB驱动程序。不幸的是,官方火鸟司机的日期是2017年。一些第三方做了它们,devart,ibprovider,ibphonix等等。我使用ibprovider做了我的测试。
最初的post显示了这个连接字符串(部分):"Dbname=C:\Omni\Company\Data\databasefile.FDB".
说通过TCP/IP连接的传统方式是"IP地址/端口:数据库_文件_路径“,OP似乎面对嵌入式Firebird安装。不同之处在于,在后一种情况下,没有Firebird服务响应请求。所有的工作都是通过一个DLL完成的,这个DLL通常被命名为fbembed.dll。
按照建议将Firebird安装为服务,肯定会解决这个问题,因为在此安装之后,会有一个(Windows)服务始终运行并管理数据库。但是,如果您不想/不需要此服务,MS SQL Server也可以使用“嵌入式”安装。
我几乎没有发现的主要规则是:所需的一堆Firebird DLL(但fbembed.dll)必须安装在Windows系统文件夹中(手册中的报告正好相反……)。
总而言之,我已经用这种方式构建了一个工作服务器。
0)我让benn一直使用ibprovider驱动程序,因为他们的开发者提供了很好的支持服务。此外,还可以在此处找到一些基本说明:https://www.ibprovider.com/eng/documentation/mssql_2012.html
1)我开始下载官方的嵌入式包。
2)在data文件夹中,我已经将数据库、fbembed.dll和firebird.msg
3)在windows系统文件夹中,我已经注册了所需的最小firebird DLL : icuuc30、icuin30、icudt30和ib_util。
4)然后,我使用以下字符串(如果需要fbclient.dll,只需复制/粘贴embeded.dll并重命名它)创建了一个链接服务器(是的,OPENROWSET完全相同):
EXEC master.dbo.sp_addlinkedserver @server = N'myName', @srvproduct=N'myName', @provider=N'LCPI.IBProvider.3', @datasrc=N'myName', @provstr=N'location=E:\mypath\MYDB.GDB;dbclient_library_64=E:\mypath\fbembed.dll;auto_commit=true;nested_trans=true;truncate_char=false;dbtime_rules=1;support_odbc_query=true;asynch_fetch=2;ignore_err_param=4;schema_ldr_cfg__check_constraints=0;schema_ldr_cfg__descriptions=0;dbclient_type=fb'5)安全性不是问题。DLL不管理它,但您需要传递一个userid/password对:
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'myName',@useself=N'False',@locallogin=NULL,@rmtuser=N'SYSDBA',@rmtpassword='anytring'6)您确实需要将两个特殊选项设置为True:排序、允许进程内、RPC、RPC输出。
是的,它可以工作。而且它至少节省了几MB内存,因为你没有一个经常运行的服务。
最后但并非最不重要的一点是,感谢帮助我解决问题的ibprovider.com开发人员。
https://stackoverflow.com/questions/41163319
复制相似问题