"Ne peut pas créer une instance de fournisseur OLE DB" erreur comme Utilisateur D'authentification Windows

j'essaie d'exécuter openrowset à partir de MS SQL Server sur un serveur Oracle.

quand j'exécute la commande suivante:

select * from
OPENROWSET('OraOLEDB.Oracle','srv';'user';'pass', 
'select * from table')

l'erreur suivante se produit

Msg 7302, Level 16, State 1, Line 1
Cannot create an instance of OLE DB provider "OraOLEDB.Oracle" for linked server "(null)".

quelqu'un Peut-il me dire comment je peux utiliser la fonction openrowset OraOLEDB.Oracle?

j'utilise la version 64 bits de MS SQL Server et Oracle OLEDB driver.

Modifier

j'ai essayé sur deux ordinateurs exécutant Windows 7 x64& fenêtres Server 2008 x64 MS SQL Server 2008 x64. Les deux affichaient le même message d'erreur.

18
demandé sur patrickmdnet 2013-01-24 15:14:12

6 réponses

in SQL Server Enterprise Manager, open \Server Objects\Linked Servers\Providers clic droit sur la OraOLEDB.Oracle fournisseur, sélectionnez propriétés et vérifiez l' "Allow inprocess" option. Recréer votre serveur lié et tester à nouveau.

41
répondu David Brabant 2015-10-01 19:52:53

est tombé dans ce problème où le serveur lié fonctionnait pour les utilisateurs qui étaient des administrateurs locaux sur le serveur, mais pas pour n'importe qui d'autre. Après de nombreuses heures de déconner, j'ai réussi à résoudre le problème en suivant les étapes suivantes:

  1. Run (CTRL + R) "dcomcnfg". Accédez à une Composante "Services -> Ordinateur -> poste de travail -> configuration DCOM".
  2. ouvrir la page de propriétés de "MSDAINITIALIZE".
  3. copier le "numéro D'Application" sur les propriétés page.
  4. fermeture de "dcomcnfg".
  5. Exécuter "regedit". Naviguez vers " HKEY_CLASSES_ROOT\AppID{???}" avec l' ??? représenter L'ID de la demande que vous avez copié à l'étape 3.
  6. clic Droit sur le "{???} dossier" et sélectionnez "Autorisations"
  7. ajouter le groupe des administrateurs locaux aux permissions, leur accorder le contrôle total.
  8. fermeture de "regedit".
  9. redémarrez le serveur.
  10. Exécuter "dcomconfig". Naviguer vers " services de composants -> Ordinateur -> poste de travail -> configuration DCOM".
  11. ouvrir la page de propriétés de "MSDAINITIALIZE".
  12. dans l'onglet" Sécurité", sélectionnez" Personnaliser "sous" Autorisations de lancement et D'Activation", puis cliquez sur le bouton" Modifier".
  13. ajouter "utilisateurs authentifiés" et leur accorder les 4 autorisations de lancement et d'activation.
  14. fermeture de "dcomcnfg".
  15. trouver le répertoire racine D'installation D'Oracle. "E:\Oracle" dans mon cas.
  16. modifier la sécurité propriétés du répertoire racine D'Oracle. Ajouter "utilisateurs authentifiés" et leur accorder les permissions "lire et exécuter", "lister le contenu du dossier" et "lire". Appliquer les nouvelles autorisations.
  17. cliquez sur le bouton "autorisations avancées", puis cliquez sur"Modifier les autorisations". Sélectionnez "Remplacer toutes les permissions d'un objet enfant par des permissions héritées de cet objet". Appliquer les nouvelles autorisations.
  18. trouver le " OraOLEDB.Oracle " fournisseur en SQL Server. Assurez-vous que le paramètre "Allow Inprocess" est vérifier.
  19. redémarrez le serveur.
12
répondu Matt Anderson 2018-01-01 12:24:50

lors de la connexion à SQL Server avec authentification Windows (par opposition à un compte SQL Server local), tenter d'utiliser un serveur lié peut entraîner le message d'erreur:

Cannot create an instance of OLE DB provider "(OLEDB provider name)"...

