CREATE DATABASE LINK
Il Database Link è uno schema object in un db, che permette ad un utente di accedere ad un altro db.
Il db link permette di accedere a tabelle e viste di un altro db aggiungendo la stringa @<nome_dblink>.
Supponiamo di avere due db uno locale S11TEST e uno remoto con service name IAT11F.
Vogliamo accedere da S11TEST allo schema pippo del db IAT11F.
Verificare che le due macchine si pingano tra loro e inserire nel tnsname.ora della macchina locale S11TEST la connessione al db remoto.
IAT11F.WORLD =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = lab02.dominio.it)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = IAT11F.WORLD)
)
)
Testare da macchina locale
ping <ip macchina remota oppure alias>
tnsping IAT11F.WOLRD
Sul db S11TEST assicurarsi che l'utenza che deve creare il dblink abbia i seguenti privilegi di sistema:
- CREATE SESSION
- CREATE DATABASE LINK per creare un dblink privato
- CREATE PUBLIC DATABASE LINK per creare un dblink pubblico cioè disponibile a tutti gli utenti.
Con la seguente istruzione si crea un Fixed-User Database Link cioè un utente qualsiasi del db locale S11TEST può accedere ad un solo schema "pluto "del db remoto IAT11F.
CREATE PUBLIC DATABASE LINK <dblik_name>
CONNECT TO <schema_name>
IDENTIFIED BY <pwd dello shema>
USING '<alias del tnsname del db remoto>';
CREATE PUBLIC DATABASE LINK dblpluto
CONNECT TO pluto
IDENTIFIED BY pluto
USING 'IAT11F.WORLD';
Con questa istruzione un utenza qualsiasi del db S11TEST può accedere ad una tabella del db remoto con la seguente query.
select * from <nome_tabella>@<dblik_name>;
Per verificare la creazione del dblink usare la query
select * from dba_db_links
Per testare la connessione
select * from dual@DBLPLUTO
Per creare un dblink privato da un utente occorre connettersi con quell'utente e non come sys altrimenti non funziona.
SQL> conn pept/pept
CREATE DATABASE LINK dblpeptpluto
CONNECT TO pluto
IDENTIFIED BY pluto
USING 'IAT11F.WORLD';
L'utente pept deve avere le grant create database link e create session.
Query di riferimento.
select * from USER_DB_LINKS
SQL> select * from dba_db_links;
OWNER DB_LINK USERNAME HOST CREATED
---------- ---------- ---------- ---------- ----------------------------------------------------
PUBLIC DBLPLUTO PLUTO IAT11F.WORLS 04-FEB-19
PEPT DBLPEPTPLUTO PLUTO IAT11F.WORLD 06-FEB-19
Per droppare un dblink
drop public database link <nome dblink>;
Il db link permette di accedere a tabelle e viste di un altro db aggiungendo la stringa @<nome_dblink>.
Supponiamo di avere due db uno locale S11TEST e uno remoto con service name IAT11F.
Vogliamo accedere da S11TEST allo schema pippo del db IAT11F.
Verificare che le due macchine si pingano tra loro e inserire nel tnsname.ora della macchina locale S11TEST la connessione al db remoto.
IAT11F.WORLD =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = lab02.dominio.it)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = IAT11F.WORLD)
)
)
Testare da macchina locale
ping <ip macchina remota oppure alias>
tnsping IAT11F.WOLRD
Sul db S11TEST assicurarsi che l'utenza che deve creare il dblink abbia i seguenti privilegi di sistema:
- CREATE DATABASE LINK per creare un dblink privato
- CREATE PUBLIC DATABASE LINK per creare un dblink pubblico cioè disponibile a tutti gli utenti.
Con la seguente istruzione si crea un Fixed-User Database Link cioè un utente qualsiasi del db locale S11TEST può accedere ad un solo schema "pluto "del db remoto IAT11F.
CREATE PUBLIC DATABASE LINK <dblik_name>
CONNECT TO <schema_name>
IDENTIFIED BY <pwd dello shema>
USING '<alias del tnsname del db remoto>';
CREATE PUBLIC DATABASE LINK dblpluto
CONNECT TO pluto
IDENTIFIED BY pluto
USING 'IAT11F.WORLD';
Con questa istruzione un utenza qualsiasi del db S11TEST può accedere ad una tabella del db remoto con la seguente query.
select * from <nome_tabella>@<dblik_name>;
select * from dba_db_links
Per testare la connessione
select * from dual@DBLPLUTO
Per creare un dblink privato da un utente occorre connettersi con quell'utente e non come sys altrimenti non funziona.
SQL> conn pept/pept
CREATE DATABASE LINK dblpeptpluto
CONNECT TO pluto
IDENTIFIED BY pluto
USING 'IAT11F.WORLD';
L'utente pept deve avere le grant create database link e create session.
Query di riferimento.
select * from USER_DB_LINKS
SQL> select * from dba_db_links;
OWNER DB_LINK USERNAME HOST CREATED
---------- ---------- ---------- ---------- ----------------------------------------------------
PUBLIC DBLPLUTO PLUTO IAT11F.WORLS 04-FEB-19
PEPT DBLPEPTPLUTO PLUTO IAT11F.WORLD 06-FEB-19
Per droppare un dblink
drop public database link <nome dblink>;