+ Répondre à la discussion
Affichage des résultats 1 à 2 sur 2
  1. #1
    Membre du Club
    Inscrit en
    septembre 2004
    Messages
    278
    Détails du profil
    Informations forums :
    Inscription : septembre 2004
    Messages : 278
    Points : 65
    Points
    65

    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 Andrei Litvinov
    Administrateur de base de données
    Inscrit en
    avril 2012
    Messages
    22
    Détails du profil
    Informations personnelles :
    Nom : Homme Andrei Litvinov
    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 :
    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 :
    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 :
    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 :
    1
    2
    3
     
    rm FILE_1.DMP
    rm FILE_2.DMP
    Essayerons-nous importer la table la plus petite:
    Code :
    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.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •