Bonjour,
Je souhaite utiliser le package DBMS_DATAPUMP pour faire un export/import de tables.
Dans le cas où une table existe, je veux skipper cette table et donc la laisser telle quelle. Je sais que c'est le comportement par défaut du job d'export/import mais, si je le met dans mon script PL/SQL, ça plante...
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46 /* Programme PLSQL utilisant DBMS_DATAPUMP pour exporter des tables d'une base vers une autre. */ set serveroutput on set verify off set feedback off DECLARE v_n_h1 NUMBER; -- Data Pump job handle v_v_status VARCHAR2(20); BEGIN -- Creation d'un job Datapump pour exporter des tables. v_n_h1 := DBMS_DATAPUMP.OPEN('EXPORT','TABLE'); -- Ajout d'un fichier de log pour suivre la progression du traitement. DBMS_DATAPUMP.ADD_FILE(handle=>v_n_h1, filename=>'log_pump_exp_tables.log', directory=>'DIRPUMP', filesize=>NULL, filetype=>DBMS_DATAPUMP.ku$_file_type_log_file, reusefile=>1); -- Creation d'un fichier dump file. DBMS_DATAPUMP.ADD_FILE(handle=>v_n_h1,filename=>'deptpump.dmp',directory=>'DIRPUMP',reusefile=>1); -- Creation d'un filtre de metadonnes pour indiquer quelles tables seront exportees. DBMS_DATAPUMP.METADATA_FILTER(handle=>v_n_h1,name=>'NAME_EXPR',value=>q'|in ('DEPT','EMP','EVT') |',object_path=>'TABLE'); -- Filtre sur les donnees de la table DEPT et EMP a exporter. DBMS_DATAPUMP.DATA_FILTER(v_n_h1, 'SUBQUERY', 'WHERE deptno = 10 or deptno = 20', 'DEPT', 'USER01'); DBMS_DATAPUMP.DATA_FILTER(v_n_h1, 'SUBQUERY', 'WHERE sal > 2000', 'EMP', 'USER01'); -- Si une table de la base maitre existe deja dans la base cible, la table n'est pas importée. dbms_output.put_line('1'); DBMS_DATAPUMP.SET_PARAMETER(v_n_h1,'TABLE_EXISTS_ACTION','SKIP'); dbms_output.put_line('2'); -- Lancement du job. DBMS_DATAPUMP.START_JOB(v_n_h1); dbms_output.put_line('Job has completed'); dbms_datapump.detach(v_n_h1); END; /
Résultat de l'exécution sous SQL*Plus.
On voit bien que la trace '1' est affichée mais pas la trace '2', c'est donc bien au niveau de la fonction SET_PARAMETER qu'il y a un problème.
En outre le fichier de logs est vide...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 SQL> @SQL_PUMP_EXP_TABLES.sql 1 DECLARE * ERROR at line 1: ORA-39005: inconsistent arguments ORA-06512: at "SYS.DBMS_SYS_ERROR", line 79 ORA-06512: at "SYS.DBMS_DATAPUMP", line 3444 ORA-06512: at "SYS.DBMS_DATAPUMP", line 5365 ORA-06512: at line 36
Si je mets en commentaire l'appel à la procédure SET_PARAMETER, l'export est OK et voilà le contenu du fichier log.
Est-ce que quelqu'un pourrait me dire pourquoi ça plante?
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 Starting "USER01"."SYS_EXPORT_TABLE_03": Estimate in progress using BLOCKS method... Processing object type TABLE_EXPORT/TABLE/TABLE_DATA Total estimation using BLOCKS method: 192 KB Processing object type TABLE_EXPORT/TABLE/TABLE Processing object type TABLE_EXPORT/TABLE/INDEX/INDEX Processing object type TABLE_EXPORT/TABLE/CONSTRAINT/CONSTRAINT Processing object type TABLE_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS Processing object type TABLE_EXPORT/TABLE/CONSTRAINT/REF_CONSTRAINT Processing object type TABLE_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS . . exported "USER01"."DEPT" 5.898 KB 2 rows . . exported "USER01"."EMP" 8.242 KB 6 rows . . exported "USER01"."EVT" 5.031 KB 3 rows Master table "USER01"."SYS_EXPORT_TABLE_03" successfully loaded/unloaded ****************************************************************************** Dump file set for USER01.SYS_EXPORT_TABLE_03 is: /u01/app/oracle/oradata/DIRPUMP/deptpump.dmp Job "USER01"."SYS_EXPORT_TABLE_03" successfully completed at 12:36:26
Par avance un gros merci
[RESOLU]
ca y est, j'ai trouvé, le paramètre "TABLE_EXISTS_ACTION" n'est valable que pour l'Import et pas pour l'export
http://docs.oracle.com/cd/B28359_01/...p.htm#BABEDDCF :
Table 40-23 Valid Options for the name Parameter in the SET_PARAMETER Procedure
Parameter Name Datatype Supported Operations
TABLE_EXISTS_ACTION Text Import
Partager