Suite à la mise en place d'un serveur lié :
- SQL Server 2000
- ORACLE 10 G
Une erreur est apparue, dont voila le texte :
Server: Msg 7399, Level 16, State 1, Line 1
OLE DB provider 'OraOLEDB.oracle' reported an error. Access denied.
OLE DB error trace [OLE/DB Provider 'OraOLEDB.oracle'
IUnknown::QueryInterface returned 0x80070005: Access denied.].
Ou en francais :
Server: Msg 7399, Level 16, State 1, Line 1
OLE DB provider 'OraOLEDB.oracle' a rencontré une erreur. Accès refusé.
OLE DB error trace [OLE/DB Provider 'OraOLEDB.oracle'
IUnknown::QueryInterface returned 0x80070005: Accès refusé.].
Cela vient de paramètres non corrects ou manquant dans la base de registre de la machine hébergeant le serveur SQL.
En effet, lors de l'installation du client ORACLE 10 G, on ne sélectionne que les modules nécessaires (qui sont dans mon cas) :
- Network Utilities
- SQL * Plus
- Les drivers oracles (Oracle Objects OLE, Oracle ODBC Driver, Oracle Provider for OLE DB, Oracle Data Provider for .NET)
Une fois cette liste sélectionnée et l'installation effectuée, plusieurs paramètres sont encore à corriger dans la base de registre, dont on retrouve une explication ici :
Les valeurs pour la version 10 G sous SQL Server 2000 sont les suivantes :
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSDTC\MTxOCI]
"OracleXaLib"="oraclient10.dll"
"OracleSqlLib"="ORASQL10.DLL"
"OracleOciLib"="oci.dll"
Ces paramètres sont utilisés par le module MSDTC de SQL Server.
On retrouve donc les DLL correctes, mais il reste encore une partie à modifier qui concerne spécifiquement les serveurs liés SQL Server.
Ainsi, dans la base de registre, juste au dessous de la précédente, dans la clé :
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\]
On retrouve une clé Providers, qui sont la liste des providers disponibles dans le cas des serveurs liés. On doit donc contrôlé que la valeur de type DWORD "AllowInProcess" existe et soit à 1.
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Providers\OraOLEDB.oracle]
"AllowInProcess"=dword:00000001
Si ce n'est pas le cas, il faut la créer.
Cette solution a été trouvée sur le forum suivant :
Une fois ceci modifié, on relance le service SQL et on peut alors lancer des requêtes sur le serveur ORACLE telles que :
SELECT
*
FROM OPENQUERY(LINK_ORACLE_OLEDB, 'SELECT * FROM MaTableOracle')
Attention :
Cette modification semble ne pas fonctionner sous SQL Server 2005, je suis entrain de rechercher la source potentielle.
Romelard Fabrice [MVP]
Commentaires
Enregistrer un commentaire