Oracle
 sql >> Database >  >> RDS >> Oracle

Come si configura un server collegato a un database Oracle su SQL 2000/2005?

Sono stato in grado di configurare un server collegato a un database Oracle remoto, che ha finito per essere un processo in più fasi:

  1. Installa i driver Oracle ODBC su SQL Server.
  2. Crea DSN di sistema nel database Oracle su SQL Server.
  3. 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 il OracleTnsName hai definito in tnsnames.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.