Sono stato in grado di configurare un server collegato a un database Oracle remoto, che ha finito per essere un processo in più fasi:
- Installa i driver Oracle ODBC su SQL Server.
- Crea DSN di sistema nel database Oracle su SQL Server.
- Crea un server collegato su un server SQL utilizzando il DSN di sistema.
Passaggio 1:installa i driver Oracle ODBC sul server
un. Scarica i pacchetti Oracle Instant Client necessari:Basic, ODBC e SQL*Plus (opzionale)
b. Decomprimi i pacchetti in una directory locale sul server SQL, in genere C:\Oracle
. Questo dovrebbe portare a una [directory] come C:\Oracle\instantclient_10_2
, che sarà il valore di [directory] a cui si fa riferimento nel resto di questa risposta.
c. Crea un file di testo chiamato tnsnames.ora
all'interno della [directory] del client istantaneo che contiene quanto segue:
OracleTnsName =
(
DESCRIPTION=
(
ADDRESS = (PROTOCOL=TCP)(HOST=10.1.3.42)(PORT=1521)
)
(
CONNECT_DATA = (SERVICE_NAME=acc)
)
)
Nota:HOST
effettivo , PORT
e SERVICE_NAME
varierà in base al server Oracle a cui stai stabilendo una connessione. Queste informazioni possono essere trovate spesso utilizzando gli strumenti del client di rete Oracle in ascoltatori .
Il OracleTnsName
può essere qualsiasi nome che si desidera assegnare all'origine dati Oracle e verrà utilizzato durante l'impostazione del DSN di sistema. Se lo desideri, puoi anche utilizzare la sintassi sopra per definire più nomi TNS nello stesso file tnsnames.ora.
d. Aggiungi la [directory] al sistema PATH
variabile di ambiente.
e. Crea una nuova variabile di ambiente di sistema denominata TNS_Admin
che ha un valore di [directory]
f. Esegui il [directory]\odbc_install.exe
utility per installare i driver Oracle ODBC.
g. Si consiglia di riavviare il server SQL, ma potrebbe non essere necessario. Inoltre, potresti voler concedere autorizzazioni di sicurezza a questa directory per le identità utente del server SQL e dell'agente SQL.
Passaggio 2:crea un DNS di sistema che utilizzi il driver Oracle ODBC
un. Apri Amministratore origine dati ODBC attrezzo. [ Strumenti amministrativi --> Fonti dati (ODBC) ]
b. Seleziona la scheda DSN di sistema, quindi seleziona il pulsante Aggiungi.
c. Nell'elenco dei driver, seleziona Oracle in instantclient {version} . (ad es. "Oracle nel client istantaneo 10_2") e quindi seleziona il pulsante Fine.
d. Specificare quanto segue:
Data Source Name
:{Nome DSN di sistema}Description
:{lascia vuoto/vuoto}TNS Service Name
:dovrebbe avere ilOracleTnsName
hai definito intnsnames.ora
file elencato, selezionalo come valore.- ID utente :{Nome utente Oracle}
e. Selezionare il pulsante Verifica connessione. Ti dovrebbe essere richiesto di fornire la {password utente Oracle}. Se tutto va bene il test avrà esito positivo.
Passaggio 3:crea un server collegato in SQL al database Oracle
Aprire una finestra di query nel server SQL ed eseguire quanto segue:
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}'
Nota:il {Linked Server Name}
può essere qualsiasi cosa tu voglia usare quando fai riferimento al server Oracle, ma il {System DNS Name}
deve corrisponde al nome del DSN di sistema creato in precedenza.
Il {Oracle User Name}
deve essere uguale all'ID utente utilizzato dal DSN di sistema e al {Oracle User Password}
dovrebbe essere lo stesso utilizzato per testare correttamente la connessione ODBC. Vedere KB 280106 per informazioni sulla risoluzione dei problemi del server collegato Oracle.
Interrogazione del server collegato Oracle
Puoi utilizzare OPENQUERY per eseguire query pass-through sul server collegato Oracle, ma tieni presente che per recordset molto grandi potresti ricevere un ORA-01652
messaggio di errore se si specifica un ORDER BY
clausola nella query pass-through. Spostando il ORDER BY
La clausola dalla query pass-through all'istruzione select esterna mi ha risolto questo problema.