Présentation

Les tablespaces transportables représentent le moyen le plus rapide pour copier des données d'une base RED vers une base BLACK. Il faut toutefois respecter un certain nombres de contraintes.

Capture.png

Les tablespaces transportables existent depuis la version 8i de Oracle. A l'origine on utilisait exp et imp dans un certain mode. Depuis la 10g Oracle préconise d'utiliser data pump ce qui sera montré ici. Le principe est :

  • Exporter les méta-données
  • Copier les fichiers de données
  • Importer les méta-données

Contraintes à respecter

Les tablespaces doivent être en read only.

Les blocs Oracle des tablespaces dans la base cible et source doivent avoir la même taille. Ce n'est pas un problème en 10/11g car il est possible d'utiliser toutes les tailles de blocs.

Pour qu'un tablespace puisse être transporté, il doit contenir tous les objets interdépendants. On ne pourra pas transporter un tablespace qui contient une table dont les index seraient dans un autre tablespace.

Les bases de données source et cible doivent être sur des plateformes identiques, impossible donc de transporter un tablespace d'un serveurLinux à un serveur Windows.

La source et la cible doivent utiliser le même jeu de caractère (character set et national character set).

Les tablespaces transportables ne supportent pas : les vues matérialisés et les index de function

Un tablespace de la base source ne peut avoir le même nom qu'un tablespace de la base cible.

Mise en place

L'exemple suppose que RED et BLACK sont sur le même serveur, ceci n'est pas obligatoire. Il importe que le user data pump soit bien définit sur les deux bases.

Vérifier que le tablespace est transportable, action sur la base RED.

SQL> execute DBMS_TTS.TRANSPORT_SET_CHECK ('DATA_ALICE',TRUE);
SQL> SELECT * FROM TRANSPORT_SET_VIOLATIONS;

Cette requête doit ne retourner aucune ligne.

Mettre le tablespace en read-only

SQL> alter tablespace data_alice read only ;

Lancer l'export depuis RED des meta-données.

expdp userid=dp/dp@red directory=dpump dumpfile=alice_data_red.dmp logfile=alice_data_red.expdp.log transport_tablespaces=data_alice transport_full_check=y

Copier le datafile du tablespace ALICE_DATA vers BLACK, ainsi que le fichier alice_data_red.dmp.

cp /u01/app/oracle/oradata/RED/dpump/alice_data_red.dmp /u01/app/oracle/oradata/BLACK/dpump/alice_data_red.dmp
cp /u01/app/oracle/oradata/RED/data_alice_01.dbf  /u01/app/oracle/oradata/BLACK/data_alice_01.dbf

Importer les meta-données dans BLACK

impdp userid=dp/dp@black directory=dpump dumpfile=alice_data_red.dmp logfile=alice_data_blue.impdp.log transport_datafile='/u01/app/oracle/oradata/BLACK/data_alice_01.dbf' keep_master=y

Très important en fin de procédure remettre le tablespace DATA_ALICE en read write.