Configurer et dépanner un serveur lié à une base de données Oracle dans SQL Server

Cet article explique comment configurer un serveur lié à partir d’un ordinateur exécutant Microsoft SQL Server vers une base de données Oracle et fournit des étapes de dépannage de base pour les erreurs courantes que vous pouvez rencontrer lorsque vous configurez un serveur lié à une base de données Oracle.

Version d’origine du produit : Microsoft SQL Server 2005 Standard Edition, Microsoft SQL Server 2005 Developer Edition, Microsoft SQL Server 2005 Êdition Entreprise, Microsoft SQL Server 2005 Express Edition, Microsoft SQL Server Édition de groupe de travail 2005
Numéro de la base de connaissances d’origine : 280106

Résumé

Cet article explique comment configurer un serveur lié à partir d’un ordinateur exécutant Microsoft SQL Server vers une base de données Oracle et fournit des étapes de dépannage de base pour les erreurs courantes que vous pouvez rencontrer lorsque vous configurez un serveur lié à Oracle. La plupart des informations contenues dans cet article s’appliquent aux environnements configurés pour utiliser le fournisseur Microsoft OLEDB pour Oracle (MSDAORA). Évitez d’utiliser cette fonctionnalité dans le nouveau travail de développement et prévoyez de modifier les applications qui utilisent actuellement cette fonctionnalité. Utilisez plutôt le fournisseur OLE DB d’Oracle.

Pour plus d’informations sur la configuration d’un serveur lié à l’aide du fournisseur OLEDB d’Oracle, consultez Guide pratique pour être opérationnel avec Oracle et les serveurs liés.

Importante

La version actuelle du pilote Microsoft ODBC pour Oracle est conforme à la spécification ODBC 2.5, tandis que le fournisseur OLE DB pour Oracle est un fournisseur d’API OCI Oracle 7 natif. Le pilote et le fournisseur utilisent le client SQL*Net (ou le client Net8 pour Oracle 8x) et la bibliothèque OCI (Oracle Call Interface) et d’autres composants du client Oracle pour se connecter aux bases de données Oracle et récupérer des données. Les composants clients Oracle sont importants et doivent être configurés correctement pour se connecter correctement aux bases de données Oracle à l’aide du pilote et du fournisseur.

À partir de Microsoft Data Access Components (MDAC) version 2.5 et versions ultérieures, le pilote Microsoft ODBC et le fournisseur OLE DB prennent uniquement en charge Oracle 7 et Oracle 8i avec les limitations suivantes :

  • Les types de données spécifiques à Oracle 8.x, tels que CLOB, BLOB, BFILE, NCHAR, NCLOB et NVARCHAR2, ne sont pas pris en charge.

  • La fonctionnalité Unicode sur les serveurs Oracle 7.x et 8.x n’est pas prise en charge.

  • Plusieurs instances de client Oracle, ou plusieurs foyers Oracle, ne sont pas pris en charge, car elles reposent sur la première occurrence de la base de données Oracle dans la variable SYSTEM PATH.

  • Le renvoi de plusieurs jeux de résultats à partir d’une procédure stockée ou d’une instruction SQL de lot n’est pas pris en charge à l’aide d’ADO ou d’OLEDB.

  • Les jointures externes imbriquées ne sont pas prises en charge.

  • La persistance XML n’est pas prise en charge.

  • Les versions supérieures à 8i ne sont pas prises en charge à l’aide de ces pilotes.

Remarque

Les produits tiers mentionnés dans le présent article sont fabriqués par des sociétés indépendantes de Microsoft. Microsoft exclut toute garantie, implicite ou autre, concernant les performances ou la fiabilité de ces produits.

