Linked Server zu Firebird 15 und 2

19/05/2009 - 11:28 von Christoph Ingenhaag | Report spam
Hallo zusammen,

ich habe mir einen Wolf gesucht um die korrekten Verbindungsinformationen
für Firebird 15 und 2 für Linked Server in SQL Server 2005 (Lesen/Schreiben)
mit (kommerziellen) IBProvidern herauszubekommen...

Hier findet man Informationen
http://www.connectionstrings.com/
http://www.ibprovider.com/forum/sit...opic.php?t
aber leider nicht solche, die (bei mir) zu einem funktionsfàhigen Ergebnis
geführt hàtten.

Nach langer herumprobiererei bin ich zu folgendem Ergebnis gekommen:
(Das Skriptgerüst habe ich von http://www.ibprovider.com/)

Firebird 2
use master

declare @LINKED_SERVER_NAME nvarchar(max);
declare @PRODUCT_NAME nvarchar(max);
declare @IBPROVIDER nvarchar(max);
declare @DATA_SOURCE nvarchar(max);
declare @CN_STR nvarchar(max);

set @LINKED_SERVER_NAME = N'FIREBIRD_2_1';
set @PRODUCT_NAME = N'EMPLOYEE_FDB';
set @IBPROVIDER = N'LCPI.IBProvider.3';
set @DATA_SOURCE = N'localhost:C:\Program
Files\Firebird\Firebird_2_1\examples\empbuild\EMPLOYEE.FDB';
set @CN_STR = N'truncate_char=false;
support_odbc_query=true;support_square_delim_name=1; user=sysdba;
password=masterkey;auto_commit=true;'

/* DROP LINKED SERVER */
IF EXISTS (SELECT srv.name FROM sys.servers srv
WHERE srv.server_id != 0 AND srv.name = @LINKED_SERVER_NAME)
EXEC master.dbo.sp_dropserver @server=@LINKED_SERVER_NAME,
@droplogins='droplogins'

/* CREATE LINKED SERVER */
EXEC master.dbo.sp_addlinkedserver
@server = @LINKED_SERVER_NAME,
@srvproduct = @PRODUCT_NAME,
@provider = @IBPROVIDER,
@datasrc = @DATA_SOURCE,
@provstr = @CN_STR

/* set up Extended properties of the Linked Server */
EXEC master.dbo.sp_serveroption @server=@LINKED_SERVER_NAME,
@optname='data access', @optvalue='true'
EXEC master.dbo.sp_serveroption @server=@LINKED_SERVER_NAME,
@optname='rpc', @optvalue='true'
EXEC master.dbo.sp_serveroption @server=@LINKED_SERVER_NAME,
@optname='rpc out', @optvalue='true'
EXEC master.dbo.sp_serveroption @server=@LINKED_SERVER_NAME,
@optname='use remote collation', @optvalue='true'

/* Set up Allow In Process, Dynamic Paramater on SQL Express 2005 */
EXEC master.dbo.sp_MSset_oledb_prop N'LCPI.IBProvider.3', N'AllowInProcess', 1
EXEC master.dbo.sp_MSset_oledb_prop N'LCPI.IBProvider.3',
N'DynamicParameters', 1
go
Firebird 15
use master

declare @LINKED_SERVER_NAME nvarchar(max);
declare @PRODUCT_NAME nvarchar(max);
declare @IBPROVIDER nvarchar(max);
declare @DATA_SOURCE nvarchar(max);
declare @CN_STR nvarchar(max);

set @LINKED_SERVER_NAME = N'FIREBIRD_1_5';
set @PRODUCT_NAME = N'EMPLOYEE_FDB';
set @IBPROVIDER = N'LCPI.IBProvider.3';
set @DATA_SOURCE = N'localhost:C:\Program Files
(x86)\Firebird\Firebird_1_5\examples\EMPLOYEE.FDB'
set @CN_STR = N'ctype=NONE;auto_commit=true;';

/* DROP LINKED SERVER */
IF EXISTS (SELECT srv.name FROM sys.servers srv
WHERE srv.server_id != 0 AND srv.name = @LINKED_SERVER_NAME)
EXEC master.dbo.sp_dropserver @server=@LINKED_SERVER_NAME,
@droplogins='droplogins'

/* CREATE LINKED SERVER */
EXEC master.dbo.sp_addlinkedserver
@server = @LINKED_SERVER_NAME,
@srvproduct = @PRODUCT_NAME,
@provider = @IBPROVIDER,
@datasrc = @DATA_SOURCE,
@provstr = @CN_STR

EXEC master.dbo.sp_addlinkedsrvlogin
@rmtsrvname=N'FIREBIRD_1_5',@useself=N'False',@locallogin=NULL,@rmtuser=N'sysdba',@rmtpassword='masterkey'

/* set up Extended properties of the Linked Server */
EXEC master.dbo.sp_serveroption @server=@LINKED_SERVER_NAME,
@optname='data access', @optvalue='true'
EXEC master.dbo.sp_serveroption @server=@LINKED_SERVER_NAME,
@optname='rpc', @optvalue='true'
EXEC master.dbo.sp_serveroption @server=@LINKED_SERVER_NAME,
@optname='rpc out', @optvalue='true'
EXEC master.dbo.sp_serveroption @server=@LINKED_SERVER_NAME,
@optname='use remote collation', @optvalue='true'

/* Set up Allow In Process, Dynamic Paramater on SQL Express 2005 */
EXEC master.dbo.sp_MSset_oledb_prop N'LCPI.IBProvider.3', N'AllowInProcess', 1
EXEC master.dbo.sp_MSset_oledb_prop N'LCPI.IBProvider.3',
N'DynamicParameters', 1
go


Zum Testen:
select * from FIREBIRD_1_5...COUNTRY

set xact_abort on --!!
begin tran
update FIREBIRD_1_5...COUNTRY set
CURRENCY = 'EURO'
where
COUNTRY in
(
'Italy',
'France',
'Germany',
'Belgium',
'Austria',
'Netherlands'
)

select * from FIREBIRD_1_5...COUNTRY

rollback

select * from FIREBIRD_1_5...COUNTRY

Mehr habe ich noch nicht getestet...

Wer mehr Infos zu dieser Problemstellung hat, immer her damit :)

