J'ai pu configurer un serveur lié à une base de données Oracle distante, ce qui s'est avéré être un processus en plusieurs étapes :
- Installez les pilotes ODBC Oracle sur SQL Server.
- Créer un DSN système pour la base de données Oracle sur SQL Server.
- Créer un serveur lié sur le serveur SQL à l'aide du DSN système.
Étape 1 :Installez les pilotes ODBC Oracle sur le serveur
un. Téléchargez les packages Oracle Instant Client nécessaires :Basic, ODBC et SQL*Plus (facultatif)
b. Décompressez les packages dans un répertoire local sur le serveur SQL, généralement C:\Oracle
. Cela devrait aboutir à un [répertoire] comme C:\Oracle\instantclient_10_2
, qui sera la valeur de [répertoire] référencé dans le reste de cette réponse.
c. Créez un fichier texte nommé tnsnames.ora
dans le [répertoire] du client instantané qui contient les éléments suivants :
OracleTnsName =
(
DESCRIPTION=
(
ADDRESS = (PROTOCOL=TCP)(HOST=10.1.3.42)(PORT=1521)
)
(
CONNECT_DATA = (SERVICE_NAME=acc)
)
)
Remarque :HOST
réel , PORT
, et SERVICE_NAME
variera en fonction du serveur Oracle auquel vous établissez une connexion. Ces informations peuvent souvent être trouvées à l'aide des outils client réseau Oracle sous les auditeurs .
Le OracleTnsName
peut être n'importe quel nom que vous souhaitez attribuer à la source de données Oracle et sera utilisé lors de la configuration du DSN système. Vous pouvez également utiliser la syntaxe ci-dessus pour définir plusieurs noms TNS dans le même fichier tnsnames.ora si vous le souhaitez.
ré. Ajoutez le [répertoire] au système PATH
variable d'environnement.
e. Créez une nouvelle variable d'environnement système nommée TNS_Admin
qui a une valeur de [répertoire]
F. Exécutez le [directory]\odbc_install.exe
utilitaire pour installer les pilotes Oracle ODBC.
g. Il est recommandé de redémarrer le serveur SQL, mais ce n'est peut-être pas nécessaire. En outre, vous pouvez accorder des autorisations de sécurité à ce répertoire pour les identités utilisateur du serveur SQL et de l'agent SQL.
Étape 2 :Créer un DNS système qui utilise le pilote ODBC Oracle
un. Ouvrez l'administrateur de source de données ODBC outil. [ Outils d'administration --> Sources de données (ODBC) ]
b. Sélectionnez l'onglet DSN système, puis sélectionnez le bouton Ajouter.
c. Dans la liste des pilotes, sélectionnez Oracle dans instantclient {version} . (par exemple 'Oracle dans instantclient 10_2') puis sélectionnez le bouton Terminer.
ré. Spécifiez ce qui suit :
Data Source Name
:{Nom DSN système}Description
:{laisser vide/vide}TNS Service Name
:doit avoir leOracleTnsName
vous avez défini dans letnsnames.ora
fichier répertorié, sélectionnez-le comme valeur.- ID utilisateur :{Nom d'utilisateur Oracle}
e. Sélectionnez le bouton Tester la connexion. Vous devriez être invité à fournir le {mot de passe utilisateur Oracle}. Si tout se passe bien, le test réussira.
Étape 3 :Créer un serveur lié en SQL à la base de données Oracle
Ouvrez une fenêtre de requête dans le serveur SQL et exécutez ce qui suit :
EXEC sp_addlinkedserver
@server = '{Linked Server Name}'
,@srvproduct = '{System DSN Name}'
,@provider = 'MSDASQL'
,@datasrc = '{System DSN Name}'
EXEC sp_addlinkedsrvlogin
@rmtsrvname = '{Linked Server Name}'
,@useself = 'False'
,@locallogin = NULL
,@rmtuser = '{Oracle User Name}'
,@rmtpassword = '{Oracle User Password}'
Remarque :Le {Linked Server Name}
peut être tout ce que vous souhaitez utiliser lors du référencement du serveur Oracle, mais le {System DNS Name}
doit correspondre au nom du DSN système que vous avez créé précédemment.
Le {Oracle User Name}
doit être le même que l'ID utilisateur utilisé par le système DSN, et le {Oracle User Password}
doit être le même que celui que vous avez utilisé pour tester avec succès la connexion ODBC. Consultez l'article KB 280106 pour plus d'informations sur la résolution des problèmes de serveur lié Oracle.
Interroger le serveur lié Oracle
Vous pouvez utiliser OPENQUERY pour exécuter des requêtes directes sur le serveur lié Oracle, mais sachez que pour les jeux d'enregistrements très volumineux, vous pouvez recevoir un ORA-01652
message d'erreur si vous spécifiez un ORDER BY
clause dans la requête directe. Déplacer le ORDER BY
La clause de la requête directe à l'instruction de sélection externe a résolu ce problème pour moi.