Introduction

Dans une configuration dataguard il est intéressant d'utiliser la base standby pour procéder à un export. Ceci permet d'éviter une surcharge de la base primaire. Il faut toutefois différentier deux cas selon l'outil utilisé.

  • EXP : Déprécié certes mais encore très utilisé.
  • EXPDP : Datapump, la solution depuis la version 10g de Oracle

Une standby database est soit en mode recouvrement ( mount ) ou en read only ( Active Dataguard ). EXP peut fonctionner sur une base en read only, ce qui n'est pas le cas de EXPDP qui doit écrire dans une table de la base. Dans tous les cas il est nécessaire de stopper le processus MRP ( Apply ). Le billet suivant se base sur une version 12c de Oracle.

Arrêt du processus MRP

Se connecter sur la standby database et lancer la commande suivante :

alter database recover managed standby database cancel;

En cas de configuration broker, utiliser DGMGRL et la commande suivante :

edit database STDBY set state='APPLY-OFF';

Utilisation de EXP

Se connecter sur la standby database et lancer la commande suivante :

alter database open read only;

Procéder ensuite à l'export classique. Une fois l'export terminé réactiver le recouvrement.

shutdown immediate;
startup mount;

Réactiver MRP. Si le broker n'est pas utilisé, via SQL*Plus :

alter database recover managed standby database using current logfile disconnect;

Si le broker est en place via DGMGRL

edit database STDBY set state='APPLY-ON';

Utilisation de EXPDP ( Datapump )

La base standby doit être ouverte en mode read write. Il faut donc dans un premier temps la transformer en snapshot database. Il faut également activer le mode flashback ( Fast Recovery Area obligatoire ) et passer la gestion des fichiers en manuel. Se connecter à la standby et passer les commandes suivantes :

alter system set standby_file_management=manual;
alter database flashback on;
alter database convert to snapshot database;
alter database open;

A ce stade la base est en mode read write. Procéder à l'export via expdp. En fin d'exécution réactiver la standby database.

shutdown immediate;
startup mount;
alter system set standby_file_management=auto;
alter database flashback off;
alter database convert to physical standby;

La dernière étape est de réactiver le recouvrement. Si le broker n'est pas utilisé, via SQL*Plus :

alter database recover managed standby database using current logfile disconnect;

Si le broker est en place via DGMGRL

edit database STDBY set state='APPLY-ON';

Conclusion

Il existe une autre solution qui consiste à créer un database link depuis la base primaire vers la standby et de procéder à un export datapump via ce database link. Il y a toutefois un problème avec cette solution si la base utilise des champs LONG qui ne peuvent être exportés via un database link.