BI Blog,  Oracle

SQL Server: aggiungere un server collegato al database Oracle

Un server collegato ci permette di leggere, dall'istanza che stiamo usando SQL Server, tabelle memorizzate in un'istanza diversa o anche in un DBMS diverso.

A tale scopo è necessario utilizzare OLEDB (Object Linking and Embedding Database), API sviluppata da Microsoft che consentono l'accesso in modo uniforme a un'ampia gamma di origini dati.

Nel nostro caso vogliamo essere in grado di accedere a un database Oracle tabelle direttamente da un'istanza di SQL Server. A tale scopo è necessario innanzitutto accedere al database Oracle installando il client appropriato nel computer che ospita l'istanza di SQL Server.

A seconda della versione a cui connettersi (32 o 64 bit) è necessario scaricare il client. È possibile installare entrambe le versioni del client (che mi raccomando). Iniziamo con il download di Oracle Instant Client da:

http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html

Scaricamo e installiamo il client a 32 e 64 bit. Il programma di installazione creerà i due Oracle Home.

A questo punto è necessario configurare i file tnsnames.ora e sqlnet.ora nella cartella

: percorso_di_installazione_'client_1'rete'admin.

Se non si trovano nella cartella i due file, è possibile copiarli dall'esempio di sottocartella. Il file sqlnet.ora in genere lo lascia come tale (a meno che non siano le configurazioni specifiche dell'istanza Oracle), mentre nel file tnsnames.ora dovremo immettere i parametri per la connessione al database. Aprire il file copiato dalla cartella di esempio e aggiungerlo alla fine del file:

alias .
 (DESCRIZIONE DELLA COSA DEL sistema
 (ADDRESS (PROTOCOL ) (HOST - myserver.mycompany.com)(PORT - 1521))
 (DATI_CONNECT)
 (SERVER - DEDICATO)
 (NOME_SERVIZIO : orcl)
 )
)

Sostituendo i parametri HOST, PORT e SERVICE_NAME con quelli forniti dall'amministratore di database Oracle. La configurazione deve essere effettuata sia per Oracle Home.

Successivamente si scarica e installare Oracle Provider per OleDB da:

http://www.oracle.com/technetwork/database/windows/index-089115.html

La procedura di installazione installerà il provider per Oracle Database che sarà visibile tra i provider di SQL Server:

Provider

Riavviare l'istanza di SQL Server, tornare all'elenco dei provider (da Provider collegati SSMS Server -> ), fare clic con il pulsante destro del mouse sul provider Oracle e selezionare le proprietà. Per essere sicuri del funzionamento del provider, ed evitare spiacevoli crash dell'instanza SQL Server (fidati di me, è!) è necessario selezionare l'opzione "Consenti Inprocess":

Msdaora

Questa opzione consentirà al provider di lavorare nello spazio di memoria di SQL Server.

A questo punto dobbiamo creare il nostro server collegato. Possiamo utillizzare la procedura guidata di Management StudioManagement Studio o agire direttamente tramite query:

EXEC master.dbo.sp_addlinkedserver @server : N'OracleDB', @srvproduct'N'Oracle', @provider'N'OraOLEDB. Oracle', @datasrc'N'NameTNS', @provstr'N'OraOLEDB. Oracolo'
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname'N'OracleDB',@useself'N'False',@locallogin'NULL,@rmtuser'N'USERNAME',@rmtpassword''PASSWORD'

È sufficiente sostituire NameTNS con database Oracle TNS e un USERNAME e PASSWORD con le credenziali utente Oracle DB.

A questo punto siamo pronti per eseguire la nostra prima query remota:

SELECT : FROM OracleDB.NomeCatalogo.NomeSchema.NomeTabella

Se si desidera inviare al database SQL Oracle e il relativo motore, è possibile scriverlo in PL / SQL con il comando OPENQUERY:

PROPRIETÀ SELECT (Selezionare ) . 
FROM OPENQUERY(OracleDB, 'selezionare da CatalogName.SchemaName.TableName')

Questa seconda soluzione è più efficace quando si desidera che il Oracle DB restituisce solo un subset delle tabelle necessarie. Per cancellare la query:

SELECT : DA OracleDB.HumanResources.Epmloyees WHERE Name (Selezionare) : DA OracleDB.HumanResources.Epmloyees WHERE Name (Nome ) , 'michele'

restituire l'intera tabella e su di essa verrà successivamente applicato il filtro. Durante la query:

SELECT : FROM OPENQUERY(OracleDB, 'selezionare da HumanResources.Employees where Name 'michele')

sarà il database Oracle per filtrare i risultati e SQL Server invierà solo le righe che soddisfano la clausola where.

Per completezza, sottolineare che un driver OLEDB per Oracle Database è stato rilasciato molto tempo fa anche da Microsoft (Microsoft OLEDB Provider per Oracle), ma la sua compatibilità è certificata fino alla versione 9 di Oracle DB. Qualsiasi procedura di configurazione rimane invariata: basta non scaricare e utilizzare il provider Oracle come provider MSDAORA anziché OraOLEDB.Oracle.

Leave a Reply