web-dev-qa-db-fra.com

SQL Server -> Serveur lié DB Informix

Après environ 3 jours d'essais, je ne parviens pas à créer un serveur lié à partir de SQL Server 2016 vers Informix 11.5. Je n'ai pas essayé cela avec d'autres versions (2008R2, etc.) car je voulais d'abord configurer la connexion dans un environnement de test.

Ce que j'ai fait

1) Utilisation d'IBM Informix instructions avec OLE DB Provider dans lequel j'obtiens l'erreur suivante (peu importe si j'utilise un DNS dans la chaîne du fournisseur):

Impossible d'initialiser l'objet source de données de OLE fournisseur de base de données "Ifxoledbc" pour le serveur lié "UCCX". OLE fournisseur de base de données "Ifxoledbc" pour le serveur lié "UCCX" a renvoyé le message "EIX000: (-23197)" Non-concordance des informations sur les paramètres régionaux de la base de données "(Microsoft SQL Server, erreur: 7303)

La locale DB est en_US.57372

2) Utilisation de Microsoft OLE DB Provider for SQL Server comme expliqué dans ce blog qui renvoie l'erreur:

Fournisseur de canaux nommés: ne peut pas ouvrir de connexion à SQL Server. OLE fournisseur de base de données SQLNCLI11 pour le serveur lié UCCX a renvoyé le message "Délai d'expiration de la connexion expiré" OLE fournisseur de base de données SQLNCLI11 pour le serveur lié UCCX a renvoyé un message "A lié au réseau ou une erreur spécifique à l'instance s'est produite lors de l'établissement d'une connexion à SQL Server. Le serveur est introuvable ou inaccessible. Vérifiez si le nom de l'instance est correct et si SQL Server est configuré pour autoriser les connexions à distance. SQLNCLI11 pour le serveur lié UCCX a renvoyé le message "Chaîne de connexion non valide attribut"

J'ai très peu d'expérience avec Informix, ce qui devrait être apparent et ce n'est pas une installation locale, c'est une instance Cisco comme vous l'avez probablement glané des blogs que j'utilisais. Tout avis sera le bienvenu.

8
scsimon

Nous avons eu un cauchemar à mettre en place quelque chose de similaire, en particulier avec le problème de la connexion à plusieurs environnements Informix. J'ai eu plusieurs instances Informix qui devaient être liées à une seule instance SQL Server à des fins d'entreposage, et notre résident SME que cela était impossible; une seule instance Informix pouvait être référencée par serveur.

Je recevrais systématiquement les mêmes erreurs que vous, et rien de ce que j'ai pu draguer en ligne ne m'a été utile.

Au final, la solution comportait plusieurs parties, dont vous avez réalisé les premières:

  1. La bonne IBM Informix ODBC Driver doit être installé sur le serveur de base de données.
  2. Utilisez l'application SetNet32 fournie avec les pilotes et configurez l'onglet Informations sur le serveur de manière appropriée. En outre, configurez une entrée DSN système correspondante.
  3. L'astuce avec la configuration du serveur lié est d'utiliser les éléments suivants (les éléments dans les blocs de code sont littéraux):

    • Fournisseur: Microsoft OLE DB Provider for ODBC Drivers
    • Nom du produit: Ifxoledbc
    • Source de données: $ YourSystemDSNName
    • Chaîne du fournisseur
      • Pilote = {IBM INFORMIX ODBC DRIVER}
      • Base de données = $ YourDatabaseName
      • etc...

Si vous êtes plutôt du genre SQL manuel, voyez ci-dessous. La chaîne du fournisseur est extraite dans une variable à des fins de commentaires en ligne uniquement, tout en ayant du code exécutable. Modifiez au besoin:

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;

Puisque vous avez affaire à une seule instance, il devrait suffire de faire correspondre simplement les valeurs utilisées pour créer votre DSN système. Si vous devez ajouter des serveurs liés supplémentaires pour d'autres instances, cela peut être fait en suivant exactement le même format décrit ci-dessus sans entrées DSN supplémentaires.

J'espère que ça aide.

5
coyote