Étapes de configuration d’un serveur lié à Oracle

  1. Vous devez installer le logiciel client Oracle sur l’ordinateur qui exécute SQL Server où le serveur lié est configuré.

  2. Installez le pilote souhaité sur l’ordinateur qui exécute SQL Server. Microsoft prend uniquement en charge Fournisseur Microsoft OLE DB pour Oracle et Microsoft ODBC Driver pour Oracle. Si vous utilisez un fournisseur tiers ou un pilote tiers pour vous connecter à Oracle, vous devez contacter le fournisseur respectif pour tout problème que vous pouvez rencontrer à l’aide de son fournisseur ou pilote.

  3. Si vous utilisez Fournisseur Microsoft OLE DB pour Oracle et Microsoft ODBC Driver pour Oracle, tenez compte des points suivants :

    • Le fournisseur OLE DB et le pilote ODBC inclus avec les composants MDAC (Microsoft Data Access Components) nécessitent SQL*Net 2.3.x ou une version ultérieure. Vous devez installer le logiciel client Oracle 7.3.x, ou une version ultérieure, sur l’ordinateur client. L’ordinateur client est l’ordinateur qui exécute SQL Server.

    • Vérifiez que MDAC 2.5 ou une version ultérieure est installé sur l’ordinateur qui exécute SQL Server. Avec MDAC 2.1 ou une version antérieure, vous ne pouvez pas vous connecter à des bases de données qui utilisent Oracle 8. x ou une version ultérieure.

    • Pour permettre à MDAC 2.5 ou versions ultérieures de fonctionner avec le logiciel client Oracle, le Registre doit être modifié sur l’ordinateur client qui exécute SQL Server comme indiqué dans le tableau suivant.

      Oracle
      Client               Microsoft Windows 2000 and later versions
      --------------------------------------------------------------------------
      
      7.x                  [HKEY_LOCAL_MACHINE\SOFTWARE
                           Microsoft\MSDTC\MTxOCI]
                           "OracleXaLib"="xa73.dll"
                           "OracleSqlLib"="SQLLib18.dll"
                           "OracleOciLib"="ociw32.dll"
      
      8.0                  [HKEY_LOCAL_MACHINE\SOFTWARE
                           \Microsoft\MSDTC\MTxOCI]
                           "OracleXaLib"="xa80.dll"
                           "OracleSqlLib"="sqllib80.dll"
                           "OracleOciLib"="oci.dll"
      
      8.1                  [HKEY_LOCAL_MACHINE\SOFTWARE
                           \Microsoft\MSDTC\MTxOCI]
                           "OracleXaLib"="oraclient8.dll"
                           "OracleSqlLib"="orasql8.dll"
                           "OracleOciLib"="oci.dll"
      
  4. Redémarrez l’ordinateur qui exécute SQL Server après avoir installé le logiciel client Oracle.

  5. Sur l’ordinateur qui exécute SQL Server, configurez un serveur lié à l’aide du script suivant.

    -- Adding linked server (from SQL Server Books Online):
    /* sp_addlinkedserver [@server =] 'server'[, [@srvproduct =] 'product_name']
     [, [@provider =] 'provider_name']
     [, [@datasrc =] 'data_source']
     [, [@location =] 'location'] [, [@provstr =] 'provider_string'] 
     [, [@catalog =] 'catalog']
    */
    
    EXEC sp_addlinkedserver 'Ora817Link', 'Oracle', 'MSDAORA', 'oracle817'
    
    -- Adding linked server login:
    /* sp_addlinkedsrvlogin [@rmtsrvname =] 'rmtsrvname'[,[@useself =] 'useself']
     [,[@locallogin =] 'locallogin']
     [,[@rmtuser =] 'rmtuser']
     [,[@rmtpassword =] 'rmtpassword']
    */
    
    EXEC sp_addlinkedsrvlogin 'Ora817Link', 'FALSE',NULL, 'scott', 'tiger'
    
    -- Help on the linked server:
    EXEC sp_linkedservers
    EXEC sp_helpserver
    select * from sysservers
    

    Remarque

    Si vous utilisez Microsoft ODBC Driver pour Oracle, vous pouvez utiliser le @datasrc paramètre pour spécifier un nom DSN. Pour une connexion sans DSN, la chaîne de fournisseur est fournie via le paramètre @provstr . Avec Fournisseur Microsoft OLE DB pour Oracle, utilisez l’alias de serveur Oracle configuré dans le fichier TNSNames.Ora pour le paramètre @datasrc. Pour plus d’informations, consultez la rubrique « sp_addlinkedserver » dans SQL Server documentation en ligne.

Messages d’erreur courants et comment les résoudre

Importante

Cette section, méthode ou tâche contient des étapes vous indiquant comment modifier le Registre. Toutefois, des problèmes graves peuvent se produire si vous modifiez le Registre de façon incorrecte. Par conséquent, veillez à suivre ces étapes scrupuleusement. Pour une meilleure protection, sauvegardez le registre avant de le modifier. Vous pouvez alors le restaurer en cas de problème. Pour plus d’informations sur la sauvegarde et la restauration du Registre, cliquez sur le numéro d’article suivant pour afficher l’article dans la Base de connaissances Microsoft : 322756 Comment sauvegarder et restaurer le Registre dans Windows

