Copier une table Oracle sans dblink

Il est fréquent de vouloir copier une table de production en environnement de recette ou de développement pour effectuer des tests. La solution la plus simple est d’utiliser les dblinks qui font les passerelles entre différentes instances.
Cependant les dblinks n’existent pas toujours, car les environnements sont isolés / ne se voient pas ou car les DBA ont interdit cette fonctionnalité.

Donc pour copier des données il reste comme possibilités :

  • créer les ordres INSERT INTO, Toad le fait très bien ( via un Save as … ), mais quand il faut copier des tables de milliers de lignes on peut passer la journée :p
  • passer par des export/import, mais généralement ces outils sont réservés aux DBA …

Un autre utilitaire existe depuis Oracle 9i, la commande copy sous Sql*Plus.

La syntaxe est la suivante :

copy from <cnxsrc> insert <tabdst> using select <col> from <tabsrc>;

ordre SQL à lancer sur l’instance de destination, où

<cnxsrc> = la connexion source
<tabdst> = table de destination
<col>    = les colonnes
<tabsrc> = table source ( sur la source )

Exemple :
copy from userprod/pwdprod@prod insert dwh.ventes using select * from dwh.ventes;
récupérer les données de la table ventes de prod en dev

Sortie:

Taille tableau extrait/lié est 15. (taille du tableau est 15)
Sera validé après opération. (COPYCOMMIT = 0)
Taille maximum (LONG) est 80. (longueur est 80)
   371225 lignes sélectionnées à partir de userprod@prod.
   371225 lignes insérées dans DWH.VENTES.
   371225 lignes validées en DWH.VENTES lors de la connexion DEFAULT HOST

Remarques :

  • le commit est automatique
  • à lancer sous Sql*Plus, ça ne marche pas sous Toad :(
  • il faut préciser les colonnes dans le select si la structure est différente
  • il faut ajouter des – en fin de ligne si on est sur plusieurs lignes

Exemple :

copy from userprod/pwdprod@prod -
insert dwh.ventes using -
select * from dwh.ventes;

Voir la doc Oracle pour plus d’infos comdab ;)

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée.

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>