web-dev-qa-db-ja.com

SQL Server-> Informix DBリンクサーバー

約3日間試した後、SQL Server 2016からInformix 11.5へのリンクサーバーを作成できません。最初にテスト環境で接続をセットアップしたかったので、他のバージョン(2008R2など)ではこれを試していません。

私がやったこと

  • インストール済み 最新のInformix OLE DB Driver がSQL Serverホストマシンにインストールされている
  • 構成済み IBM InformixのシステムDSN ODBC Driver Setup
  • ロケール設定の変更 の後にDSN設定の接続をテストしました(テストは良好です)。クライアントとサーバーが一致し、サーバーが正しいことを確認しました。
  • 以下の2つの方法でリンクサーバーを作成しようとしました。
  • これを解決するために私ができることすべてをグーグルで読み、成功することはありません。

1)IBM Informixを使用する OLE DB Provider を使用した命令)では、次のエラーが発生します(プロバイダー文字列でDNSを使用しているかどうかに関係なく):

リンクサーバー "UCCX"のOLE DBプロバイダー "Ifxoledbc"のデータソースオブジェクトを初期化できません。OLEリンクサーバー "UCCX"のDBプロバイダー "Ifxoledbc"返されたmessazge "EIX000:(-23197)"データベースロケール情報が一致しません "(Microsoft SQL Server、エラー:7303)

DBロケールはen_US.57372です

2)Microsoftを使用するOLE SQL ServerのDBプロバイダー このブログで説明されているように これはエラーを返します:

名前付きパイププロバイダー:SQL Serverへの接続を開けませんでした。 OLEリンクサーバーUCCXのDBプロバイダーSQLNCLI11がメッセージ「ログインタイムアウトの期限が切れました」を返しましたOLEリンクサーバーUCCXのDBプロバイダーSQLNCLI11がメッセージ「ネットワーク関連またはSQL Serverへの接続の確立中にインスタンス固有のエラーが発生しました。サーバーが見つからないか、アクセスできません。インスタンス名が正しいかどうか、SQL Serverがリモート接続を許可するように構成されているかどうかを確認してください。リンクサーバーUCCXのSQLNCLI11がメッセージ「無効な接続文字列属性"

私は明らかなはずのInformixの経験がほとんどありません。これはローカルインストールではなく、おそらく私が使用していたブログから収集したCiscoインスタンスです。任意のアドバイスをいただければ幸いです。

8
scsimon

特に、複数のInformix環境への接続の問題など、同様の設定が悪夢でした。ウェアハウスの目的で単一のSQL Serverインスタンスにリンクする必要のあるInformixインスタンスがいくつかあり、常駐しているSMEからこれは不可能であると通知されました。1つの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;

単一のインスタンスを扱っているので、システムDSNの作成に使用された値を単に一致させるだけで十分です。他のインスタンスにリンクサーバーを追加する必要がある場合は、DSNエントリを追加せずに、上記とまったく同じ形式で実行できます。

お役に立てば幸いです。

5
coyote