IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Import/Export Oracle Discussion :

exp/imp DDL(TRIGGER,PROC,Func) via fichier plat


Sujet :

Import/Export Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Août 2010
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 19
    Par défaut exp/imp DDL(TRIGGER,PROC,Func) via fichier plat
    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.

  2. #2
    Rédacteur

    Homme Profil pro
    Consultant / formateur Oracle et SQL Server
    Inscrit en
    Décembre 2002
    Messages
    3 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant / formateur Oracle et SQL Server

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 461
    Par défaut
    DBMS_METADATA.GET_DDL renvoie un CLOB, qui peut potentiellement faire des milliards de caractères.
    Or SQL*Plus n'affiche que le nombre de caractères défini par l'attribut LONG, 80 par défaut.

    Il suffit de fixer une valeur suffisante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SET LONG 10000
    EXEC DBMS_METADATA...

  3. #3
    Membre averti
    Inscrit en
    Août 2010
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 19
    Par défaut
    Bonjour,
    c'est déjà ce que j'ai déclaré en ligne 3 du script d'extract:
    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;
    /

  4. #4
    Rédacteur

    Homme Profil pro
    Consultant / formateur Oracle et SQL Server
    Inscrit en
    Décembre 2002
    Messages
    3 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant / formateur Oracle et SQL Server

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 461
    Par défaut
    Chez moi votre code fonctionne très bien, la sortie n'est absolument pas tronquée...

    En quelle version d'Oracle êtes-vous, et sous quel OS ?

  5. #5
    Membre averti
    Inscrit en
    Août 2010
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 19
    Par défaut
    Citation Envoyé par Pomalaix Voir le message
    Chez moi votre code fonctionne très bien, la sortie n'est absolument pas tronquée...

    En quelle version d'Oracle êtes-vous, et sous quel OS ?
    Bonjour, Je ne suis pas à mon poste aujourd'hui mais demain mercredi.
    De tête, j'utilise Oracle 10 quelquechose sur Linux RedHat.
    mes scripts shell sont exécutés directement sur le serveur Linux.
    Cordialement,

  6. #6
    Membre chevronné
    Avatar de argoet
    Inscrit en
    Mai 2002
    Messages
    582
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 582
    Par défaut
    Citation Envoyé par Pomalaix Voir le message
    Chez moi votre code fonctionne très bien, la sortie n'est absolument pas tronquée...

    En quelle version d'Oracle êtes-vous, et sous quel OS ?
    Idem +1

  7. #7
    Membre averti
    Inscrit en
    Août 2010
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 19
    Par défaut
    Désolé pour le retard,
    la version d'Oracle est:

    Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bi

    La version de l'OS sur lequel j'execute le script A pour extraire les données et générer un fichier plat est:

    Linux cyclonus 2.6.18-164.el5 #1 SMP Tue Aug 18 15:51:48 EDT 2009 x86_64 x86_64 x86_64 GNU/Linux

    j'utilise mons script à travers putty (en ligne de commande).
    J'y ai rajouté un set linesize 200 mais cela ne change pas le problème.
    Je suis toujours limité à 80 colonnes.

Discussions similaires

  1. executer ma Proc. Stockée via jbuilder
    Par LeNeutrino dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 24/03/2006, 12h18
  2. Conversion en pdf via fichier postscript
    Par XENOPHON dans le forum Erreurs - Avertissements
    Réponses: 3
    Dernier message: 21/01/2006, 19h04
  3. [EXP/IMP] : windows/linux
    Par PpPool dans le forum Oracle
    Réponses: 2
    Dernier message: 18/05/2005, 15h39
  4. upgrade de Oracle 8i à Oracle 9i avec EXP/IMP
    Par ishraam dans le forum Oracle
    Réponses: 2
    Dernier message: 19/03/2005, 20h55
  5. [Oracle 8.0.5] EXP/IMP avec les tablespace
    Par bobunny dans le forum Import/Export
    Réponses: 3
    Dernier message: 19/10/2004, 14h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo