9
votes

Relier Oracle avec SQL Server

J'essaie de lier SQL Server 2005 sur une base de données Oracle 10G. J'ai installé le client Oracle sur le serveur SQL et validé que je peux me connecter à la base de données Oracle à la fois à TNSPING et SQLPLUS. Lorsque j'essaie d'exécuter une requête dans SQL Server, je reçois ce qui suit:

OLE DB Fournisseur "oraoledb.oracle" pour serveur lié "ORA_CSSA2APD" message renvoyé "ORA-12154: TNS: Impossible de résoudre l'identifiant de connexion spécifié".
MSG 7303, niveau 16, état 1, ligne 1
Impossible d'initialiser l'objet Source de données du fournisseur OLE DB "ORAOLEDB.ORACLE" pour le serveur lié "ORA_CSSA2APD".

Des idées? J'ai essayé les deux questions suivantes sans chance:

Sélectionnez * à partir d'OpenQuery (ORA_CSSA2APD, 'SELECT Count (Rowid) à partir d'eService_OP.Agent')

Sélectionnez Compte (Rowid) à partir de ORA_CSSA2APD..SERVICE_OP.Agent


0 commentaires

5 Réponses :


2
votes

Les messages d'erreur TNS signifie généralement que la connexion est imparfaite (par exemple, l'hôte est inégalable / fois-d'œuvre sur le port spécifié, ou qui ne sait tout simplement pas ce que ORA_CSSA2APD est censé pointer vers).

Une chose à considérer est, utilisez-vous une fenêtre de 64 bits et utilisez-vous un client Oracle 32 bits ou 64 bits (ou éventuellement). Si vous avez une application 32 bits exécutée sur un système d'exploitation 64 bits essayant d'appeler Oracle, il a besoin d'un client Oracle 32 bits. L'utilisation d'un client 32 bits sur un système d'exploitation 64 bits peut être délicate et il est plus sûr de ne pas l'installer dans le dossier "Fichiers du programme (x86)".

Portez également à l'esprit le suivant

dans une version 64 bits de Windows Server 2003 ou de Windows XP, le % Windir% \ System32 Dossier est réservé pour les applications 64 bits. Quand un 32 bits L'application essaie d'accéder à la Dossier System32, l'accès est redirigé au dossier suivant: % Windir% \ sswow64

Ainsi, pour les fenêtres de 64 bits, les trucs 32 bits sont dans le dossier SYSWOW64 et les trucs 64 bits sont dans le dossier System32.


1 commentaires

Le système OS et le client Oracle sont à la fois 32 bits.



4
votes

ORA: 12154 signifie généralement que l'alias de la DB que vous essayez de vous connecter n'a pas été trouvé dans le fichier Tnsnames.ora. (Voir http://ora-12154.ora-code.com/ a plus détaillé Explication.)

Vous devez vous assurer que la source de données est un alias que le fichier TNSNames connaît environ (sur le serveur où réside SQL Server, quel que soit l'endroit où vous utilisez les requêtes de); SQL Server va être comme n'importe quel autre client Oracle et doit savoir où se connecter et sans le fichier Tnsnames.ora, il ne connaîtra pas les détails de l'endroit où l'oracle DB est.

Si vous n'avez pas accès au serveur SQL Server (il y en a un du département du département de redondance), vous devrez obtenir le serveur admin pour définir cela pour vous.

(la propriété source de données du serveur lié doit être l'alias de Tnsnames.ora alias pour la DB que vous essayez de créer un lien vers.)

hth ...


6 commentaires

Je suis capable de se connecter à l'aide de SQLPlus et je peux toucher avec succès le serveur afin qu'il n'y ait aucun problème avec le fichier TNSNAMES et j'utilise le même nom de service que j'ai spécifié dans les noms TNSNAMES comme l'argument @DataSRC de la commande SP_ADDDLINKEDSERVER. Toute autre idée?


Et SQLPlus fonctionnant sur la même machine que SQL Server?


Oui, il fonctionne sur la même machine que SQL Server.


Dans votre fichier sqlnet.ora, avez-vous une entrée qui ressemble à quelque chose comme: noms.default_domain = monde? Si tel est le cas, il vous attendra à vos alias dans le fichier Tnsnames.ora se terminer par exemple .world par exemple, si le World_Domain est au monde, au lieu d'avoir ceci: orcl = (description = ... etc ... etc ...) Vous auriez besoin de cela. : Orcl.world = (description = ...)


Il y a les deux seules lignes de mon fichier sqlnet.ora: sqlnet.authentication_services = (NTS) noms.directory_path = (TNSNAMES)


SQL Server a-t-il été redémarré depuis l'installation du client Oracle?



6
votes

Je soupçonne un environnement d'environnement. C'est-à-dire que votre session ramasse le fichier Tnsnames.ora, mais la session sous-jacente SQL Server n'est pas. Je vérifierais que Oracle_Home et, éventuellement, TNS_Admin sont en train d'être définis et de pointer.

Pouvez-vous utiliser la syntaxe Easy Connect pour la base de données avec la connexion SQL Server.

IE Remplacer ORA_CSSA2APD avec nom d'hôte: 1521 / Service_Name


3 commentaires

Les variables d'environnement pour les deux sont définies et précises. Je n'ai pas essayé la syntaxe Connect que vous avez décrite ci-dessus, mais j'ai essayé de créer une UDL et de copier cela dans la chaîne de connexion sans chance. Je vais essayer votre syntaxe ci-dessus et vous faire connaître les résultats. Je vous en suis reconnaissant.


J'ai redémarré le service parce que je n'étais pas sûr si j'avais depuis que je définissais la variable d'environnement Tns_admin et tout fonctionne maintenant. Merci pour l'aide!


Comme @bokoxev a dit, si tout semble bien, mais ne fonctionne pas, essayez de redémarrer l'intégralité du serveur MSSQL auprès de MSSQL Management Studio, cela a fonctionné pour moi.



0
votes

Nous avons trouvé que SQL Server, pour une raison quelconque inconnue, a commencé à rechercher le fichier Tnsnames.ora dans les emplacements Oracle par défaut.

Nous avons pu placer les fichiers Tnsnames.ora dans les endroits suivants, avec des résultats réussi:

pour SQL Server 32 bits sur un système d'exploitation 32 bits ou 64 bits sur un système d'exploitation 64 bits p> xxx pré>

pour SQL Server 32 bits sur 64- BIT OS P>

%ProgramFiles% (x86)\Oracle
%ProgramFiles% (x86)\Oracle\network\admin


0 commentaires

2
votes

Ce problème m'a été arrivé, mais seulement avec certains comptes d'utilisateurs Windows. Une combinaison d'une option de fournisseur "Autoriser Inprocess" pour l'ORAOLEDB.ORACLE fournissez (SSMS> Objets de serveur> Serveurs liés> fournit> ORAOLEDB.Oracle), redémarrage du service SQL Server Windows et ajustant enfin les autorisations sur le fichier TNSNAMES.ora directement.


1 commentaires

Le redémarrage du service Windows SQL Server a-t-il fait pour moi