I. Qu'est-ce que le Datapump▲
Le datapump est l'utilitaire qui permet d'effectuer des exports et des imports sous Oracle depuis la 10g. Oracle prévoit clairement de supprimer les anciens utilitaires EXP et IMP.
Ils ne doivent actuellement leur salut qu'à la nécessité d'assurer la compatibilité avec les anciennes versions d'Oracle.
Donc DATAPUMP n'est pas compatible avec les anciennes versions d'exports et d'imports.
II. Nouveauté du DataPump▲
Tout d'abord le nouveau datapump peut être appelé par deux voies différentes :
- soit par les binaires expdp et impdp que l'on trouve dans le répertoire suivant :
$ cd $ORACLE_HOME/bin
$ ll *pdp
-rwxr-x--x 1 oracle10 oinstall 222448 Jun 28 17:53 expdp
-rwxr-x--x 1 oracle10 oinstall 223928 Jun 28 17:53 impdp
- soit via le package SYS.DBMS_DATAPUMP.
Pour avoir un descriptif du package ( sous Sql*Plus) :
SQL> desc dbms_datapump
PROCEDURE ADD_DEVICE
Nom d'argument Type E/S par défaut ?
------------------------------ ----------------------- ------ --------
HANDLE NUMBER IN
DEVICENAME VARCHAR2 IN
VOLUMESIZE VARCHAR2 IN DEFAULT
PROCEDURE ADD_FILE
Nom d'argument Type E/S par défaut ?
------------------------------ ----------------------- ------ --------
HANDLE NUMBER IN
(…)
- Il existe des nouveautés en 10g uniquement supportées par DATAPUMP et non pas par l'export classique d'Oracle, je pense notamment au scheduler nouvelle version d'Oracle : DBMS_ SCHEDULER.
- Nous pouvons envisager le parallélisme avec le DATAPUMP.
- En outre il est également possible d'avoir plusieurs destinations pour un seul job de DATAPUMP, et de lui ajouter des répertoires de destination alors que le DATAPUMP est en cours.
- Il est possible d'arrêter et de reprendre un job en cours, si par exemple vous constatez que celui-ci consomme énormément de ressources et que vous êtes en période de charge.
- Puisque Datapump travaille avec des répertoires et des packages, il est possible maintenant de faire des exports/Imports sans pour autant surcharger le réseau.
- Il est possible, lorsque nous couplons DBMS_METADATA et DataPump d'exporter la structure des objets, de les renommer… ;
- DataPump peut être suivi lorsqu'il est en cours d'exécution, permettant ainsi via la vue V$SESSION_LONGOPS, d'avoir une idée du travail effectué et de connaître la somme de travail restant à fournir.
- DataPump peut également travailler avec les tables externes.
- Il n'est plus possible de travailler en chemin Direct, de modifier le paramètre Buffer ou de programmer des points de validation (COMMIT) : Export-Import en mode direct.
- On a maintenant la possibilité d'inclure ou d'exclure certains objets grâce aux arguments INCLUDE ou EXCLUDE.
III. Prérequis et recommandations▲
Pour se servir du datapump, assurez-vous bien que vous ayez les droits suivants : IMP_FULL_DATABASEEtEXP_FULL_DATABASEIl est important de savoir que ces privilèges donnent la possibilité de voir toutes les données de la base entière. Le fait de créer un dossier peut être une faille de sécurité en fonction des droits attribués. Il existe des vues DBA qui vous seront utiles lors d'administration et de l'exploitation de datapump.
- DBA_DATAPUMP_JOB : montre tous les jobs actifs de DataPump ainsi que leur statut.
- DBA_DATAPUMP_SESSIONS : nous renseigne sur les sessions d'utilisateurs attachés à un job de DataPump.
- V$SESSION_LONGOPS : nous renseigne sur l'avancement du job.
- V$DATAPUMP_JOB : nous renseigne également, avec quelques paramètres en plus, sur les jobs Datapump, notamment sur les attentes (enqueue).
IV. Export - Import▲
IV-A. Export▲
IV-A-1. Préparation de l'export▲
Avant de pouvoir lancer l'export et l'import sous Oracle, nous allons détailler la phase de préparation.
Il s'agit d'abord de créer l'utilisateur et de lui donner les bons droits, pour notre exemple.
SQL> create user dvp identified by dvp ;
Utilisateur créé.
SQL> grant connect,resource to dvp;
Autorisation de privilèges (GRANT) acceptée.
SQL> grant exp_full_database to dvp ;
Autorisation de privilèges (GRANT) acceptée.
Ici nous avons créé un utilisateur DVP avec les droits nécessaires pour l'export.
Création de la table à exporter :
SQL> create table dvp ( a number ) ;
Table créée.
SQL> insert into dvp values (1) ;
1 ligne créée.
SQL> insert into dvp values (2) ;
1 ligne créée.
SQL> insert into dvp values (3);
1 ligne créée.
SQL> insert into dvp values (4) ;
1 ligne créée.
SQL> insert into dvp values (5) ;
1 ligne créée.
SQL> commit ;
Validation effectuée.
Il faut également créer un répertoire dans lequel Oracle va stocker non seulement le fichier DMP, mais également les différents fichiers (notamment le LOG).
Ce répertoire doit non seulement être créé physiquement par une commande système, mais également logiquement sous Oracle.
Commande Unix de création de répertoires :
$ mkdir datapump
Ensuite, créer le répertoire pour Oracle :
SQL> create directory datapump as '/ora/admin/dba/datapump' ;
Directory created.
Donner les droits à l'utilisateur afin que celui puisse lire et écrire sur le répertoire.
SQL> grant read, write on directory datapump to DVP ;
Grant succeeded.
Comment voir les répertoires déjà créés :
SQL> set linesize 250
SQL> col directory_path format a20
SQL> r
1* select * from dba_directories
OWNER DIRECTORY_NAME DIRECTORY_PATH
------------------------------ ------------------------------ --------------------
SYS DATAPUMP /ora/admin/dba/datapump
Avoir l'aide en ligne de datapump : cela repose sur le même principe que l'export :
$ expdp help=y
Export: Release 10.1.0.2.0 - 64bit Production on Tuesday, 27 September, 2005 17:14
Copyright (c) 2003, Oracle. All rights reserved.
The Data Pump export utility provides a mechanism for transferring data objects
between Oracle databases. The utility is invoked with the following command:
Example: expdp scott/tiger DIRECTORY=dmpdir DUMPFILE=scott.dmp
You can control how Export runs by entering the 'expdp' command followed
by various parameters. To specify parameters, you use keywords:
Format: expdp KEYWORD=value or KEYWORD=(value1,value2,...,valueN)
Example: expdp scott/tiger DUMPFILE=scott.dmp DIRECTORY=dmpdir SCHEMAS=scott
or TABLES=(T1:P1,T1:P2), if T1 is partitioned table
USERID must be the first parameter on the command line.
Keyword Description (Default)
------------------------------------------------------------------------------
ATTACH Attach to existing job, e.g. ATTACH [=job name].
CONTENT Specifies data to unload where the valid keywords are:
(ALL), DATA_ONLY, and METADATA_ONLY.
DIRECTORY Directory object to be used for dumpfiles and logfiles.
DUMPFILE List of destination dump files (expdat.dmp),
e.g. DUMPFILE=scott1.dmp, scott2.dmp, dmpdir:scott3.dmp.
ESTIMATE Calculate job estimates where the valid keywords are:
(BLOCKS) and STATISTICS.
ESTIMATE_ONLY Calculate job estimates without performing the export.
EXCLUDE Exclude specific object types, e.g. EXCLUDE=TABLE:EMP.
FILESIZE Specify the size of each dumpfile in units of bytes.
FLASHBACK_SCN SCN used to set session snapshot back to.
FLASHBACK_TIME Time used to get the SCN closest to the specified time.
FULL Export entire database (N).
HELP Display Help messages (N).
INCLUDE Include specific object types, e.g. INCLUDE=TABLE_DATA.
JOB_NAME Name of export job to create.
LOGFILE Log file name (export.log).
NETWORK_LINK Name of remote database link to the source system.
NOLOGFILE Do not write logfile (N).
PARALLEL Change the number of active workers for current job.
PARFILE Specify parameter file.
QUERY Predicate clause used to export a subset of a table.
SCHEMAS List of schemas to export (login schema).
STATUS Frequency (secs) job status is to be monitored where
the default (0) will show new status when available.
TABLES Identifies a list of tables to export - one schema only.
TABLESPACES Identifies a list of tablespaces to export.
TRANSPORT_FULL_CHECK Verify storage segments of all tables (N).
TRANSPORT_TABLESPACES List of tablespaces from which metadata will be unloaded.
COMPRESSION Réduction de la taille du contenu du fichier de vidage, les mots-clés valides étant : (METADATA_ONLY) et NONE.
ENCRYPTION_PASSWORD Clé de mot de passe pour la création de données de colonnes cryptées.
VERSION Version of objects to export where valid keywords are:
(COMPATIBLE), LATEST, or any valid database version.
The following commands are valid while in interactive mode.
Note: abbreviations are allowed
Command Description
------------------------------------------------------------------------------
ADD_FILE Add dumpfile to dumpfile set.
ADD_FILE=<dirobj:>dumpfile-name
CONTINUE_CLIENT Return to logging mode. Job will be re-started if idle.
EXIT_CLIENT Quit client session and leave job running.
HELP Summarize interactive commands.
KILL_JOB Detach and delete job.
PARALLEL Change the number of active workers for current job.
PARALLEL=<number of workers>.
START_JOB Start/resume current job.
STATUS Frequency (secs) job status is to be monitored where
the default (0) will show new status when available.
STATUS=[interval]
STOP_JOB Orderly shutdown of job execution and exits the client.
STOP_JOB=IMMEDIATE performs an immediate shutdown of the
Data Pump job.
IV-A-2. La commande d'export▲
Ici nous allons exporter une petite table dans le but d'avoir une illustration de nos propos.
$ expdp dvp/dvp tables=dvp.dvp DIRECTORY=datapump DUMPFILE=dvp.dump LOGFILE=dvp.log
Export: Release 10.1.0.2.0 - 64bit Production on Tuesday, 27 September, 2005 17:36
Copyright (c) 2003, Oracle. All rights reserved.
Connected to: Oracle Database 10g Enterprise Edition Release 10.1.0.2.0 - 64bit Production
With the Partitioning, OLAP and Data Mining options
Starting "DVP"."SYS_EXPORT_TABLE_01": dvp/******** tables=dvp.dvp DIRECTORY=datapump DUMPFILE=dvp.dump LOGFILE=dvp.log
Estimate in progress using BLOCKS method...
Processing object type TABLE_EXPORT/TABLE/TBL_TABLE_DATA/TABLE/TABLE_DATA
Total estimation using BLOCKS method: 64 KB
Processing object type TABLE_EXPORT/TABLE/TABLE
. . exported "DVP"."DVP" 4.937 KB 5 rows
Master table "DVP"."SYS_EXPORT_TABLE_01" successfully loaded/unloaded
******************************************************************************
Dump file set for DVP.SYS_EXPORT_TABLE_01 is:
/ora/data/SAGE/admin/datapump/dvp.dump
Job "DVP"."SYS_EXPORT_TABLE_01" successfully completed at 17:36
il est possible de spécifier le répertoire et le fichier dans le DUMPFILE ainsi : Dumpfile=directory :file_name
Ce qui donne :
dumpfile=datapump:dvp.dump
Nous avons ici la taille exportée en nombre de lignes, mais également en KB. Ces informations sont reprises dans le fichier Log si ce dernier est paramétré.
Pendant que le datapump tourne, on peut le surveiller via la vue DBA_DATAPUMP_JOBS :
1* SELECT * FROM DBA_DATAPUMP_JOBS
OWNER_NAME JOB_NAME OPERATION JOB_MODE STATE DEGREE ATTACHED_S
------------------------------ ------------------------------ ------------------------------ -------
DVP SYS_EXPORT_TABLE_01 EXPORT TABLE DEFINING
Voir les travaux exécutés ou en cours d'exécution :
1* SELECT sid, serial# , sofar , totalwork , start_time , ELAPSED_SECONDS FROM v$session_longops ;
SID SERIAL# SOFAR TOTALWORK START_TIME ELAPSED_SECONDS
---------- ---------- ---------- ---------- ------------------- ---------------
162 3 28 28 27/09/2005 10:12:18 3
La vue Database_export_objects, ainsi que les vues annexes (schéma et Tables) permettent de voir quels sont les objets que l'on peut exporter.
IV-B. Import▲
IV-B-1. Préparation l'import▲
Ici cela consiste tout simplement à dropper la table pour pouvoir la recréer, mais également à donner les droits nécessaires.
Sous le user DVP :
SQL> show user
USER est "DVP"
SQL> select * from dvp ;
A
----------
1
2
3
4
5
SQL> drop table dvp ;
Table supprimée.
SQL> select * from dvp ;
select * from dvp
*
ERREUR à la ligne 1 :
ORA-00942: table or view does not exist
Sous le user system :
SQL> show user ;
USER est "SYSTEM"
SQL> grant imp_full_database to dvp ;
Autorisation de privilèges (GRANT) acceptée.
IV-B-2. Import▲
Pour obtenir les différents paramètres de l'outil, il suffit de taper :
$ impdp help=y
Import: Release 10.1.0.2.0 - Production on Tue Sep 27 18:26:43 2005
Copyright (c) 1982, 2004, Oracle. All rights reserved.
The Data Pump Import utility provides a mechanism for transferring data objects
between Oracle databases. The utility is invoked with the following command:
Example: impdp scott/tiger DIRECTORY=dmpdir DUMPFILE=scott.dmp
You can control how Import runs by entering the 'impdp' command followed
by various parameters. To specify parameters, you use keywords:
Format: impdp KEYWORD=value or KEYWORD=(value1,value2,...,valueN)
Example: impdp scott/tiger DIRECTORY=dmpdir DUMPFILE=scott.dmp
USERID must be the first parameter on the command line.
Keyword Description (Default)
------------------------------------------------------------------------------
ATTACH Attach to existing job, e.g. ATTACH [=job name].
CONTENT Specifies data to load where the valid keywords are:
(ALL), DATA_ONLY, and METADATA_ONLY.
DIRECTORY Directory object to be used for dump, log, and sql files.
DUMPFILE List of dumpfiles to import from (expdat.dmp),
e.g. DUMPFILE=scott1.dmp, scott2.dmp, dmpdir:scott3.dmp.
ESTIMATE Calculate job estimates where the valid keywords are:
(BLOCKS) and STATISTICS.
EXCLUDE Exclude specific object types, e.g. EXCLUDE=TABLE:EMP.
FLASHBACK_SCN SCN used to set session snapshot back to.
FLASHBACK_TIME Time used to get the SCN closest to the specified time.
FULL Import everything from source (Y).
HELP Display help messages (N).
INCLUDE Include specific object types, e.g. INCLUDE=TABLE_DATA.
JOB_NAME Name of import job to create.
LOGFILE Log file name (import.log).
NETWORK_LINK Name of remote database link to the source system.
NOLOGFILE Do not write logfile.
PARALLEL Change the number of active workers for current job.
PARFILE Specify parameter file.
QUERY Predicate clause used to import a subset of a table.
REMAP_DATAFILE Redefine datafile references in all DDL statements.
REMAP_SCHEMA Objects from one schema are loaded into another schema.
REMAP_TABLESPACE Tablespace object are remapped to another tablespace.
REUSE_DATAFILES Tablespace will be initialized if it already exists (N).
SCHEMAS List of schemas to import.
SKIP_UNUSABLE_INDEXES Skip indexes that were set to the Index Unusable state.
SQLFILE Write all the SQL DDL to a specified file.
STATUS Frequency (secs) job status is to be monitored where
the default (0) will show new status when available.
STREAMS_CONFIGURATION Enable the loading of Streams metadata
TABLE_EXISTS_ACTION Action to take if imported object already exists.
Valid keywords: (SKIP), APPEND, REPLACE and TRUNCATE.
TABLES Identifies a list of tables to import.
TABLESPACES Identifies a list of tablespaces to import.
TRANSFORM Metadata transform to apply (Y/N) to specific objects.
Valid transform keywords: SEGMENT_ATTRIBUTES and STORAGE.
ex. TRANSFORM=SEGMENT_ATTRIBUTES:N:TABLE.
TRANSPORT_DATAFILES List of datafiles to be imported by transportable mode.
TRANSPORT_FULL_CHECK Verify storage segments of all tables (N).
TRANSPORT_TABLESPACES List of tablespaces from which metadata will be loaded.
Only valid in NETWORK_LINK mode import operations.
VERSION Version of objects to export where valid keywords are:
(COMPATIBLE), LATEST, or any valid database version.
Only valid for NETWORK_LINK and SQLFILE.
The following commands are valid while in interactive mode.
Note: abbreviations are allowed
Command Description (Default)
------------------------------------------------------------------------------
CONTINUE_CLIENT Return to logging mode. Job will be re-started if idle.
EXIT_CLIENT Quit client session and leave job running.
HELP Summarize interactive commands.
KILL_JOB Detach and delete job.
PARALLEL Change the number of active workers for current job.
PARALLEL=.
START_JOB Start/resume current job.
START_JOB=SKIP_CURRENT will start the job after skipping
any action which was in progress when job was stopped.
STATUS Frequency (secs) job status is to be monitored where
the default (0) will show new status when available.
STATUS=[interval]
STOP_JOB Orderly shutdown of job execution and exits the client.
STOP_JOB=IMMEDIATE performs an immediate shutdown of the
Data Pump job.
Nous lançons la commande :
$ impdp dvp/dvp tables=dvp.dvp DIRECTORY=datapump DUMPFILE=dvp.dump LOGFILE=dvp.log
Import: Release 10.1.0.2.0 - 64bit Production on Tuesday, 27 September, 2005 18:31
Copyright (c) 2003, Oracle. All rights reserved.
Connected to: Oracle Database 10g Enterprise Edition Release 10.1.0.2.0 - 64bit Production
With the Partitioning, OLAP and Data Mining options
Master table "DVP"."SYS_IMPORT_TABLE_01" successfully loaded/unloaded
Starting "DVP"."SYS_IMPORT_TABLE_01": dvp/******** tables=dvp.dvp DIRECTORY=datapump DUMPFILE=dvp.dump LOGFILE=dvp.log
Processing object type TABLE_EXPORT/TABLE/TABLE
Processing object type TABLE_EXPORT/TABLE/TBL_TABLE_DATA/TABLE/TABLE_DATA
. . imported "DVP"."DVP" 4.937 KB 5 rows
Job "DVP"."SYS_IMPORT_TABLE_01" successfully completed at 18:32
Nous vérifions que l'import a bien eu lieu :
SQL> r
1* select * from dvp
A
----------
1
2
3
4
5
SQL>
Et tout comme l'export nous pouvons vérifier le job durant son exécution.
SQL> SELECT * FROM DBA_DATAPUMP_JOBS ;
OWNER_NAME JOB_NAME OPERATION JOB_MODE STATE DEGREE ATTACHED_S
------------------------------ ------------------------------ ------------------------------ -------
DVP SYS_IMPORT_TABLE_01 IMPORT TABLE DEFINING 1
V. DATAPUMP FAQ▲
V-A. Export FAQ▲
V-A-1. Comment paralléliser l'export▲
expdp dvp/dvp tables=dvp.dvp DIRECTORY=datapump DUMPFILE=dvp.dump LOGFILE=dvp.log parallel=2
Nous pouvons voir le degré de parallélisme en nous appuyant sur la table DBA_DATAPUMP_JOBS.
1* SELECT * FROM DBA_DATAPUMP_JOBS
OWNER_NAME JOB_NAME OPERATION JOB_MODE STATE DEGREE ATTACHED_S
------------------------------ ------------------------------ ------------------------------ -------
DVP SYS_EXPORT_TABLE_01 EXPORT TABLE EXECUTING 2
SQL>
V-A-2. Peut-on lire le fichier DUMP généré▲
Lorsque nous effectuions un more sur les Dumps produits par les anciennes versions d'export nous parvenions à lire les ordres de DDL.
Dans les nouvelles versions, ce qui est nouveau est tout d'abord le recours de plus en plus au XML :
<?xml version="1.0"?>
Cependant, et certains vont le regretter, il n'est plus possible de « décoder » le fichier DUMP.
V-A-3. Comment exporter un schéma ?▲
Cela se fait grâce à l'argument : SCHEMAS
$ expdp dvp/dvp SCHEMAS=SCOTT DIRECTORY=datapump DUMPFILE=user.dmp LOGFILE=user.log
V-A-4. Comment exporter un tablespace▲
$ expdp dvp/dvp TABLESPACES=tablespace_name DIRECTORY=datapump DUMPFILE=tbs.dmp LOGFILE=Tbs.log
V-A-5. Comment avoir plusieurs fichiers DUMP sans spécifier le répertoire▲
$ expdp dvp/dvp tables=dvp.dvp DIRECTORY=datapump DUMPFILE=dvp.dump,dv2.com LOGFILE=dvp.log
Export: Release 10.1.0.2.0 - 64bit Production on Wednesday, 28 September, 2005 18:47
Copyright (c) 2003, Oracle. All rights reserved.
Connected to: Oracle Database 10g Enterprise Edition Release 10.1.0.2.0 - 64bit Production
With the Partitioning, OLAP and Data Mining options
Starting "DVP"."SYS_EXPORT_TABLE_01": dvp/******** tables=dvp.dvp DIRECTORY=datapump DUMPFILE=dvp.dump,dv2.com LOGFILE=dvp.log
Estimate in progress using BLOCKS method...
Processing object type TABLE_EXPORT/TABLE/TBL_TABLE_DATA/TABLE/TABLE_DATA
Total estimation using BLOCKS method: 64 KB
Processing object type TABLE_EXPORT/TABLE/TABLE
. . exported "DVP"."DVP" 4,945 KB 5 rows
Master table "DVP"."SYS_EXPORT_TABLE_01" successfully loaded/unloaded
******************************************************************************
Dump file set for DVP.SYS_EXPORT_TABLE_01 is:
/ora/data/SAGE/admin/datapump/dvp.dump
/ora/data/SAGE/admin/datapump/dv2.com
Job "DVP"."SYS_EXPORT_TABLE_01" successfully completed at 18:47
On peut vérifier cela dans le répertoire DATAPUMP :
$ ls -ltr
total 156
-rw-rw---- 1 oracle10 oinstall 4096 Sep 28 18:47 dv2.com
-rw-rw-rw- 1 oracle10 oinstall 1047 Sep 28 18:47 dvp.log
-rw-rw---- 1 oracle10 oinstall 73728 Sep 28 18:47 dvp.dump
V-A-6. Comment estimer l'export▲
Grâce à Datapump, nous pouvons avant de lancer réellement l'export estimer cette opération.
Pour ce faire nous allons utiliser le paramètre ESTIMATE_ONLY qui par défaut est à FALSE.
Commande :
$ expdp dvp/dvp tables=dvp.dvp DIRECTORY=datapump LOGFILE=dvp.log estimate_only=true
Nous remarquerons ici qu'il ne faut pas renseigner le paramètre DUMPFILE, car cette opération ne produit qu'un fichier LOG et n'exécute pas réellement l'opération, au risque d'avoir les erreurs suivantes :
ORA-39002: invalid operation
ORA-39114: Dump files are not supported for ESTIMATE_ONLY jobs
Fichier Logs :
Export: Release 10.1.0.2.0 - 64bit Production on Wednesday, 12 October, 2005 10:47
Copyright (c) 2003, Oracle. All rights reserved.;;;
Connected to: Oracle Database 10g Enterprise Edition Release 10.1.0.2.0 - 64bit Production
With the Partitioning, OLAP and Data Mining options
Starting "DVP"."SYS_EXPORT_TABLE_01": dvp/******** tables=dvp.dvp
DIRECTORY=datapump LOGFILE=dvp.log estimate_only=true
Estimate in progress using BLOCKS method...
Processing object type TABLE_EXPORT/TABLE/TBL_TABLE_DATA/TABLE/TABLE_DATA.
estimated "DVP"."DVP
64 KB
Total estimation using BLOCKS method: 64 KB
Job "DVP"."SYS_EXPORT_TABLE_01" successfully completed at 10:47
V-A-7. Export et SCN▲
Nous allons essayer d'effectuer un export en utilisant la fonction flashback_scn de l'export.
C'est une amélioration du LOGMINER introduite avec la 9i. Pour en savoir plus sur le LOGMINER.
Nous allons dans un premier temps mettre en place l'environnement de travail :
SQL> create table dvp ( a number ) ;
Table créée.
SQL> insert into dvp values (1) ;
1 ligne créée.
SQL> insert into dvp values (2) ;
1 ligne créée.
SQL> insert into dvp values (3);
1 ligne créée.
SQL> insert into dvp values (4) ;
1 ligne créée.
SQL> insert into dvp values (5) ;
1 ligne créée.
SQL> select a , ora_rowscn from dvp ;
A ORA_ROWSCN
---------- ----------
1
2
3
4
5
SQL> select dbms_flashback.get_system_change_number() from dual;
DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER()
-----------------------------------------
734443
SQL> commit ;
Validation effectuée.
SQL> select a , ora_rowscn from dvp ;
A ORA_ROWSCN
---------- ----------
1 734444
2 734444
3 734444
4 734444
5 734444
SQL> select dbms_flashback.get_system_change_number() from dual;
DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER()
-----------------------------------------
734445
SQL> delete from dvp where a!=1 ;
4 ligne(s) supprimée(s).
SQL> commit ;
Validation effectuée.
SQL> select dbms_flashback.get_system_change_number() from dual;
DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER()
-----------------------------------------
734473
SQL> select a , ora_rowscn from dvp ;
A ORA_ROWSCN
---------- ----------
1 734472
Notons que jusqu'au premier commit, les lignes ne disposent pas de ROW SCN.
Si j'effectue un export avec le dernier SCN de la table, dans ce cas je n'exporterai qu'une seule ligne :
$ expdp dvp/dvp tables=dvp.dvp DIRECTORY=datapump LOGFILE=dvp.log dumpfile=dvp.dump flashback_scn= 734472
(…)
. . exported "DVP"."DVP" 4.914 KB 1 rows
Si par contre j'effectue l'export avec le SCN avant la suppression des quatre lignes, voilà ce qu’on peut constater :
$ expdp dvp/dvp tables=dvp.dvp DIRECTORY=datapump LOGFILE=dvp.log dumpfile=dvp.dump flashback_scn= 734444
(…)
. . exported "DVP"."DVP" 4.914 KB 5 rows
D'ailleurs nous pouvons le vérifier ainsi : Suppression de la table :
SQL> show user
USER est "DVP"
SQL> drop table dvp ;
Table supprimée.
SQL> select * from dvp ;
select * from dvp
*
ERREUR à la ligne 1 :
ORA-00942: table or
view does not exist
Nous effectuons l'import des données :
$ impdp dvp/dvp tables=dvp.dvp DIRECTORY=datapump DUMPFILE=dvp.dump LOGFILE=dvp.log
Import: Release 10.1.0.2.0 - 64bit Production on Tuesday, 27 September, 2005 18:31
Copyright (c) 2003, Oracle. All rights reserved.
Connected to: Oracle Database 10g Enterprise Edition Release 10.1.0.2.0 - 64bit Production
With the Partitioning, OLAP and Data Mining options
Master table "DVP"."SYS_IMPORT_TABLE_01" successfully loaded/unloaded
Starting "DVP"."SYS_IMPORT_TABLE_01": dvp/******** tables=dvp.dvp DIRECTORY=datapump DUMPFILE=dvp.dump LOGFILE=dvp.log
Processing object type TABLE_EXPORT/TABLE/TABLE
Processing object type TABLE_EXPORT/TABLE/TBL_TABLE_DATA/TABLE/TABLE_DATA
. . imported "DVP"."DVP" 4.937 KB 5 rows
Job "DVP"."SYS_IMPORT_TABLE_01" successfully completed at 18:32
Vérification de l'import :
SQL> show user
USER est "DVP"
SQL> select * from dvp ;
A
----------
1
2
3
4
5
Plus d'informations sur le SCN.
V-A-8. Export et FLASHBACK_TIME▲
Nous allons effectuer la même chose que dans le chapitre précédent, mais cette fois-ci avec l'option FLASHBACK_TIME : nous n'effectuerons pas un export avec le SCN, mais avec en fonction de l'heure.
Comment déterminer l'heure :
SQL> set linesize 250
SQL> r
1* select a ,scn_to_timestamp (ora_rowscn) from dvp
A SCN_TO_TIMESTAMP(ORA_ROWSCN)
---------- ---------------------------------------------------------------------------
1 12/10/05 11:32:57,000000000
2 12/10/05 11:32:57,000000000
3 12/10/05 11:32:57,000000000
4 12/10/05 11:32:57,000000000
5 12/10/05 11:32:57,000000000
La commande :
$ expdp dvp/dvp tables=dvp.dvp DIRECTORY=datapump LOGFILE=dvp.log
dumpfile=dvp.dump flashback_time = '14:36:46'
V-A-9. Comment n'exporter que la structure d'une table▲
$ expdp dvp/dvp tables=dvp.dvp DIRECTORY=datapump LOGFILE=dvp.log
dumpfile=dvp.dump content=METADATA_ONLY
V-A-10. Comment n'exporter que les lignes▲
$ expdp dvp/dvp tables=dvp.dvp DIRECTORY=datapump LOGFILE=dvp.log
dumpfile=dvp.dump content=DATA_ONLY
V-B. Import FAQ▲
V-B-1. Comment paralléliser l'import▲
Même procédure que pour l'export :
impdp dvp/dvp tables=dvp.dvp DIRECTORY=datapump DUMPFILE=dvp.dump LOGFILE=dvp.log parallel=2
La vérification :
SQL> r
1* SELECT * FROM DBA_DATAPUMP_JOBS
OWNER_NAME JOB_NAME OPERATION JOB_MODE STATE DEGREE ATTACHED_S
------------------------------ ------------------------------ ------------------------------ -------
DVP SYS_IMPORT_TABLE_01 IMPORT TABLE DEFINING 2
V-B-2. Comment importer un tablespace▲
Ne pas oublier de créer le tablespace…
$ impdp dvp/dvp tablespaces=tablespace_name DIRECTORY=datapump DUMPFILE=dvp.dump LOGFILE=dvp.log
V-B-3. Comment importer les schémas▲
$ impdp dvp/dvp SCHEMAS=SCOTT DIRECTORY=datapump DUMPFILE=user.dmp LOGFILE=user.log
VI. Package DBMS_DATAPUMP▲
Dorénavant il est possible de programmer des exports imports via une API Oracle : le package dbms_datapump. L'avantage non négligeable de cette option est de pouvoir programmer des exports full via DBMS_SCHEDULER.
VI-A. Export▲
VI-A-1. Export de table▲
Durant le travail et tout comme l'utilitaire EXPDP, il est possible de voir le déroulement du travail en requêtant sur les vues : DBA_DATAPUMP_JOBS et V$SESSION_LONGOPS.
Voici un exemple :
Lister les fichiers dans le répertoire DATAPUMP :
$ ll
total 0
$
Lancer l'export avec le package datapump :
SET SERVEROUTPUT ON SIZE 1000000
DECLARE
p_dph NUMBER;
BEGIN
p_dph := DBMS_DATAPUMP.open(operation=>'EXPORT',job_mode=>'TABLE',job_name=>'DVP_EXPORT');
DBMS_DATAPUMP.add_file(handle=>p_dph,filename=>'dvp.dmp',directory=> 'DATAPUMP',filetype=>1);
DBMS_DATAPUMP.add_file(handle=>p_dph,filename=>'tab_dvp.log',directory=> 'DATAPUMP',filetype=>3);
DBMS_DATAPUMP.metadata_filter(handle => p_dph,name=>'SCHEMA_EXPR',value =>'IN (''DVP'')');
DBMS_DATAPUMP.start_job(p_dph);
DBMS_DATAPUMP.detach(p_dph);
dbms_output.put_line('Export terminé ');
EXCEPTION
WHEN OTHERS THEN
dbms_output.put_line('erreur:'||sqlerrm||' Job-ID:'||p_dph);
END;
/
Export terminé
Procédure PL/SQL terminée avec succès.
SQL>
VI-A-2. Surveiller l'avancement
Surveiller son état d'avancement :
SQL> r
1* select * FROM DBA_DATAPUMP_JOBS
OWNER_NAME JOB_NAME OPERATION JOB_MODE STATE DEGREE ATTACHED_S
------------------------------ ------------------------------ ------------------------------ -------
DVP DVP_EXPORT EXPORT TABLE NOT RUNNING 0
SQL> r
1* select * FROM DBA_DATAPUMP_JOBS
OWNER_NAME JOB_NAME OPERATION JOB_MODE STATE DEGREE ATTACHED_S
------------------------------ ------------------------------ ------------------------------ -------
DVP DVP_EXPORT EXPORT TABLE UNDEFINED 0
SQL> r
1* select * FROM DBA_DATAPUMP_JOBS
OWNER_NAME JOB_NAME OPERATION JOB_MODE STATE DEGREE ATTACHED_S
------------------------------ ------------------------------ ------------------------------ -------
DVP DVP_EXPORT EXPORT TABLE DEFINING 1
SQL> r
1* select * FROM DBA_DATAPUMP_JOBS
OWNER_NAME JOB_NAME OPERATION JOB_MODE STATE DEGREE ATTACHED_S
------------------------------ ------------------------------ ------------------------------ -------
DVP DVP_EXPORT EXPORT TABLE EXECUTING 1
Vérifier le répertoire datapump :
$ ls -ltr
total 186
-rw-rw---- 1 oracle10 oinstall 94208 Sep 28 18:10 dvp.dmp
-rw-rw-rw- 1 oracle10 oinstall 836 Sep 28 18:10 tab_dvp.log
Lire le contenu du fichier LOG :
$ more tab_dvp.log
Starting "DVP"."DVP_EXPORT":
Estimate in progress using BLOCKS method...
Processing object type TABLE_EXPORT/TABLE/TBL_TABLE_DATA/TABLE/TABLE_DATA
Total estimation using BLOCKS method: 64 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/COMMENT
. . exported "DVP"."DVP" 4,945 KB 5 rows
Master table "DVP"."DVP_EXPORT" successfully loaded/unloaded
******************************************************************************
Dump file set for DVP.DVP_EXPORT is:
/ora/data/SAGE/admin/datapump/dvp.dmp
Job "DVP"."DVP_EXPORT" successfully completed at 18:10
VI-B. Import▲
C'est la même procédure que pour l'export
VI-C. Import de la table▲
Nous allons tout simplement supprimer la table puis essayer de la recréer, ce qui nous fournira une méthode simple pour la vérification.
Répertoire Datapump :
$ ls -ltr
total 186
-rw-rw---- 1 oracle10 oinstall 94208 Sep 28 18:10 dvp.dmp
-rw-rw-rw- 1 oracle10 oinstall 836 Sep 28 18:10 tab_dvp.log
$
Supprimer la table :
SQL> show user
USER est "DVP"
SQL> drop table dvp ;
Table supprimée.
SQL>
Script d'import :
SQL> SET SERVEROUTPUT ON SIZE 1000000
SQL> DECLARE
2 p_dph NUMBER;
3 BEGIN
4 p_dph := DBMS_DATAPUMP.open(operation=>'IMPORT',job_mode=>'TABLE',job_name=>'EMP_IMPORT2');
5 DBMS_DATAPUMP.add_file(handle=>p_dph,filename=>'dvp.dmp',directory => 'DATAPUMP
',filetype=>1);
6 DBMS_DATAPUMP.add_file(handle=>p_dph,filename=>'dvp_imp.log',directory => 'DATA
PUMP',filetype=>3);
7 DBMS_DATAPUMP.set_parameter(handle=> p_dph,name=>'TABLE_EXISTS_ACTION',value=>'REPLACE');
8 DBMS_DATAPUMP.start_job(p_dph);
9 DBMS_DATAPUMP.detach(p_dph);
10 dbms_output.put_line('import terminé ');
11 EXCEPTION
12 WHEN OTHERS THEN
13 dbms_output.put_line('erreur:'||sqlerrm||' Job-ID:'||p_dph);
14 END;
15 /
import terminé
Procédure PL/SQL terminée avec succès.
SQL>
VI-C-1. Surveiller l'avancement▲
Via la vue DBA_DATAPUMP_JOBS :
SQL> R
1* select * FROM DBA_DATAPUMP_JOBS
OWNER_NAME JOB_NAME OPERATION JOB_MODE STATE DEGREE ATTACHED_S
------------------------------ ------------------------------ ------------------------------ -------
DVP EMP_IMPORT2 IMPORT TABLE DEFINING 1
SQL> R
1* select * FROM DBA_DATAPUMP_JOBS
OWNER_NAME JOB_NAME OPERATION JOB_MODE STATE DEGREE ATTACHED_S
------------------------------ ------------------------------ ------------------------------ -------
DVP EMP_IMPORT2 IMPORT TABLE EXECUTING 1
SQL> R
1* select * FROM DBA_DATAPUMP_JOBS
aucune ligne sélectionnée
Le répertoire datapump :
$ ls -ltr
total 188
-rw-rw---- 1 oracle10 oinstall 94208 Sep 28 18:10 dvp.dmp
-rw-rw-rw- 1 oracle10 oinstall 836 Sep 28 18:10 tab_dvp.log
-rw-rw-rw- 1 oracle10 oinstall 351 Sep 28 18:24 dvp_imp.log
$
Lecture du fichier Log :
$ more dvp_imp.log
Master table "DVP"."EMP_IMPORT2" successfully loaded/unloaded
Starting "DVP"."EMP_IMPORT2":
Processing object type TABLE_EXPORT/TABLE/TABLE
Processing object type TABLE_EXPORT/TABLE/TBL_TABLE_DATA/TABLE/TABLE_DATA
. . imported "DVP"."DVP" 4,945 KB 5 rows
Job "DVP"."EMP_IMPORT2" successfully completed at 18:24
Table DVP :
SQL> select * from dvp ;
A
----------
1
2
3
4
5
SQL>
Remarque : comme vous avez pu le constater, nous avons ajouté quelques lignes afin de récupérer le numéro d'erreur Oracle en cas d'échec du traitement !
Cela afin de donner la possibilité de lancer le traitement via un fichier et de l'appeler avec la commande START.
VI-D. DBMS_DATAPUMP FAQ▲
VI-D-1. Comment effectuer un export avec un lien de base de données▲
Après avoir créé le database link, il suffit de spécifier le nom dans la fonction Dbms_datapump.open (REMOTE_LINK =>'nom du database Link')
VI-D-2. Comment paralléliser ces exports/imports▲
Scripts :
SQL> SET SERVEROUTPUT ON SIZE 1000000
SQL> DECLARE
2 p_dph NUMBER;
3 BEGIN
4 p_dph := DBMS_DATAPUMP.open(operation=>'EXPORT',job_mode=>'TABLE',job_name=>'DVP_EXPORT');
5 DBMS_DATAPUMP.add_file(handle=>p_dph,filename=>'dvp.dmp',directory=> 'DATAPUMP',filetype=>1);
6 DBMS_DATAPUMP.add_file(handle=>p_dph,filename=>'tab_dvp.log',directory=> 'DATAPUMP',filetype=>
3);
7 DBMS_DATAPUMP.SET_PARALLEL (handle=>p_dph,DEGREE=>2);
8 DBMS_DATAPUMP.metadata_filter(handle => p_dph,name=>'SCHEMA_EXPR',value =>'IN (''DVP'')');
9 DBMS_DATAPUMP.start_job(p_dph);
10 DBMS_DATAPUMP.detach(p_dph);
11 dbms_output.put_line('Export terminé ');
12 EXCEPTION
13 WHEN OTHERS THEN
14 dbms_output.put_line('erreur:'||sqlerrm||' Job-ID:'||p_dph);
15 END;
16 /
Export terminé
Procédure PL/SQL terminée avec succès.
SQL>
Vérifier le travail :
SQL> r
1* select * from dba_datapump_jobs
OWNER_NAME JOB_NAME OPERATION JOB_MODE STATE DEGREE
------------------------------ ------------------------------ ------------------------------ -------
DVP DVP_EXPORT EXPORT TABLE EXECUTING 2
SQL>
Notons que le degré n'est donné que lorsque le job a pour état RUNNING.
VI-D-3. Comment initialiser les paramètres qui ne peuvent l'être via la procédure DBMS_DATAPUMP▲
Il est possible de positionner d'autres paramètres grâce à la procédure SET_PARAMETER du package.
Définition de la procédure :
PROCEDURE SET_PARAMETER
Nom d'argument Type E/S par défaut ?
------------------------------ ----------------------- ------ --------
HANDLE NUMBER IN
NAME VARCHAR2 IN
VALUE NUMBER IN
VI-D-4. Comment tracer l'exécution de DATAPUMP▲
Il existe différentes méthodes pour tracer un Import ou un Export de données.
Les méthodes classiques :
- SYS.DBMS_SYSTEM.SET_EV ;
- Oradebug avec Sql*plus.
Ou alors via directement les utilitaires
L'export :
$ expdp dvp/dvp tables=dvp.dvp DIRECTORY=datapump DUMPFILE=dvp.dump LOGFILE=dvp.log trace=480300
L'import :
Le paramètre permet de stocker tous les ordres DDL lors de l'import. Reprenons l'exemple de notre table DVP :
$ impdp dvp/dvp tables=dvp.dvp DIRECTORY=datapump DUMPFILE=dvp.dump LOGFILE=dvp.log sqlfile=sql_ddl.sql
Un extrait :
$ more sql_ddl.sql
-- CONNECT DVP
-- new object type path is: TABLE_EXPORT/TABLE/TABLE
CREATE TABLE "DVP"."DVP"
( "A" NUMBER,
"B" NUMBER
) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
TABLESPACE "SYSTEM" ;
-- new object type path is: TABLE_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
BEGIN
DBMS_STATS.SET_TABLE_STATS('"DVP"', '"DVP"', NULL, NULL, NULL, 5, 1, 6, 0, NULL, FALSE, NULL, NULL );
END;
/
DECLARE
SREC DBMS_STATS.STATREC;
BEGIN
SREC.MINVAL := 'C102';
SREC.MAXVAL := 'C106';
SREC.EAVS := 0;
SREC.CHVALS := DBMS_STATS.CHARARRAY();
SREC.NOVALS := DBMS_STATS.NUMARRAY(1, 5);
SREC.BKVALS := DBMS_STATS.NUMARRAY(0, 1);
SREC.EPC := 2;
DBMS_STATS.SET_COLUMN_STATS('"DVP"', '"DVP"', '"A"', NULL, NULL, NULL, 4, .25, 0, srec, 2, 0);
END;
/
Comme on peut le remarquer, cela exporte même les statistiques.
Attention dans ce cas-là cela n'importe pas la table.
Pour toute l'instance
Pour un init.ora :
event="39089 trace name context forever,level 0x300"
Puis arrêt redémarrage.
Pour un Spfile :
SQL> connect / as sysdba
SQL> alter system set event=
'39089 trace name context forever, level 0x300'
scope=spfile;
SQL> shutdown immediate
SQL> startup
Et pour l'arrêter
SQL> connect / as sysdba
SQL> alter system reset event scope=spfile sid='*';
SQL> shutdown immediate
SQL> startup
Via SYS.dbms_system.set_ev
Export/Import sous Windows :
select sid,serial#,username,program,
'execute sys.dbms_system.set_ev('||sid||','||serial#||',10046,4,'''');'
"SQL_TRACE" from v$session
where upper(program) like '%EXPDP%'
-- where upper(program) like '%IMPDP%'
Export/Import sous Unix :
select sid,serial#,username,program,
'execute sys.dbms_system.set_ev('||sid||','||serial#||',10046,4,'''');'
"SQL_TRACE" from v$session
where upper(program) like 'UDE%'
-- where upper(program) like 'UDI%'
Ce qui donne :
SQL> r
1 select sid,serial#,username,program,
2 'execute sys.dbms_system.set_ev('||sid||','||serial#||',10046,4,'''');'
3 "SQL_TRACE" from v$session
4 where upper(program) like 'UDE%'
5*
SID SERIAL# USERNAME
---------- ---------- ------------------------------
PROGRAM
------------------------------------------------
SQL_TRACE
--------------------------------------------------------------------------------
148 29 DVP
ude@HOST (TNS V1-V3)
execute sys.dbms_system.set_ev(148,29,10046,4,'');
SQL>
VII. DATAPUMP ET SCHEDULER▲
Ici il s'agit d'utiliser une des nouveautés de la 10G, qui va nous permettre de planifier un programme ou exécutable via le package système DBMS_SCHEDULER.
VII-A. Créer le programme▲
Nous allons commencer par enregistrer le programme afin par la suite de pouvoir le planifier.
Création du programme
Test.sh :
$ more test.sh
/ora/ora101/bin/sqlplus dvp/dvp@sage <
Test.sql
$ more test.sql
SET SERVEROUTPUT ON SIZE 1000000
DECLARE
p_dph NUMBER;
BEGIN
p_dph := DBMS_DATAPUMP.open(operation=>'EXPORT',job_mode=>'TABLE',job_name=>'DVP_EXPORT');
DBMS_DATAPUMP.add_file(handle=>p_dph,filename=>'dvp.dmp',directory=> 'DATAPUMP',filetype=>1);
DBMS_DATAPUMP.add_file(handle=>p_dph,filename=>'tab_dvp.log',directory=> 'DATAPUMP',filetype=>3);
DBMS_DATAPUMP.metadata_filter(handle => p_dph,name=>'SCHEMA_EXPR',value =>'IN (''DVP'')');
DBMS_DATAPUMP.start_job(p_dph);
DBMS_DATAPUMP.detach(p_dph);
dbms_output.put_line('Export terminM-i ');
EXCEPTION
WHEN OTHERS THEN
dbms_output.put_line('erreur:'||sqlerrm||' Job-ID:'||p_dph);
END;
/
exit
Création de l'exécutable sous Oracle :
--- Program Création
SQL> BEGIN
2 DBMS_SCHEDULER.create_program (
3 program_name => 'datapump_program',
4 program_type => 'EXECUTABLE',
5 program_action => '/ora/data/SAGE/admin/datapump/test.sh',
6 enabled => TRUE,
7 comments => 'Scheduler des exports sous Oracle');
8 DBMS_SCHEDULER.enable (name => 'datapump_program');
9 end ;
10 /
Procédure PL/SQL terminée avec succès.
Vérification de la création via la vue DBA_SCHEDULER_PROGRAMS :
SQL> SELECT program_name,program_type,enabled FROM dba_scheduler_programs
2 WHERE owner ='DVP' ;
PROGRAM_NAME PROGRAM_TYPE ENABL
------------------------------ ---------------- -----
DATAPUMP_PROGRAM EXECUTABLE TRUE
SQL>
Voici une des nouvelles fonctionnalités du planificateur : pouvoir planifier des scripts, exécutables…
VII-B. Création du planificateur▲
Cette solution a l'avantage, bien que plus longue, de pouvoir partager un planificateur par plusieurs jobs.
BEGIN
DBMS_SCHEDULER.create_schedule (
schedule_name => 'test_schedule',
start_date => SYSTIMESTAMP,repeat_interval => 'freq=hourly; byminute=0',
end_date => NULL,
comments => 'Job toutes les heures ');
END;
/
Procédure PL/SQL terminée avec succès.
Le planificateur TEST_SCEDULE effectuera une ou plusieurs tâches toutes les heures. Vérification :
SQL> SELECT schedule_name,start_date FROM user_scheduler_schedules ;
SCHEDULE_NAME START_DATE
------------------------------
---------------------------------------------------------------------
TEST_SCHEDULE 29/09/05 17:14:45,986449 +02:00
VII-C. Création du Job▲
-- job Création
SQL> BEGIN
2 DBMS_SCHEDULER.create_job (
3 job_name => 'datapump_job',
4 program_name => 'datapump_program',
5 schedule_name => 'test_schedule',
6 enabled => TRUE,
7 comments => 'Creer un job datapump.dvp');
8 End;
9 /
Procédure PL/SQL terminée avec succès.
Vérification :
SQL> SELECT job_name, enabled FROM user_scheduler_jobs;
JOB_NAME ENABL
------------------------------ -----
DATAPUMP_JOB TRUE
Nous avons donc un Job : DATAPUMP JOB qui sera exécuté à une fréquence définie par le scheduler TEST_SCHEDULE et qui exécutera le programme défini dans DATAPUMP_PROGRAM.
Cela a pour avantage de privilégier la modularité.
VII-D. Suppression▲
L'ordre de suppression est le suivant : JOB, Planificateur et enfin programme.
VII-D-1. Le Job▲
L'arrêter si celui-ci est en cours puis le supprimer.
PROCEDURE STOP_JOB
Nom d'argument Type E/S par défaut ?
------------------------------ ----------------------- ------ --------
JOB_NAME VARCHAR2 IN
FORCE BOOLEAN IN DEFAULT
Suppression :
PROCEDURE DROP_JOB
Nom d'argument Type E/S par défaut ?
------------------------------ ----------------------- ------ --------
JOB_NAME VARCHAR2 IN
FORCE BOOLEAN IN DEFAULT
VII-D-2. Le scheduler▲
PROCEDURE DROP_SCHEDULE
Nom d'argument Type E/S par défaut ?
------------------------------ ----------------------- ------ --------
SCHEDULE_NAME VARCHAR2 IN
FORCE BOOLEAN IN DEFAULT
VII-D-3. Le programme▲
PROCEDURE DROP_PROGRAM
Nom d'argument Type E/S par défaut ?
------------------------------ ----------------------- ------ --------
PROGRAM_NAME VARCHAR2 IN
FORCE BOOLEAN IN DEFAULT
VII-D-4. Remarques▲
- Tous ces programmes font partie du package DBMS_SCHEDULER.
- Il existe de nombreux bugs lors de l'initialisation des packages et de leur exécution (une 10.2 est donc vivement conseillée).
VII-D-5. Supprimer le programme▲
Supprimer le programme :
-- Il faut supprimer le job avant le programme -- arrêter le job
-- arrêter le job
BEGIN
DBMS_SCHEDULER.drop_job (job_name => 'DATAPUMP_JOB',FORCE=> true) ;
end ;
/
-- Supprimer le programme
BEGIN
DBMS_SCHEDULER.drop_program (program_name => 'datapump_program',FORCE => true) ;
end ;
/
-- Supprimer le scheduler
BEGIN
DBMS_SCHEDULER.drop_scheduler (scheduler_name => 'datapump_program',FORCE => true) ;
end ;
/
Il existe une limitation de l'outil en 10.1, en effet il est difficile d'arrêter un job de type : EXECUTABLE en cours.
Pour ce faire une méthode de contournement :
- Alter system set job_queue_processes=0 ;
- kill du process ora_cjq0_SID (parfois un redémarrage de la base est nécessaire).