|
|
DBLink
Le DBLink, ou database link est un objet d'une base de donnée permettant d'exécuter des requêtes sur une autre base de données, qu'elle se trouve physiquement sur la même machine ou qu'elle soit distante.
[modifier] Généralités sur les liens entre bases de donnéesUn dblink est un objet de schéma qui fait qu'Oracle se connecte à une base de données distante pour y accéder. Pour faire court, nous dirons qu'un dblink est un pointeur local qui permet à l'utilisateur d'accéder aux objets d'une base de données distante. On distingue trois types de dblink :
[modifier] Identification des dblink de la baseLa syntaxe de visionnement des dblink déjà existant dans une base est comme suit : SQL> select * from dba_db_links; SQL> select owner, db_link, username from dba_db_links; [modifier] Création d'un dblinkLa syntaxe SQL de création d'un dblink se présente comme suit : SQL> CREATE [PUBLIC] DATABASE LINK <nom de lien de base de données> [CONNECT TO <utilisateur oracle> IDENTIFIED BY <mot de passe utilisateur oracle distant>] USING '<chaîne de base de données>' ; Où :
[modifier] Contraintes sur le nom de la baseLe nom du lien créé peut ne pas être libre : dans un système distribué de base de données, chaque base devrait avoir un nom global unique, qui l'identifie dans le système. Le nom du lien doit alors être le nom global de la base distante. Dans ce cas, sur la base de données distante, le paramètre d'initialisation dynamique global_names, de type booléen, doit être positionné à 'true' (sa valeur par défaut est 'false'). Le nom global de la base distante se trouve dans la vue du dictionnaire de données GLOBAL_NAME, qui ne contient en général qu'une seule ligne et une seule colonne du même nom. Ce nom global comprend deux composants : le nom de la base et le nom du domaine, déterminés respectivement par les paramètres :
Note : le paramètre DB_DOMAIN est utilisé seulement lors de la création de la base de données, avec le paramètre DB_NAME. A partir de ce moment le nom global de la base est stocké dans le dictionnaire de données. Après la création, le changement du paramètre d'initialisation DB_DOMAIN n'a aucun effet sur le nom global de la base ou sur la résolution des noms de dblink. C'est pourquoi, pour changer le domaine dans un nom global de base de données, il faut changer le nom global lui-même, avec la commande :
SQL> ALTER DATABASE RENAME GLOBAL_NAME TO <database>.<domain> ;
Bien sûr, après un tel changement, il est souhaitable de modifier le paramètre DB_DOMAIN pour qu'il reflète le changement du nom de domaine avant le prochain redémarrage de la base. Pour déterminer si le nommage global est "forcé" sur une base de données, on peut, soit examiner le fichier de paramètres d'initialisation de la base, soit lancer la commande sql 'show parameter <nom_du_paramètre>', soit interroger la vue de dynamique v$parameter comme indiqué dans la requête qui suit : SQL> select name, value from v$parameter where name='global_names' ; Pour visualiser un nom global de base de données, on utilise la vue du dictionnaire de données GLOBAL_NAME avec la requête suivante: SQL> select * from GLOBAL_NAME ; [modifier] ExempleDisposant d'une base locale appelée locale_db et souhaitant pouvoir se connecter, depuis cette base locale, à la base distante distante_db. La définition du nom de service (alias) de la base distante dans le fichier tnsnames.ora de la machine locale se présente comme suit :
db2=
(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=TCP)(HOST=adresse distante)(PORT=port distant)
)
)
(CONNECT_DATA=
(SID=distante_db)
)
)
Les analyses sur la base distante donnant :
Pour créer un dblink dans ce contexte, l'utilisateur pourra utiliser l'une des deux syntaxes suivantes: SQL> CREATE [PUBLIC] DATABASE LINK nomdb CONNECT TO scott IDENTIFIED BY tiger USING 'db2' ; Ou SQL> CREATE [PUBLIC] DATABASE LINK nomdb CONNECT TO scott IDENTIFIED BY tiger USING 'db2.world' ; [modifier] Utilisation après créationPour ensuite utiliser un lien de base de données, il suffit de préciser le lien utilisé, précédé du symbole '@', avant l'identifiant de l'objet distant. [modifier] ExemplePar exemple, souhaitant obtenir la liste des codes clients (CLIENT_CODE de schéma MYSCHEMA) de la table CLIENTS se trouvant sur une autre instance (accessible par le lien nommé MY_DB_LINK): SQL> select CLIENT_CODE from MYSCHEMA.CLIENTS@MY_DB_LINK; [modifier] Lien externe |