p
u
b
l
i
c
i
t
é
publicité
  1. #1
    Membre régulier
    Inscrit en
    septembre 2004
    Messages
    310
    Détails du profil
    Informations forums :
    Inscription : septembre 2004
    Messages : 310
    Points : 78
    Points
    78

    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
    Administrateur de base de données
    Inscrit en
    avril 2012
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Russie

    Informations professionnelles :
    Activité : Administrateur de base de données
    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