SQL Server --> Informix DB 链接服务器

scs*_*mon 9 sql-server linked-server informix sql-server-2016

经过大约 3 天的尝试,我无法创建从 SQL Server 2016 到 Informix 11.5 的链接服务器。我没有在其他版本(2008R2 等)上尝试过这个,因为我想先在测试环境中设置连接。

我做了什么

1) 将 IBM Informix指令与 OLE DB 提供程序一起使用,在其中我收到以下错误(无论我是否在提供程序字符串中使用 DNS):

无法为链接服务器“UCCX”初始化 OLE DB 提供程序“Ifxoledbc”的数据源对象。链接服务器“UCCX”的 OLE DB 提供程序“Ifxoledbc”返回消息“EIX000: (-23197)”数据库区域设置信息不匹配”(Microsoft SQL Server,错误:7303)

DB Locale 是 en_US.57372

2)如本博客所述,使用 Microsoft OLE DB Provider for SQL Server返回错误:

命名管道提供程序:无法打开与 SQL Server 的连接。链接服务器 UCCX 的 OLE DB 提供程序 SQLNCLI11 返回消息“登录超时已过期” 链接服务器 UCCX 的 OLE DB 提供程序 SQLNCLI11 返回消息“与 SQL Server 建立连接时发生与网络相关或特定于实例的错误。未找到服务器或不可访问。检查实例名称是否正确,以及 SQL Server 是否配置为允许远程连接。链接服务器 UCCX 的 SQLNCLI11 返回消息“连接字符串属性无效”

我几乎没有使用 Informix 的经验,这应该是显而易见的,这不是本地安装,它是 Cisco 实例,正如您可能从我使用的博客中收集到的那样。任何意见,将不胜感激。

小智 6

我们做了一个类似的噩梦,特别是连接到多个 Informix 环境的问题。我有几个 Informix 实例需要链接到单个 SQL Server 实例以用于仓储目的,我们常驻的 SME 告诉我这是不可能的;每个服务器只能引用一个 Informix 实例。

我会一直收到和你一样的错误,而且我在网上挖掘出来的任何东西都没有证明是有帮助的。

最终,该解决方案有几个部分,您已经完成了前几个部分:

  1. 正确的IBM Informix ODBC Driver必须安装在数据库服务器上。
  2. 使用随驱动程序提供的 SetNet32 应用程序并适当设置服务器信息选项卡。此外,设置相应的系统 DSN 条目。
  3. 链接服务器设置的技巧是使用以下内容(代码块中的项目是文字):

    • 供应商: Microsoft OLE DB Provider for ODBC Drivers
    • 产品名称: Ifxoledbc
    • 数据源:$YourSystemDSNName
    • 提供者字符串
      • 司机 = {IBM INFORMIX ODBC DRIVER}
      • 数据库 = $YourDatabaseName
      • 等等...

如果您更喜欢手动 SQL 类型的人,请参见下文。提供者字符串被拉入一个变量中,仅用于内联注释,同时仍然具有可执行代码。根据需要修改:

DECLARE @provider NVARCHAR(4000);
SET @provider = N'Driver={IBM INFORMIX ODBC DRIVER};'
  + N'DATABASE= ;'  --Informix DB name
  + N'HOST= ;'      --Informix Hostname or IP adddress
  + N'SERVICE= ;'   --Informix service name, ex.  ifx1_tcp1
  + N'PROTOCOL= ;'  --Informix protocol, ex.  onsoctcp
  + N'SERVER= ;'    --Informix server, ex. ifx1
  + N'DB_LOCALE=en_US.819; CLIENT_LOCALE=en_US.819;'; --Change to your locale, as needed

EXEC master.dbo.sp_addlinkedserver 
@server = N'UCCX', --Linked Server system name
@srvproduct=N'Ifxoledbc', 
@provider=N'MSDASQL', 
@datasrc=N' ', --Your System DSN Name
@provstr= @provider;
Run Code Online (Sandbox Code Playgroud)

由于您正在处理单个实例,因此只需匹配用于创建系统 DSN 的值就足够了。如果您需要为其他实例添加额外的链接服务器,可以按照上述完全相同的格式完成,无需额外的 DSN 条目。

我希望这有帮助。