Vous pouvez utiliser l’une des deux méthodes suivantes pour récupérer des informations étendues sur toute erreur que vous rencontrez lorsque vous exécutez une requête distribuée.

  • Méthode 1

    Connectez-vous à SQL Server à l’aide de SQL Server Management Studio et exécutez le code suivant pour activer l’indicateur de trace 7300.

    DBCC Traceon(7300)
    
  • Méthode 2

    Capturez l’événement « Erreurs OLEDB » qui se trouve dans la catégorie d’événements « Erreurs et avertissements » dans SQL Profiler. Le format du message d’erreur est le suivant :

    Interface ::La méthode a échoué avec le code d’erreur hexadécimal.

    Vous pouvez rechercher le code d’erreur hexadécimal dans le fichier Oledberr.h fourni avec le Kit de développement logiciel (SDK) MDAC.

Voici une liste des messages d’erreur courants qui peuvent se produire, ainsi que des informations sur la façon de résoudre les problèmes liés au message d’erreur.

Remarque

Si vous utilisez SQL Server 2005 ou versions ultérieures, ces messages d’erreur peuvent être légèrement différents. Toutefois, les ID d’erreur de ces messages d’erreur sont les mêmes que dans les versions antérieures de SQL Server. Par conséquent, vous pouvez les identifier par les ID d’erreur. Pour les problèmes liés aux performances, recherchez SQL Server documentation en ligne de la rubrique Optimisation des requêtes distribuées.

  • Message 1

    Erreur 7399 : Le fournisseur OLE DB « %ls » pour le serveur lié « %ls » a signalé une erreur. %ls

    Activez l’indicateur de trace 7300 ou utilisez SQL Profiler pour capturer l’événement Erreurs OLEDB afin de récupérer les informations d’erreur OLEDB étendues.

  • Message 2a

    « ORA-12154 : TNS : impossible de résoudre le nom du service »

  • Message 2b

    « Le client Oracle(tm) et les composants réseau sont introuvables. Ces composants sont fournis par Oracle Corporation et font partie de l’installation du logiciel client Oracle version 7.3.3 (ou ultérieure) »

    Ces erreurs se produisent en cas de problème de connectivité au serveur Oracle. Pour plus d’informations, consultez la section Techniques pour résoudre les problèmes de connectivité au serveur Oracle ci-dessous.

  • Message 3

    Erreur 7302 : Impossible de créer une instance du fournisseur OLE DB « MSDAORA » pour le serveur lié « %ls ».

    Assurez-vous que le fichier MSDAORA.dll est correctement inscrit. (Le fichier MSDAORA.dll est le fournisseur Microsoft OLE DB pour le fichier Oracle.) Utilisez RegSvr32.exe pour inscrire Fournisseur Microsoft OLE DB pour Oracle.

    Remarque

    Si vous utilisez un fournisseur Oracle tiers et que votre fournisseur Oracle ne peut pas s’exécuter en dehors d’un processus SQL Server, autorisez-le à s’exécuter in-process en modifiant les options du fournisseur. Pour modifier les options du fournisseur, utilisez l’une des méthodes suivantes :

    • Méthode 1 Recherchez la clé de Registre suivante. Ensuite, remplacez la valeur de l’entrée AllowInProcess (DWORD) par 1. Cette clé de Registre se trouve sous le nom du fournisseur correspondant : HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Providers\ProviderName.

    • Méthode 2 Suivez ces étapes pour définir l’option Autoriser inprocess pour les fournisseurs utilisant SQL Server Management Studio (SSMS).

    1. Ouvrez SSMS et connectez-vous à votre SQL Server instance.
    2. Dans Explorateur d'objets, accédez à Objets serveur>Fournisseurs de serveurs>liés.
    3. Cliquez avec le bouton droit sur le fournisseur que vous souhaitez configurer, puis sélectionnez Propriétés.
    4. Dans la fenêtre Options du fournisseur, case activée la zone Activer pour l’option Autoriser inprocess.
  • Message 4

    Erreur 7303 : Impossible d’initialiser l’objet source de données du fournisseur OLE DB « MSDAORA » pour le serveur lié « %ls ». [Message retourné par le fournisseur OLE/DB : ORA-01017 : nom d’utilisateur/mot de passe non valide ; ouverture de session refusée] Trace d’erreur OLE DB [Le fournisseur OLE/DB 'MSDAORA' IDBInitialize ::Initialize a retourné 0x80040e4d].

    Ce message d’erreur indique que le serveur lié n’a pas de mappage de connexion correct. Vous pouvez exécuter la sp_helplinkedsrvlogin procédure stockée pour définir correctement les informations de connexion. Vérifiez également que vous avez spécifié les paramètres corrects pour la configuration du serveur lié.

  • Message 5

    Erreur 7306 : Impossible d’ouvrir la table ' %ls' à partir du fournisseur OLE DB 'MSDAORA' pour le serveur lié « %ls ». La table spécifiée n’existe pas. [Message retourné par le fournisseur OLE/DB : La table n’existe pas.] [Message retourné par le fournisseur OLE/DB : ORA-00942 : la table ou la vue n’existe pas] Trace d’erreur OLE DB [Fournisseur OLE/DB 'MSDAORA' IOpenRowset ::OpenRowset retourné 0x80040e37 : La table spécifiée n’existe pas.].

    Erreur 7312 : Utilisation non valide du schéma et/ou du catalogue pour le fournisseur OLE DB '%ls' pour le serveur lié « %ls ». Un nom en quatre parties a été fourni, mais le fournisseur n’expose pas les interfaces nécessaires pour utiliser un catalogue et/ou un schéma.

    Erreur 7313 : un schéma ou un catalogue non valide a été spécifié pour le fournisseur « %ls » pour le serveur lié « %ls ».

    Erreur 7314 : Le fournisseur OLE DB « %ls » pour le serveur lié « %ls » ne contient pas la table « %ls ». La table n’existe pas ou l’utilisateur actuel n’a pas d’autorisations sur cette table.

    Si vous recevez ces messages d’erreur, il se peut qu’une table soit manquante dans le schéma Oracle ou que vous n’ayez pas d’autorisations sur cette table. Vérifiez que le nom du schéma a été tapé en majuscules. La casse alphabétique de la table et des colonnes doit être spécifiée dans les tables système Oracle.

    Côté Oracle, une table ou une colonne créée sans guillemets doubles est stockée en majuscules. Si la table ou la colonne est placée entre guillemets doubles, la table ou la colonne est stockée telle qu’elle est.

    L’appel suivant indique si la table existe dans le schéma Oracle. Cet appel indique également le nom exact de la table.

    sp_tables_ex @table_server=Ora817Link, @table_schema='your_schema_name'
    
  • Message 6

    Erreur 7413 : Impossible de se connecter au serveur lié '%ls' (fournisseur OLE DB '%ls'). Activez la délégation ou utilisez une connexion SQL Server distante pour l’utilisateur actuel. Échec de la connexion msg 18456, niveau 14, état 1, ligne 1 pour l’utilisateur « ».

    Ce message d’erreur indique qu’une requête distribuée est tentée pour une connexion authentifiée Microsoft Windows sans mappage de connexion explicite. Dans un environnement de système d’exploitation dans lequel la délégation de sécurité n’est pas prise en charge, les connexions authentifiées Windows NT ont besoin d’un mappage explicite à une connexion distante et à un mot de passe créés à l’aide sp_addlinkedsrvloginde .

  • Message 7

    Erreur 7391 : Impossible d’effectuer l’opération, car le fournisseur OLE DB « MSDAORA » pour le serveur lié « %ls » n’a pas pu démarrer une transaction distribuée. Trace d’erreur OLE DB [Le fournisseur OLE/DB 'MSDAORA' ITransactionJoin ::JoinTransaction a retourné 0x8004d01b]

    Vérifiez que les versions OCI sont inscrites correctement, comme décrit plus haut dans cet article.

    Remarque

    Si les entrées de Registre sont toutes correctes, le fichier MtxOCI.dll est chargé. Si le fichier MtxOCI.dll n’est pas chargé, vous ne pouvez pas effectuer de transactions distribuées sur Oracle à l’aide de Fournisseur Microsoft OLE DB pour Oracle ou de Microsoft ODBC Driver pour Oracle. Si vous utilisez un fournisseur tiers et que vous recevez l’erreur 7391, vérifiez que le fournisseur OLE DB que vous utilisez prend en charge les transactions distribuées. Si le fournisseur OLE DB prend en charge les transactions distribuées, vérifiez que Microsoft Distributed Transaction Coordinator (MSDTC) est en cours d’exécution et que l’accès réseau est activé.

  • Message 8

    Erreur 7392 : Impossible de démarrer une transaction pour le fournisseur OLE DB « MSDAORA » pour le serveur lié « %ls ». Trace d’erreur OLE DB [Fournisseur OLE/DB 'MSDAORA' ITransactionLocal ::StartTransaction retourné 0x8004d013 : ISOLEVEL=4096].

    Le fournisseur OLE DB a retourné l’erreur 7392, car une seule transaction peut être active pour cette session. Cette erreur indique qu’une instruction de modification de données est tentée sur un fournisseur OLE DB lorsque la connexion se trouve dans une transaction explicite ou implicite et que le fournisseur OLE DB ne prend pas en charge les transactions imbriquées. SQL Server nécessite cette prise en charge afin que, dans certaines conditions d’erreur, il puisse mettre fin aux effets de l’instruction de modification des données tout en continuant la transaction.

    Si SET XACT_ABORT a la valeur ON, SQL Server ne nécessite pas la prise en charge des transactions imbriquées du fournisseur OLE DB. Par conséquent, exécutez SET XACT_ABORT ON avant d’exécuter des instructions de modification de données sur des tables distantes dans une transaction implicite ou explicite. Procédez ainsi si le fournisseur OLE DB que vous utilisez ne prend pas en charge les transactions imbriquées.

