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 :

Export de données de tables dans plusieurs dmp


Sujet :

Import/Export Oracle

  1. #1
    Membre habitué
    Inscrit en
    Septembre 2004
    Messages
    378
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 378
    Points : 130
    Points
    130
    Par défaut Export de données de tables dans plusieurs dmp
    Bonjour,

    J'ai un export qui utilisent DBMS_DATAPUMP dans un package, sous Oracle 10.
    Cela sert à extraire uniquement les données de plusieurs tables, donc
    Cet export génère un seul et unique fichier DUMP pour toutes les tables.

    Je voudrais savoir s'il est possible de générer dans le même job (pour ne pas rajouter de job d'export) un fichier DMP par table exportée.
    Et éventuellement, en plus, est-il possible de nommer le DMP comme on veut, avec le nom de la table dans le nom du fichier.

    Merci.

  2. #2
    Membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2012
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 22
    Points : 68
    Points
    68
    Par défaut
    Bonjour,
    Quand bien même on trouverait un moyen de exporter chaque table dans un fichier particulier, ce n'était pas utile pour rien, parce que on ne peut pas supprimer aucune des fichiers ou bien un import ne va pas réussir.

    Par exemple, il y a trois tables de tailles différentes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    column MB format  999999.0
     
    select table_name,
    num_rows * avg_row_len/1024/1024 "MB"
    from user_tables 
    where table_name like 'TABLE\__000000%' escape '\'
    order by table_name
    /
     
     
    TABLE_NAME                            MB
    ------------------------------ ---------
    TABLE_1000000                       79.5
    TABLE_2000000                      154.1
    TABLE_4000000                      318.1
    Un export:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    set serveroutput on size 100000
    declare
        V_DIRECTORY constant VARCHAR2(30) := 'DATA_PUMP_DIR';
        --
        V_HANDLE NUMBER;
        V_JOB_STATE VARCHAR2(400);
    begin
        V_HANDLE := dbms_datapump.open (operation => 'EXPORT', job_mode => 'TABLE', job_name => 'SEVERAL_FILES_EXP', version => 'COMPATIBLE');
        dbms_output.put_line( 'handle=' || V_HANDLE );
     
        dbms_datapump.add_file(handle => V_HANDLE, filename =>  'FILE_1.DMP', directory => V_DIRECTORY, filetype => dbms_datapump.KU$_FILE_TYPE_DUMP_FILE ); 
        dbms_datapump.add_file(handle => V_HANDLE, filename =>  'FILE_2.DMP', directory => V_DIRECTORY, filetype => dbms_datapump.KU$_FILE_TYPE_DUMP_FILE ); 
        dbms_datapump.add_file(handle => V_HANDLE, filename =>  'FILE_3.DMP', directory => V_DIRECTORY, filetype => dbms_datapump.KU$_FILE_TYPE_DUMP_FILE ); 
     
        dbms_datapump.add_file(handle => V_HANDLE, filename =>  'SEVERAL_FILES_EXPORT.LOG', directory => V_DIRECTORY, filetype => dbms_datapump.KU$_FILE_TYPE_LOG_FILE); 
        dbms_datapump.metadata_filter(handle => V_HANDLE, name => 'SCHEMA_EXPR', value => 'IN(''TEST'')'); 
        dbms_datapump.metadata_filter(handle=>V_HANDLE, name=>'NAME_EXPR', value=>  'IN(''TABLE_4000000'',''TABLE_2000000'',''TABLE_1000000'')');
     
        --Une séquence de l'export des tables n'est pas garantie! Le parallélisme n'est pas non plus.
        dbms_datapump.set_parallel(handle=>V_HANDLE, degree=> 4);
     
        dbms_datapump.start_job(handle => V_HANDLE, skip_current => 0, abort_step => 0); 
        dbms_datapump.wait_for_job(handle => V_HANDLE , job_state=> V_JOB_STATE ); 
        dbms_output.put_line( 'job_state= '|| V_JOB_STATE );
    end;
    /
     
    Procédure PL/SQL terminée avec succès.
    Supposons que nous connaissions quelle table est dans quel fichier.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    ls -lh
    -rw-r-----  1 oracle dba 336M Jul  9 10:51 FILE_1.DMP
    -rw-r-----  1 oracle dba 168M Jul  9 10:51 FILE_2.DMP
    -rw-r-----  1 oracle dba  85M Jul  9 10:51 FILE_3.DMP
    -rw-r--r--  1 oracle dba 1020 Jul  9 10:51 SEVERAL_FILES_EXPORT.LOG
    Supprimons des fichiers 'superflues'.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    rm FILE_1.DMP
    rm FILE_2.DMP
    Essayerons-nous importer la table la plus petite:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    set serveroutput on size 100000
    declare
    V_SOURCE_SCHEMA  CONSTANT  VARCHAR2(400):='TEST';
    V_TARGET_SCHEMA CONSTANT VARCHAR2(400) := 'TEST2';
    V_DIRECTORY CONSTANT VARCHAR2(400) := 'DATA_PUMP_DIR';
    --
    V_HANDLE NUMBER;
    V_JOB_STATE VARCHAR2( 400 );
    begin
        V_HANDLE := dbms_datapump.open (operation => 'IMPORT', job_mode => 'TABLE', job_name => 'IMP_SEVERAL_FILES');
        dbms_output.put_line( 'handle=' || V_HANDLE );
        dbms_datapump.metadata_remap(handle=> V_HANDLE ,name=> 'REMAP_SCHEMA' ,old_value=> V_SOURCE_SCHEMA ,value=> V_TARGET_SCHEMA ) ;
     
        dbms_datapump.add_file(handle => V_HANDLE, filename => 'FILE_3.DMP', directory => V_DIRECTORY, filetype=> dbms_datapump.KU$_FILE_TYPE_DUMP_FILE  ); 
        dbms_datapump.add_file(handle => V_HANDLE, filename => 'ONE_FILE_IMPORT.LOG', directory => V_DIRECTORY, filetype => dbms_datapump.KU$_FILE_TYPE_LOG_FILE); 
     
        dbms_datapump.metadata_filter(handle=>V_HANDLE, name=>'NAME_EXPR', value=>  'IN(''TABLE_1000000'')');
     
        dbms_datapump.start_job(handle => V_HANDLE, skip_current => 0, abort_step => 0); 
        dbms_datapump.wait_for_job( handle => V_HANDLE ,job_state=> V_JOB_STATE ); 
    end;
    /
     
    ERREUR à la ligne 1 :
    ORA-39002: opération non valide
    ORA-06512: à "SYS.DBMS_DATAPUMP", ligne 4882
    ORA-06512: à ligne 20
    C'est parce que l'import s'assure que tous les fichiers sont présentes.

Discussions similaires

  1. [AC-2002] Exporter des données XML à partir de plusieurs tables
    Par ChrisP dans le forum Access
    Réponses: 1
    Dernier message: 18/11/2013, 15h18
  2. Réponses: 3
    Dernier message: 07/04/2010, 18h27
  3. Réponses: 3
    Dernier message: 29/06/2007, 17h56
  4. Plusieurs Champs d'une même table dans plusieurs textebox
    Par cyberbiker dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 13/09/2006, 11h32
  5. mettre une table dans plusieurs tables
    Par mat75019 dans le forum Access
    Réponses: 5
    Dernier message: 16/06/2006, 11h46

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