Configurer et résoudre les problèmes d’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 résolution des problèmes de base pour les erreurs courantes que vous pouvez rencontrer lors de la configuration d’un serveur lié à une base de données Oracle.
Version de produit d’origine : Microsoft SQL Server 2005 Édition Standard, Microsoft SQL Server 2005 Developer Edition, Microsoft SQL Server 2005 Êdition Entreprise, Microsoft SQL Server 2005 Express Edition, Microsoft SQL Server 2005 Workgroup Edition
Numéro de 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 lors de la configuration d’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 de nouveaux travaux 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 Comment démarrer avec Oracle et les serveurs liés.
Important
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 clients 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 clientes Oracle, ou plusieurs maisons Oracle, ne sont pas prises en charge, car elles s’appuient sur la première occurrence de la maison 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 batch n’est pas pris en charge à l’aide d’ADO ou OLEDB.
Les jointures externes imbriquées ne sont pas prises en charge.
La persistance XML n’est pas prise en charge.
La version supérieure à 8i n’est pas prise en charge à l’aide de ces pilotes.
Note
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
Vous devez installer le logiciel client Oracle sur l’ordinateur exécutant SQL Server où le serveur lié est configuré.
Installez le pilote souhaité sur l’ordinateur exécutant 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 de son pilote.
Si vous utilisez Fournisseur Microsoft OLE DB pour Oracle et Microsoft ODBC Driver pour Oracle, tenez compte des éléments suivants :
Le fournisseur OLE DB et le pilote ODBC inclus dans Microsoft Data Access Components (MDAC) 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 exécutant SQL Server.
Vérifiez que vous disposez de MDAC 2.5 ou d’une version ultérieure, installé sur l’ordinateur exécutant SQL Server. Avec MDAC 2.1 ou avec une version antérieure, vous ne pouvez pas vous connecter aux bases de données qui utilisent Oracle 8. x ou une version ultérieure.
Pour permettre à MDAC 2.5 ou version ultérieure d’utiliser le logiciel client Oracle, le Registre doit être modifié sur l’ordinateur client exécutant 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"
Redémarrez l’ordinateur exécutant SQL Server après avoir installé le logiciel client Oracle.
Sur l’ordinateur exécutant 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
Note
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 la documentation en ligne de SQL Server.
Messages d’erreur courants et comment les résoudre
Important
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, vérifiez que vous suivez ces étapes attentivement. Pour une protection supplémentaire, sauvegardez le Registre avant de le modifier. Ensuite, vous pouvez restaurer le Registre si un problème se produit. 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 lors de l’exécution d’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 » situé 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 du code d’erreur hexadécimal dans le fichier Oledberr.h inclus dans le Kit de développement logiciel MDAC (SDK) .
Voici une liste des messages d’erreur courants qui peuvent se produire, ainsi que des informations sur la façon de résoudre le message d’erreur.
Note
Si vous utilisez SQL Server 2005 ou version ultérieure, ces messages d’erreur peuvent être légèrement différents. Toutefois, les ID d’erreur de ces messages d’erreur sont identiques à ceux des 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 la documentation en ligne de SQL Server pour 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 pour 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 n’ont pas été trouvés. 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 lorsqu’il existe un problème de connectivité au serveur Oracle. Passez en revue les techniques de résolution des problèmes de connectivité à la section serveur Oracle ci-dessous pour obtenir une résolution des problèmes supplémentaires.
Message 3
Erreur 7302 : Impossible de créer une instance du fournisseur OLE DB « MSDAORA » pour le serveur lié « %ls ».
Vérifiez que le fichier MSDAORA.dll est enregistré correctement. (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.
Note
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, activez-le pour l’exécuter 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 le traitement pour les fournisseurs à l’aide de SQL Server Management Studio (SSMS).
- Ouvrez SSMS et connectez-vous à votre instance de SQL Server.
- Dans l’Explorateur d’objets, accédez aux fournisseurs de serveurs liés aux objets>serveur>.
- Cliquez avec le bouton droit sur le fournisseur que vous souhaitez configurer et sélectionnez Propriétés.
- Dans la fenêtre Options du fournisseur, cochez la case Activer pour l’option Autoriser inprocess.
Message 4
Erreur 7303 : Impossible d’initialiser l’objet de 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 [FOURNISSEUR OLE/DB 'MSDAORA' IDBInitialize ::Initialize 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 appropriés 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 : table ou 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 ne dispose pas d'autorisations sur cette table.
Si vous recevez ces messages d’erreur, une table peut être manquante dans le schéma Oracle ou vous n’avez peut-être 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.
Sur le 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 comme c’est le cas.
L’appel suivant indique si la table existe dans le schéma Oracle. Cet appel affiche é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 d'accès à distance SQL Server pour l'utilisateur actuel. Msg 18456, Level 14, State 1, Line 1 Login 1failed for user ''.
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 nécessitent un mappage explicite à une connexion à distance et un mot de passe créés à l’aide
sp_addlinkedsrvlogin
de .Message 7
Erreur 7391 : L’opération n’a pas pu être effectuée, 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 [FOURNISSEUR OLE/DB « MSDAORA » ITransactionJoin ::JoinTransaction retourné 0x8004d01b]
Vérifiez que les versions OCI sont enregistrées correctement, comme décrit précédemment dans cet article.
Note
Si les entrées du 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 à l’aide de Microsoft ODBC Driver for 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 par rapport à 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 requiert cette prise en charge pour que, dans certaines conditions d’erreur, elle puisse mettre fin aux effets de l’instruction de modification des données tout en continuant avec la transaction.
S’il
SET XACT_ABORT
s’agit d’ON, SQL Server ne nécessite pas de prise en charge des transactions imbriquées du fournisseur OLE DB. Par conséquent, exécutezSET XACT_ABORT ON
avant d’exécuter des instructions de modification de données sur des tables distantes dans une transaction implicite ou explicite. Pour ce faire, le fournisseur OLE DB que vous utilisez ne prend pas en charge les transactions imbriquées.
Techniques de résolution des 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 :
Utilisez l’utilitaire Oracle SQL Plus (utilitaire de requête en ligne de commande) pour vérifier que vous pouvez vous connecter à Oracle et récupérer des données.
Note
Si vous ne pouvez pas vous connecter à Oracle et récupérer des données, vous disposez d’une installation incorrecte ou d’une configuration incorrecte des composants du client 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 installés et configurés correctement.
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.
Note
Lorsque vous utilisez Oracle 8i, le fichier .rgs est vide.
Si le client Oracle est installé et que vous recevez une erreur indiquant que 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 dossier à la variable PATH pour résoudre l’erreur.
Vérifiez que le fichier Ociw32.dll se trouve dans le dossier Oracle_Root\bin . Ce fichier .dll ne peut exister à aucun 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 .
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).
Microsoft vous recommande d’avoir une installation locale du client Oracle et de ne pas le faire en mappant un client Oracle distant sur votre ordinateur, puis de l’inclure 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.