Bonjour,
Je cherche à créer un process permettant d'exporter du DDL , genre un trigger ou une procédure ou une fonction, ou une vue) d'un serveur Oracle A sur un autre serveur B. Le transfert entre eux se fera par un fichier plat.
Voici le contenu du script shell qui extrait le DDL de la base du serveur A:
=>
set pagesize 0
set verify off
set long 90000
set feedback off
set echo off
define file='&1..sql'
spool &&file
SELECT DBMS_METADATA.GET_DDL( '&2.' , '&3.' ) FROM dual;
spool off;
exit;
/
=>
Note: il appelle les 3 paramètres suivants:
1: le nom du fichier
2: le type d'objet Oracle (TRIGGER, PROCEDURE, SEQUENCE,VUE,FUNCTION)
3: le nom
Voici le contenu du script shell qui importe le DDL dans la base du serveur B:
=>
sqlplus '&1.'/'&2.'#@'&3.' @'&4.'
=>
Note: il appelle les 4 paramètres suivants:
1: le nom du user
2: le mot de passe
3: le SID Oracle
4: le nom du fichier généré par le script précédent.
Mon problème est que la fonction dbms_metadata.get_dll récupère les DDL mais n'écrit que 80 caractères par ligne dans le fichier de sortie sans se soucier du découpage. Du coup, l'exécution du deuxième script sur le serveur B provoque des erreurs de compilation.
Avez-vous une idée?
Sinon, avez-vous procédé autrement pour atteindre l'objectif de transmettre des DDL d'un serveur à un autre?
Merci de votre aide.
Partager