la réponse la plus directe à ce problème est fournie par Microsoft KB 2647989, parce que " les paramètres de sécurité pour la classe MSDAINITIALIZE DCOM sont incorrects."

la solution est de corriger les paramètres de sécurité pour MSDAINITIALISER. Dans Windows Vista et plus tard, la classe est détenue par TrustedInstaller, de sorte que la propriété de MSDAINITIALIZE doit être changée avant que la sécurité peut être ajustée. Le KB ci-dessus contient des instructions détaillées à cet effet.

C'MSDN blog décrit la raison:

MSDAINITIALIZE est une classe COM qui est fournie par OLE DB. Cette classe peut analyser les chaînes de connexion OLE DB et charger/initialiser le fournisseur en fonction des valeurs des propriétés dans la chaîne de connexion. MSDAINITILIAZE est initié par utilisateurs connectés au serveur SQL. Si L'authentification Windows est utilisée pour se connecter à SQL Server, alors le fournisseur est initialisé sous le compte utilisateur connecté. Si l'utilisateur connecté est un login SQL, alors le fournisseur est initialisé sous le compte de service SQL Server. En fonction du type de login utilisé, les permissions sur MSDAINITIALIZE doivent être fournies en conséquence.

La question remonte au moins à SQL Server 2000; KB 280106 de Microsoft décrit l'erreur (voir "Message 3") et a la correction suggérée de mettre l'indicateur in Process pour le fournisseur D'OLEDB.

alors que la mise en processus peut résoudre le problème immédiat, il se peut que ce ne soit pas ce que vous voulez. Selon Microsoft,

instanciation du fournisseur en dehors du processus SQL Server protège le processus SQL Server des erreurs dans le fournisseur. Lorsque le fournisseur est instancié en dehors du processus SQL Server, mises à jour ou encarts faisant référence à de longues colonnes (texte, texte ou image) ne sont pas autorisés. -- Serveur Lié Propriétés doc pour SQL Server 2008 R2.

La meilleure réponse est de suivre les directives de Microsoft et d'ajuster la sécurité MSDAINITIALISER.

7
répondu patrickmdnet 2016-09-20 12:33:06

pour erreur 7302 en particulier, j'ai découvert, dans mon registre, en cherchant OraOLEDB.Oracle que L'emplacement InprocServer32 était erroné.

si c'est le cas, ou si vous ne trouvez pas cette chaîne dans le registre, alors vous devrez installer ou réinscrire le composant.

j'ai dû supprimer la clé du niveau des GUID, puis trouver le ProgID (OraOLEDB.Oracle), et supprimez cela aussi. (Le programme est relié à la CLSID en tant que paire).

Alors I réenregistré OraOLEDB.Oracle en appelant regsvr32.exe sur ORAOLEDB*.DLL.

juste réenregistrement seul n'a pas résolu le problème, j'ai dû supprimer les clés de Registre pour le faire pointer à l'endroit correct. Alternativement, Hacker l'emplacement InprocServer32.

maintenant j'ai l'erreur 7308, à propos des appartements simples filetés; on continue!

1
répondu GilesDMiddleton 2016-01-14 12:27:26

mis à part d'autres bonnes réponses, j'ai juste dû donner des permissions NTFS au dossier d'installation D'Oracle. (J'ai donné l'accès en lecture)

0
répondu jaraics 2018-03-13 16:42:03

situation similaire pour la configuration suivante:

  • Windows Server 2012 R2 Standard
  • MS SQL server 2008 (testé aussi SQL 2012)
  • client Oracle 10g (OracleDB v8.1.7)--6-->
  • MSDAORA provider
  • ID d'Erreur: 7302

ma solution:

  • Installer 32 bits MS SQL Server (64bit MSDAORA doesn't exist)
  • Installer 32 bits Oracle 10g 10.2.0.5 patch (set compatibilité W7 sur l'installation.exe)
  • redémarrez les services SQL
  • Case Permettent de processus dans MSDAORA provider
  • Test lié oracle de connexion au serveur
0
répondu gaffcz 2018-07-24 07:22:39