Hier findet man mehr als connection string parameters an denen man sich bei
Problemen versuchen kann:
http://www.ibprovider.com/eng/docum...y_001.html

Bei SQL Server 2008 bin ich zu keinem Ergebnis gekommen, da sich die
IBProvider nur für 2005 installieren lassen.

HTH

Viele Grüße
Christoph Ingenhaag
 

Lesen sie die antworten

#1 Elmar Boye
19/05/2009 - 12:39 | Warnen spam
Hallo Christoph,

"Christoph Ingenhaag" schrieb...
ich habe mir einen Wolf gesucht um die korrekten Verbindungsinformationen
für Firebird 15 und 2 für Linked Server in SQL Server 2005 (Lesen/Schreiben)
mit (kommerziellen) IBProvidern herauszubekommen...



Warum muß es kommerziell sein, sollte dabei als Frage erst
immer erst gestellt werden.

Firebird ist ein Opensource Abkömmling von Borlands Interbase
(mit wechselhafter Geschichte).

Meine (àlteren) Erfahrungen beziehen sich konkret auf
SQL Server 2000 <-> Interbase 5.x, in der Praxis sollte
sich aber im Konnektivitàtsbereich nur wenig getan
haben.

Grundsàtzlich würde ich den ODBC Weg bevorzugen,
da die Unterstützung dafür schlicht und einfach besser ist,
da über die Jahre gewachsen und gereift.
Ole Db Provider von Drittanbietern sind hàufig wackelig -
ohne damit eine Aussage zum IBProvider zu machen,
da ich den nicht kenne.

Denn nur Microsoft (als Erfinder) ist dort voll eingestiegen
und hat sich mit ADO.NET mittlerweile davon abgewendet
und mittlerweile die ODBC Entwicklung (mal als veraltet bezeichnet)
wieder belebt:
http://blogs.msdn.com/sqlnativeclie...7-sdk.aspx

http://www.ibprovider.com/forum/sit...opic.php?t
aber leider nicht solche, die (bei mir) zu einem funktionsfàhigen Ergebnis
geführt hàtten.



Willst/Mußt Du den Provider einsetzen, solltest Du die Frage
in den dortigen Foren stellen - was je nach Güte des Supports
- eher zu einem Ergebnis führen sollte.

Gruß Elmar

Ähnliche fragen