Tuesday, March 21, 2006

LES DBLINK ORACLE : DESCRIPTION, CONFIGURATION ET UTILISATION (1ère PARTIE)

I – GENERALITES SUR LES DBLINK ORACLE
Un dblink ou database link (ou encore lien de base de données en français) est un objet de schéma qui fait qu'Oracle se connecte à une base de données distante pour y accéder à un objet. C'est donc un objet d'une base de données qui permet, entre autres, d'exécuter des requêtes sur une autre base de données, que cette dernière se trouve physiquement sur la même machine ou non.
Pour faire court, nous dirons qu'un dblink est un pointeur dans une base de données local qui permet à l'utilisateur d'accéder aux objets sur une base de données distante.
On distingue trois types de dblink :
- Les dblink privés ; c'est le type de dblink qui est créé par défaut lorsque l'utilisateur ne donne aucune précision sur le type, en particulier quand il ne précise pas le mot-clé PUBLIC lors de la création ;
- Les dblink publics ; lors de leur création, l'utilisateur précise le type par le mot-clé PUBLIC ;
- Les dblink globaux

La création des dblink comporte quelques contraintes que l'on ne peut bien appréhender qu'en ayant à l'esprit le fonctionnement de certains paramètres d'initialisation et vues du dictionnaire de données de la base de données distante.
Global_names est un paramètre d'initialisation dynamique de type booléen qui spécifie, lorsqu'il est positionné à 'true' sur la base de données distante, si un dblink doit avoir le même nom que la base de données à laquelle il connecte. Sa valeur par défaut est 'false'.
Global_name (attention : il n'y a pas de 's' à la fin) est une vue Oracle qui ne contient en général qu'une seule ligne et une seule colonne du même nom (global_name) donnant le nom global de la base de donnée.
Dans un système distribué de base de données, chaque base de données devrait avoir un nom global unique de base de données qui identifie de façon unique la base de données dans le système.
Un nom global de base de donnée comprend deux composants : un nom de base de données et un domaine. Le nom de base de données et le domaine sont déterminés par les paramètres DB_NAME et DB_DOMAIN comme indiqué dans le tableau qui suit :


Composant ParamètreContraintesExemple
Nom de baseDB_NAMEDoit comporter huit caractères au plus.pagenet
DomaineDB_DOMAINDoit suivre les conventions standard d'internetfr.oracle.com


Le paramètre DB_DOMAIN est important seulement lors de la création de la base de données lorsqu'il est utilisé, ensemble avec le paramètre DB_NAME, pour former le nom global de la base de données. A partir de ce moment le nom global de la base est stocké dans le dictionnaire de données. Après la création de la base de données, 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, on doit utiliser impérativement la commande :
SQL> ALTER DATABASE RENAME GLOBAL_NAME TO nom_database.nom_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 opéré dans le nom de domaine avant le prochain redémarrage de la base.

Le nom que l'on peut donner à un lien sur la base de données locale dépend du fait que la base de données distante à laquelle on souhaite accéder a "forcé" le nommage global ou pas.
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 …' soit interroger la vue de performance dynamique v$parameter comme indiqué dans la requête qui suit :
SQL> col name format a12
SQL> col value format a6
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 ;


Commande de création d'un dblink
La 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ù :
- On utilise l'option CONNECT TO si on veut accéder à la base distante avec un nom d'utilisateur oracle différent, c'est-à-dire pas le même qui est en cours dans la session de la base locale.
- nom_de_lien_de_base_de_données doit correspondre au nom de la base de données à laquelle le dblink se réfère, si le paramètre GLOBAL_NAMES vaut 'true'.
- chaîne_de_base_de_données est une chaîne de connexion SQL*NET valide trouvée dans le fichier tnsnames.ora.

Un exemple concret
Nous disposons d'une base locale appelée pagenetdb1 et nous souhaitons pouvoir nous connecter depuis cette base locale, à la base distante pagenetdb2. Aussi la définition du nom de service (alias) de la base distante dans le fichier tnsnames.ora de notre base locale se présente comme suit :
db2=
(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=TCP)(HOST=machfde)(PORT=1543)
)
)
(CONNECT_DATA=
(SID=pagenetdb2)
)
)
Enfin les analyses sur la base distance donnent :
- db_name = pagenetdb2
- global_names=true
- global_name=pagenetdb2.world
Pour créer un dblink dans ce contexte, l'utilisateur pourra utiliser l'une des deux syntaxes suivantes de la commande "create database link" :
SQL> CREATE [PUBLIC] DATABASE LINK pagnetdb2 CONNECT TO scott IDENTIFIED BY tiger USING 'db2' ;
Ou
SQL> CREATE [PUBLIC] DATABASE LINK pagnetdb2 CONNECT TO scott IDENTIFIED BY tiger USING 'db2.world' ;

