La Oracle Corporation è uno dei maggiori vendor di database al mondo. Il suo prodotto di punta, Oracle 8i , è da molti ritenuto il migliore del settore anche se la Microsoft CorporationÃ" con l'ultimo nato, SQL Server 2000, gli dà filo da torcere.
In questo articolo descriveremo come collegare un database Oracle (la versione Personal Edition è scaricabile dal sito http://www.oracle.com) a SQL Server e successivamente come visualizzare le tabelle collegate su pagine ASP. Per raggiungere il nostro obiettivo dobbiamo creare su SQL Server un server collegato detto più correttamente Linked Server.
Tramite un linked server possiamo collegarci da SQL Server alle più disparate
sorgenti dati da OracleÃ’ a Index Server, da Active Directory a Access, da Excel
ad un semplice file di testo ASCII. Una volta creato un server collegato possiamo generare query eterogenee e ad esempio fare una JOIN tra una tabella Oracle ed una su SQL Server oppure usare la flessibilità di T-SQL per interrogare le tabelle su altre sorgenti dati!
Come creare un Linked Server per Oracle
Apriamo il query analyzer, facciamo la login al server, digitanto lo user id
(usiamo sa) e la password corretti, ed assicuriamoci di essere posizionati sul database master, come indicato in figura:
Per creare il linked server dobbiamo eseguire due stored procedure di sistema:
- sp_addlinkedserver
- sp_addlinkedsrvlogin
al database Oracle - OraDemo
- Oracle
- MSDAORA
- orcl
- OraDemo
- FALSE @rmtuser @rmtpassword
- NULL
- scott
- tiger
Passo 1:
Vediamo la sintassi della procedura di sistema da utilizzare (come da documentazione MS):
sp_addlinkedserver @server = ' server ', @srvproduct = ' product_name '
[ , @provider = ' provider_name '
[ , @datasrc = ' data_source '
[ , @location = ' location '
[ , @provstr = ' provider_string '
[ , @catalog = ' catalog '
Aggiunge il linked server, ovviamente dovete sostituire i parametri del mio
Oracle con i vostri:
Premete F5 per far girare la query.
Passo 2:
Vediamo la sintassi dell'altra procedura di sistema da utilizzare (come da
documentazione MS):
[ , [ @useself useself
[ , [ @locallogin locallogin
[ , [ @rmtuser rmtuser
[ , [ @rmtpassword rmtpassword
Server per mappare una login (username e password) tra l'instanza di SQL Server locale e il server collegato remoto.
Premete F5 per far girare la query.
Ora avete creato il vostro Linked Server ad Oracle, come da figura aprite Enterprise Manger e dovreste vedere una nuova voce tra i linked servers:

Creiamo una query ad Oracle su SQL Server
Ora oltre al nostro SQL Server abbiamo un altro server remoto, il database
Oracle sotto il nome di OraDemo!
Vediamo come fare la nostra prima query, apriamo il query analyzer connettiamoci ad un database qualsiasi nel mio caso ho scelto pubs e proviamo a digitare la seguente istruzione select:
INNER JOIN
OraDemo..SCOTT.DEPT AS B
ON
B.DEPTNO = A.DEPTNO
Premete F5 per far girare la query e dovreste vedere come per magia nel query
analyzer di SQL Server il contenuto della tabella EMP di Oracle!
Per rendere più comode le interrogazioni al linked server possiamo creare una
vista all'interno del database pubs
CREATE VIEW OracleEmp
AS
SELECT A.ENAME, A.JOB, B.DNAME FROM OraDemo..SCOTT.EMP AS A
INNER JOIN
OraDemo..SCOTT.DEPT AS B
ON
B.DEPTNO = A.DEPTNO
Ed ora non ci rimane che scrivere la nostra pagina ASP per visualizzare i
dati, forse la cosa più semplice perché potrete fare tutto come si trattasse di
una normale vista di SQL Server, senza connettersi ad Oracle:
response.write "<hr>"
Set EMP = Server.CreateObject("ADODB.Connection")
EMP.Open "Provider=SQLOLEDB;Data Source=LUCASQLSRV_1;User ID=sa;Password=ciaociao;Initial
Catalog=pubs"
Set rs = EMP.Execute("select * from OracleEmp")
Do While not rs.eof
response.write rs(0) & " - " & rs(1) & " - "
& rs(2) & "<br>"
rs.movenext
loop
Set EMP = nothing
response.write "<hr>"
Semplicissimo no! Allegato all'articolo trovere il file sql per creare il
linked server, ovviamente dovete avere installato anche Oracle sul vostro PC.
In un prossimo articolo vedremo come fare query al file system del PC dal nostro
SQL server.