Techniques pour résoudre les problèmes de connectivité au serveur Oracle

Pour déboguer les problèmes de connectivité Oracle avec le pilote Microsoft ODBC pour Oracle ou le Fournisseur Microsoft OLE DB pour Oracle, procédez comme suit :

  1. Utilisez l’utilitaire Oracle SQL Plus (utilitaire de requête basé sur la ligne de commande) pour vérifier que vous pouvez vous connecter à Oracle et récupérer des données.

    Remarque

    Si vous ne pouvez pas vous connecter à Oracle et récupérer des données, vous avez une installation ou une configuration incorrectes des composants clients Oracle ou vous n’avez pas correctement créé un alias de service TNS (Transparent Network Substrate) pour le serveur Oracle lorsque vous avez utilisé l’utilitaire SQL*Net Easy Configuration ou Oracle Net8 Easy Configuration. Contactez votre administrateur de base de données Oracle (DBA) pour vérifier que les composants Oracle que vous devez avoir sont correctement installés et configurés.

  2. Vérifiez la version du client Oracle (version SQL*Net) installée sur l’ordinateur. Le pilote Microsoft ODBC pour Oracle et le Fournisseur Microsoft OLE DB pour Oracle nécessitent l’installation de SQL*Net version 2.3 ou ultérieure sur l’ordinateur client.

    La connectivité à partir de SQL Plus (l’outil de requête client Oracle) peut sembler fonctionner, mais vous devez redémarrer votre ordinateur pour que la connectivité ODBC/OLE DB fonctionne correctement.

    Remarque

    Lorsque vous utilisez Oracle 8i, le fichier .rgs est vide.

  3. Si le client Oracle est installé et que vous recevez une erreur indiquant qu’Oracle Client Components 7.3 ou version ultérieure doit être installé sur l’ordinateur, vérifiez que la variable d’environnement PATH sur l’ordinateur client contient le dossier dans lequel le client Oracle a été installé, par exemple , Oracle_Root\Bin. Si vous ne trouvez pas ce dossier, ajoutez-le à la variable PATH pour résoudre l’erreur.

  4. Vérifiez que le fichier Ociw32.dll se trouve dans le dossier Oracle_Root\bin . Ce fichier .dll ne peut pas exister à un autre emplacement sur l’ordinateur client. Assurez-vous que les DLL du composant client Oracle (par exemple, le fichier Core40.dll et le fichier Ora*.dll) n’existent pas en dehors du dossier ou des sous-dossiers Oracle_Root .

  5. Vérifiez qu’une seule version du client Oracle est installée sur l’ordinateur. Plusieurs versions de SQL*Net ne peuvent pas exister sur le même ordinateur client avec des interférences et des opérations critiques (par exemple, TNS et recherches d’alias).

  6. Microsoft recommande de disposer d’une installation locale du client Oracle et de ne pas le faire en mappant un client Oracle distant sur votre ordinateur, puis en l’incluant dans le chemin du système pour vous connecter à Oracle via ODBC/OLE DB. Toutefois, le fournisseur et le pilote sont testés avec un client Oracle installé localement et non sur un partage réseau.

Voir aussi