DATABASE LINK Oracle : Connexion entre bases de données

Apprenez à créer et utiliser un DATABASE LINK Oracle pour interroger des bases distantes. Syntaxe, exemples pratiques et erreurs courantes expliqués.

Illustration du tutoriel SQL Oracle : DATABASE LINK Oracle : Connexion entre bases de données

Publicité

🧪 Envie de pratiquer ? Exécutez les exemples de cet article dans notre SQL Playground gratuit — aucun logiciel à installer.

DATABASE LINK Oracle : Relier des bases de données distantes

Le DATABASE LINK Oracle est un objet de schéma qui permet à une instance Oracle de se connecter à une autre base de données distante, comme si elle était locale. Utilisé massivement dans les architectures distribuées en entreprise, le database link Oracle facilite l’échange de données entre systèmes hétérogènes sans duplication manuelle. Dans ce cours, vous apprendrez à le créer, l’utiliser et l’optimiser efficacement.

Définition et utilisation d’un DATABASE LINK

Un DATABASE LINK (ou DBLink) est un pointeur stocké dans la base de données locale qui définit un chemin d’accès vers une base de données distante Oracle (ou compatible via Oracle Heterogeneous Services). Il encapsule les informations de connexion : nom d’utilisateur, mot de passe et chaîne de connexion réseau (TNS).

Cas d’usage en entreprise

  • Consolidation de données : agréger des données issues de plusieurs filiales dans une base centrale de reporting.
  • Migration progressive : accéder à l’ancienne base pendant une migration en cours sans interrompre les applications.
  • Architecture SOA / microservices : interroger des référentiels partagés (clients, produits) hébergés sur des bases dédiées.
  • ETL allégé : alimenter un entrepôt de données sans outil tiers en utilisant des requêtes INSERT … SELECT via DBLink.

Il existe deux types de database links :

  • Privé : accessible uniquement par l’utilisateur qui l’a créé.
  • Public : accessible par tous les utilisateurs de la base locale (nécessite le privilège CREATE PUBLIC DATABASE LINK).

Syntaxe du DATABASE LINK Oracle

La syntaxe complète pour créer un database link Oracle est la suivante :

CREATE [PUBLIC] DATABASE LINK nom_du_lien
  CONNECT TO utilisateur_distant
  IDENTIFIED BY mot_de_passe
  USING 'chaine_de_connexion';

Explication des paramètres essentiels

ParamètreDescriptionObligatoire
PUBLICRend le lien accessible à tous les utilisateurs de la base localeNon
nom_du_lienNom logique du lien, utilisé dans les requêtes avec la notation @Oui
CONNECT TONom de l’utilisateur sur la base distanteOui (sauf lien courant)
IDENTIFIED BYMot de passe de l’utilisateur distantOui (sauf lien courant)
USINGAlias TNS ou chaîne Easy Connect vers la base distanteOui

Pour utiliser un database link dans une requête, on suffixe le nom de la table ou de la vue avec @nom_du_lien :

SELECT * FROM ma_table@nom_du_lien;

Privilèges requis :

  • CREATE DATABASE LINK pour un lien privé
  • CREATE PUBLIC DATABASE LINK pour un lien public

Exemples pratiques de DATABASE LINK Oracle

Exemple 1 – Interroger une base distante de facturation

Contexte : La base de données locale héberge les données RH. Une base distante FACTURATION_DB contient les factures clients. On souhaite croiser les deux sans déplacer les données.

-- Étape 1 : Créer le database link privé vers la base distante
CREATE DATABASE LINK lien_facturation
  CONNECT TO user_fact
  IDENTIFIED BY motdepasse_fact
  USING 'FACTURATION_DB';

-- Étape 2 : Interroger la table distante comme une table locale
SELECT
    f.numero_facture,
    f.montant_ht,
    f.date_emission,
    e.nom_employe
FROM
    factures@lien_facturation f   -- table distante via le DBLink
    JOIN employes e               -- table locale
      ON f.id_commercial = e.id_employe
WHERE
    f.date_emission >= ADD_MONTHS(SYSDATE, -3)
ORDER BY
    f.montant_ht DESC;

Dans cet exemple, Oracle exécute une jointure distribuée entre la table locale employes et la table distante factures. L’optimiseur Oracle gère automatiquement le transfert des données nécessaires.

Exemple 2 – Alimenter un entrepôt de données via DATABASE LINK

Contexte : Un entrepôt de données centralisé doit être alimenté chaque nuit avec les nouvelles commandes provenant de trois bases régionales. On crée un lien public pour partager l’accès entre les comptes ETL.

-- Création d'un lien public vers la base régionale Nord
CREATE PUBLIC DATABASE LINK lien_region_nord
  CONNECT TO user_etl_nord
  IDENTIFIED BY pwd_etl_n0rd
  USING '//srv-nord.entreprise.fr:1521/REGION_NORD';

-- Insertion des nouvelles commandes dans l'entrepôt local
INSERT INTO entrepot.commandes_centralisees (
    id_commande,
    id_client,
    date_commande,
    montant_total,
    region_source
)
SELECT
    c.id_commande,
    c.id_client,
    c.date_commande,
    c.montant_total,
    'NORD' AS region_source          -- colonne calculée pour traçabilité
FROM
    commandes@lien_region_nord c     -- source distante
WHERE
    c.date_commande = TRUNC(SYSDATE) -- uniquement les commandes du jour
    AND NOT EXISTS (                 -- éviter les doublons
        SELECT 1
        FROM entrepot.commandes_centralisees cc
        WHERE cc.id_commande = c.id_commande
    );

COMMIT;

La notation Easy Connect //hôte:port/service dans le paramètre USING évite de devoir déclarer un alias dans le fichier tnsnames.ora, ce qui simplifie la portabilité du script.

Publicité

Erreurs courantes avec les DATABASE LINK Oracle

ORA-02085 – Le database link se connecte à une base incorrecte

Message d’erreur :

ORA-02085: database link LIEN_FACTURATION connects to AUTRE_DB

Cause : Oracle vérifie que le paramètre DB_DOMAIN et le GLOBAL_NAME de la base distante correspondent au nom du lien. Si votre lien s’appelle LIEN_FACTURATION mais que la base distante se nomme FACTURATION.ENTREPRISE.FR, Oracle refuse la connexion lorsque le paramètre GLOBAL_NAMES = TRUE est activé.

Solution : Deux approches possibles :

  • Nommer le lien avec le nom global exact de la base distante : CREATE DATABASE LINK facturation.entreprise.fr ...
  • Désactiver temporairement la vérification côté session (déconseillé en production) : ALTER SESSION SET GLOBAL_NAMES = FALSE;
  • Désactiver globalement si la politique de sécurité le permet : ALTER SYSTEM SET GLOBAL_NAMES = FALSE;

Résumé des points clés

Point cléDétail
Objet OracleDATABASE LINK (DBLink)
RôleConnexion transparente vers une base de données distante
TypesPrivé (utilisateur seul) ou Public (tous les utilisateurs)
Syntaxe d’appeltable@nom_du_lien
Privilège requisCREATE [PUBLIC] DATABASE LINK
Connexion réseauVia alias TNS ou Easy Connect
Dictionnaire de donnéesDBA_DB_LINKS, ALL_DB_LINKS, USER_DB_LINKS
Erreur fréquenteORA-02085 liée au paramètre GLOBAL_NAMES

Bonnes pratiques Oracle

  1. Chiffrez les mots de passe : depuis Oracle 12c, les mots de passe des database links sont stockés chiffrés dans le dictionnaire. Vérifiez néanmoins que l’accès à SYS.LINK$ est restreint aux seuls DBA, car les liens stockent des credentials sensibles.
  2. Auditez et limitez les liens publics : préférez les liens privés autant que possible. Consultez régulièrement DBA_DB_LINKS pour identifier les liens obsolètes et révoquez-les avec DROP [PUBLIC] DATABASE LINK nom_du_lien; afin de réduire la surface d’attaque.

Aller plus loin

Pour approfondir votre maîtrise des objets Oracle et des architectures distribuées, nous vous recommandons ces ressources complémentaires disponibles sur courssql.com :

Sur le même thème

Un nouveau tutoriel SQL par semaine

Nous ne spammons pas ! Consultez notre politique de confidentialité pour plus d’informations.

Publicité

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Publicité