[ A SUIVRE ... ]



5 Comments:

At 4:38 AM, Blogger ddanciu said...

Bonjour,

Avez-vous une idée de la volumétrie possible avec les dblinks? Est-ce que cela pose des pb pour le transfert de gros volumes de données?

 
At 12:16 AM, Blogger Unknown said...

Bonjour
Je suis en contrat de professionnalisation pour 1an sur oracle 10g
j'avoue que c'est pas évident et que çà demande beaucoup d'expériences et de cas réels (pratiques) pour bien avancer sur oracle.
oups , j'ai oublié : je vous remercie infiniment pour dossiers sur récupération avec rman (voilà un cas réel avec des scénarios au lieu des autres sites (blabla sur définitions etc...)
Je reviens vers vous pour m'aider si vous avez des cas réels sur comment bien sauvegarder la base de données avec au préalable une bonne configuration de rman et pour dblink comment créer des vues et des synonymes .
vous voyez je suis au début et je suis passionné d'avancer sur ce domaine et parfois frustré de ne pas trouver assez de documents pratiques sur internet (c'est rare des documents comme le votre car c'est inspiré des cas pratiques de l'entreprise)
merci encore et BRAVO

 
At 12:17 AM, Blogger Unknown said...

Bonjour
Je suis en contrat de professionnalisation pour 1an sur oracle 10g
j'avoue que c'est pas évident et que çà demande beaucoup d'expériences et de cas réels (pratiques) pour bien avancer sur oracle.
oups , j'ai oublié : je vous remercie infiniment pour dossiers sur récupération avec rman (voilà un cas réel avec des scénarios au lieu des autres sites (blabla sur définitions etc...)
Je reviens vers vous pour m'aider si vous avez des cas réels sur comment bien sauvegarder la base de données avec au préalable une bonne configuration de rman et pour dblink comment créer des vues et des synonymes .
vous voyez je suis au début et je suis passionné d'avancer sur ce domaine et parfois frustré de ne pas trouver assez de documents pratiques sur internet (c'est rare des documents comme le votre car c'est inspiré des cas pratiques de l'entreprise)
merci encore et BRAVO

 
At 12:17 AM, Blogger Unknown said...

Bonjour
Je suis en contrat de professionnalisation pour 1an sur oracle 10g
j'avoue que c'est pas évident et que çà demande beaucoup d'expériences et de cas réels (pratiques) pour bien avancer sur oracle.
oups , j'ai oublié : je vous remercie infiniment pour dossiers sur récupération avec rman (voilà un cas réel avec des scénarios au lieu des autres sites (blabla sur définitions etc...)
Je reviens vers vous pour m'aider si vous avez des cas réels sur comment bien sauvegarder la base de données avec au préalable une bonne configuration de rman et pour dblink comment créer des vues et des synonymes .
vous voyez je suis au début et je suis passionné d'avancer sur ce domaine et parfois frustré de ne pas trouver assez de documents pratiques sur internet (c'est rare des documents comme le votre car c'est inspiré des cas pratiques de l'entreprise)
merci encore et BRAVO

 
At 12:17 AM, Blogger Unknown said...

Bonjour
Je suis en contrat de professionnalisation pour 1an sur oracle 10g
j'avoue que c'est pas évident et que çà demande beaucoup d'expériences et de cas réels (pratiques) pour bien avancer sur oracle.
oups , j'ai oublié : je vous remercie infiniment pour dossiers sur récupération avec rman (voilà un cas réel avec des scénarios au lieu des autres sites (blabla sur définitions etc...)
Je reviens vers vous pour m'aider si vous avez des cas réels sur comment bien sauvegarder la base de données avec au préalable une bonne configuration de rman et pour dblink comment créer des vues et des synonymes .
vous voyez je suis au début et je suis passionné d'avancer sur ce domaine et parfois frustré de ne pas trouver assez de documents pratiques sur internet (c'est rare des documents comme le votre car c'est inspiré des cas pratiques de l'entreprise)
merci encore et BRAVO

 

Post a Comment

<< Home