|
Membre régulier
 Andrei Litvinov Administrateur de base de données Inscription : avril 2012 Messages : 22 Détails du profil  Informations personnelles : Nom :  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.
|