Précédent   Forum du club des développeurs et IT Pro > Bases de données > Oracle > Import/Export
Import/Export Forum d'entraide sur les outils d'import/export Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 01/12/2011, 11h48   #1
Hobbi1
Nouveau Membre du Club
 
Inscription : septembre 2004
Messages : 215
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 215
Points : 37
Points : 37
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.
Hobbi1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/07/2012, 15h28   #2
Andrei_L
Membre régulier
 
Homme Andrei Litvinov
Administrateur de base de données
Inscription : 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 : 70
Points : 70
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.
Andrei_L est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 22h27.


 
 
 
 
Partenaires

Hébergement Web