Effectuer un export / import (Datapump) via un Database Link

Datapump est le nouvel outil fournit par Oracle depuis la 10g pour réaliser vos import / export de données de vos bases.

Pour une utilisation classique de Datapump, je vous conseille l’article de mon collègue Guireg Capitaine qui répondra parfaitement à vos attentes.

Ici nous apprendrons à réaliser des exports / imports à la volée directement via le réseau en utilisant un DB Link (Database Link).

Avantages et inconvénients

Lorsque l’on parle d’import/export Datapump via un DB Link, on parle en fait de la seule étape du processus : l’import. En effet, en utilisant cette méthode vous n’aurez plus besoin de faire dans un premier temps l’export, puis de déplacer votre dump sur le deuxième serveur, et enfin faire votre import. Toutes les étapes se font en une seule comme vous le découvrirez un peu plus loin.

Passer par le réseau vous dispense donc de créer des objets DIRECTORY pour stocker vos dumps, ainsi que d’avoir l’espace disque nécessaire pour les accueillir.

Cependant il faut comprendre que si vous utiliser le réseau pour réaliser vos imports/exports, vous allez avoir besoin d’une bonne connexion entre vos deux serveurs. Sinon, vous perdrez le gain de temps que vous aviez gagné précédemment.

Utilisation

L’environnement : Nous avons une base source nommée ISEC sur notre serveur ESXI-OEL5-ORA01 et une base cible LABO sur le serveur ESXI-OEL5-ORA02. Notre but sera d’exporter le schéma JOHN de la base ISEC vers la base LABO.

L’ensemble des opérations ci-dessous se déroulent sur le serveur cible, celui sur lequel nous voulons importer nos données.

La première étape consiste à créer le DB Link de notre base cible (LABO) vers notre base source (ISEC). Pour cela vous allez avoir besoin de créer une entrée dans votre TNSNAMES ($ORACLE_HOME/network/admin/tnsnames.ora) :

ISEC =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = ESXI-OEL5-ORA01)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = ISEC)
    )
  )

Vous pouvez tester votre TNSNAMES avant de créer le DB Link :

$ tnsping ISEC
... OK (20 msec)

On va maintenant créer le Database Link sur la base cible (LABO) :

SYS@LABO> CREATE DATABASE LINK duplicate_isec CONNECT TO system IDENTIFIED BY oracle USING 'ISEC';

Voilà tout est prêt pour réaliser notre import. Notre objectif est d’importer le schéma JOHN de la base source (ISEC) sur notre base cible (LABO) :

SYS@LABO> SELECT username FROM dba_users WHERE username = 'JOHN'
aucune ligne selectionnee
SYS@LABO> SELECT username FROM dba_users@duplicate_isec WHERE username = 'JOHN';
USERNAME
------------------------------
JOHN

Depuis un terminal, lancez l’import en précisant les options NETWORK_LINK et SCHEMAS :

$ impdp "'/ AS SYSDBA'" NETWORK_LINK=duplicate_isec schemas=john
...
L'execution du travail "SYS"."SYS_IMPORT_SCHEMA_01" a abouti a 10:56:40

Et voilà ! Sans export, et directement depuis la base cible, vous avez réussi à importer des données depuis une base distante ! C’est beau Oracle non ? :)

Si vous avez du mal à y croire, je vous invite à relancer la requête présentée plus haut :

SYS@LABO> SELECT username FROM dba_users WHERE username = 'JOHN';
USERNAME
------------------------------
JOHN

Notre schéma a bel et bien été importé !

Conclusion

L’import / export Datapump via un DB Link est assez impressionnant et peux vous faire gagner un temps précieux. Attention cependant à ne pas utiliser Datapump comme outil de sauvegarde. L’import / export est utile lorsque vous devez rafraichir quelques données, ou quand vous avez seulement certains objets à déplacer. Si vous voulez une vraie solution de duplication, RMAN est votre ami (voir l’article sur la duplication d’une base Oracle via RMAN).

One Response to “Effectuer un export / import (Datapump) via un Database Link”

  • dllinf

    est ce que cet import peut ce faire d’une base 9i vers 11g

    Répondre
  • Laisser un commentaire