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:
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":
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