如何将IBM DB2服务器添加到SQL Server的链接服务器?

5

使用 .Net 技术,我能够连接到 DB2 数据库:

  1. First I include a reference to "IBM.Data.DB2.iSeries"
  2. Then I create a new IBM.Data.DB2.iSeries.iDB2Connection. The connection string is

    DataSource=ChaDb2Server;UserID=MyUsername;Password=MyPassword;
    
  3. Then I create an IBM.Data.DB2.iSeries.iDB2Command, and so on.

现在,我正在尝试让我的SQL Server 2005直接访问相同的数据。在SQL Server Management Studio中,我右键单击"Linked Servers",然后选择"New Linked Server..."。

Linked Server:   ChaDb2Server
Provider:        IBM OLE DB Provider for DB2
Product Name:    ???
Data Source:     ChaDb2Server
Provider String: DataSource=ChaDb2Server;UserID=MyUsername;Password=MyPassword;
Location:        ???

我可以留空位置,但产品名称不能为空,我不知道在这里填什么。
在安全选项卡中,我选择“使用此安全上下文进行制作”,并重复用户ID和密码。
已创建链接服务器,但当我尝试展开目录/默认/表时,出现错误消息:
OLE DB provider 'IBMDADB2.DB2COPY1' reported an error. Authentication failed. (Microsoft SQL Server, Error: 7399)

我不知道IBMDADB2.DB2COPY1这个名字的来历。

此外,当我尝试选择数据时:

Select * from ChaDB2Server.ChaDb2Server.Information_Schema.Tables

我遇到了类似的错误:
Msg 7399, Level 16, State 1, Line 1
OLE DB provider 'IBMDADB2.DB2COPY1' reported an error. Authentication failed.

很明显我在连接服务器方面缺少了一些东西。有人知道如何做吗?
3个回答

3
我尝试使用IBM提供的服务,但没有成功。听说这个过程很麻烦。不过,我已经成功地使用了Microsoft OLE DB Provider for ODBC Drivers。
我的配置指向一个DSN,运行良好。我只填写了三个字段:提供程序(Microsoft OLE DB Provider for ODBC Drivers)、产品名称(value='not used')和数据源(SQL服务器上DSN的名称)。
如果您不介意使用ODBC提供程序,那么它对您也是有效的。

我不介意使用ODBC提供程序。但到目前为止,我唯一能够连接的方式是使用.NET提供程序。我需要先设置“数据源(ODBC)”才能使用ODBC连接吗?我还没有弄清楚如何使其工作。 - Allan W
是的。数据源名称就是您在“数据源(ODBC)”中创建的系统dsn的名称。 - Bill Martin

2

我在SQL中将DB2 LUW服务器设置为链接服务器的方法如下:

1- 我在MySQL服务器上安装了适当的DB2 LUW客户端。

--> This will installed the missing driver for DB2 (IBMADB2.DB2COPY1)

2- 我按照以下方式创建了链接服务器:

replace the <...text...>  with your values

/****** Object:  LinkedServer [<DB2_DB_Name>]    Script Date: 09/08/2014 09:46:02 ******/
EXEC master.dbo.sp_addlinkedserver @server = N'<DB2_DB_Name>', @srvproduct=N'IBMADB2.DB2COPY1', @provider=N'IBMDADB2.DB2COPY1', @provstr=N'Database=<DB2_DB_Name>;Hostname=<DB2 Server running the DB2 database>;Port=5900'
 /* For security reasons the linked server remote logins password is changed with ######## */
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'<DB2_DB_Name>',@useself=N'True',@locallogin=NULL,@rmtuser=NULL,@rmtpassword=NULL
GO
EXEC master.dbo.sp_serveroption @server=N'<DB2_DB_Name>', @optname=N'collation compatible', @optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'<DB2_DB_Name>', @optname=N'data access', @optvalue=N'true'
GO
EXEC master.dbo.sp_serveroption @server=N'<DB2_DB_Name>', @optname=N'dist', @optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'<DB2_DB_Name>', @optname=N'pub', @optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'<DB2_DB_Name>', @optname=N'rpc', @optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'<DB2_DB_Name>', @optname=N'rpc out', @optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'<DB2_DB_Name>', @optname=N'sub', @optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'<DB2_DB_Name>', @optname=N'connect timeout', @optvalue=N'0'
GO
EXEC master.dbo.sp_serveroption @server=N'<DB2_DB_Name>', @optname=N'collation name', @optvalue=null
GO
EXEC master.dbo.sp_serveroption @server=N'<DB2_DB_Name>', @optname=N'lazy schema validation', @optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'<DB2_DB_Name>', @optname=N'query timeout', @optvalue=N'0'
GO
EXEC master.dbo.sp_serveroption @server=N'<DB2_DB_Name>', @optname=N'use remote collation', @optvalue=N'true'
GO
EXEC master.dbo.sp_serveroption @server=N'<DB2_DB_Name>', @optname=N'remote proc transaction promotion', @optvalue=N'true'
GO

0

IBM的说明称,“DB2 V9的典型默认安装将产生PROGID IBMDADB2.DB2COPY1”。但它没有说明如何确认这是正确的!我该如何找出progid是什么? - Allan W
我认为你得到的错误信息已经确认了。这里出错的不是 ProgID。但是一定要使用那个。 - hoodaticus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接