On our quest to learn about Oracle's Data Pump utility it has often been compared to the old export and import (exp & imp) utilities that we have all grown to love (or hate). This article is where where Data Pump takes a detour from these old utilities and begins to shine. This article will explore some of the export modes available and give examples on how to export selected object types and dependencies those objects
In order to use Data Pump, we learned in Part II of this series that a datapump directory was required to export and import from and to databases. Here are the three setup and authorization commands needed to get started.
SQL> CREATE DIRECTORY datapump AS 'C:.oradata.datapump'; SQL> GRANT EXP_FULL_DATABASE to scott; SQL> GRANT READ, WRITE ON DIRECTORY datapump to scott;
In the last article various FULL exports were performed. These are termed 'FULL mode' exports for the obvious reason and had the following format.
expdp scott/tiger FULL=y DIRECTORY=datapump DUMPFILE=full.dmp LOGFILE=full.log
A slight change to this example, changing the FULL keyword to SCHEMA, allows
us to perform. a SCHEMA mode export where a particular schema will be exported.
Anyone familiar with the old export / import (exp / imp) utilities should feel
right at home here. To export multiple schema's you need only separate each
schema with commas.
C:.>expdp scott/tiger SCHEMAS=SCOTT DIRECTORY=datapump DUMPFILE=scott.dmp LOGFILE=scott.log
Likewise we could change the SCHEMS option and export all objects in a particular tablespace by switching to the TABLESPACES export mode.
expdp scott/tiger TABLESPACES=USERS DIRECTORY=datapump DUMPFILE=TSusers.dmp LOGFILE=TSusers.log
If you wanted to export a single table, you need only switch to TABLE mode
and use the following export command.
C:.>expdp scott/tiger TABLES=SCOTT.DEPT DIRECTORY=datapump DUMPFILE=dept.dmp LOGFILE=dept.log
The interesting point to notice when issuing these commands is to take a close look at the export logs for each of these export modes. When taking a full schema export you will notice that the export pulls out various additional object types such as grants, roles, sequences, and views. To just name a few. Here is the log from the SCHEMA export performed above.
Starting "SCOTT"."SYS_EXPORT_SCHEMA_01": scott/******** SCHEMAS=SCOTT DIRECTORY=datapump DUMPFILE=scott.dmp LOGFILE=scott.log Estimate in progress using BLOCKS method... Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA Total estimation using BLOCKS method: 1024 KB Processing object type SCHEMA_EXPORT/USER Processing object type SCHEMA_EXPORT/SYSTEM_GRANT Processing object type SCHEMA_EXPORT/ROLE_GRANT Processing object type SCHEMA_EXPORT/DEFAULT_ROLE Processing object type SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA Processing object type SCHEMA_EXPORT/SEQUENCE/SEQUENCE Processing object type SCHEMA_EXPORT/TABLE/TABLE Processing object type SCHEMA_EXPORT/TABLE/INDEX/INDEX Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT Processing object type SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS Processing object type SCHEMA_EXPORT/TABLE/COMMENT Processing object type SCHEMA_EXPORT/FUNCTION/FUNCTION Processing object type SCHEMA_EXPORT/PROCEDURE/PROCEDURE Processing object type SCHEMA_EXPORT/PROCEDURE/GRANT/OWNER_GRANT/OBJECT_GRANT Processing object type SCHEMA_EXPORT/FUNCTION/ALTER_FUNCTION Processing object type SCHEMA_EXPORT/PROCEDURE/ALTER_PROCEDURE Processing object type SCHEMA_EXPORT/VIEW/VIEW Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/REF_CONSTRAINT Processing object type SCHEMA_EXPORT/TABLE/TRIGGER Processing object type SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS . . exported "SCOTT"."DEMO_IMAGES" 56.57 KB 11 rows . . exported "SCOTT"."DEMO_CUSTOMERS" 8.976 KB 7 rows . . exported "SCOTT"."DEMO_ORDERS" 6.421 KB 10 rows . . exported "SCOTT"."DEMO_ORDER_ITEMS" 6.578 KB 16 rows . . exported "SCOTT"."DEMO_PAGE_HIERARCHY" 5.984 KB 18 rows . . exported "SCOTT"."DEMO_PRODUCT_INFO" 7.656 KB 10 rows . . exported "SCOTT"."DEMO_STATES" 6.046 KB 51 rows . . exported "SCOTT"."DEMO_USERS" 7.179 KB 2 rows . . exported "SCOTT"."DEPT" 5.648 KB 4 rows . . exported "SCOTT"."EMP" 7.804 KB 14 rows . . exported "SCOTT"."HT_ISSUES" 14.28 KB 29 rows . . exported "SCOTT"."HT_PEOPLE" 7.203 KB 18 rows . . exported "SCOTT"."HT_PROJECTS" 6.406 KB 5 rows . . exported "SCOTT"."SALGRADE" 5.570 KB 5 rows . . exported "SCOTT"."BONUS" 0 KB 0 rows Master table "SCOTT"."SYS_EXPORT_SCHEMA_01" successfully loaded/unloaded ****************************************************************************** Dump file set for SCOTT.SYS_EXPORT_SCHEMA_01 is: C:\ORADATA\DATAPUMP\SCOTT.DMP Job "SCOTT"."SYS_EXPORT_SCHEMA_01" successfully completed at 18:49:55
If we then take a look at the export for a tables you will quickly notice
that not all the object types that were exported for the SCHEMA mode have been
exported for the TABLE mode. Some of this is because, in our example, the DEPT
table does not have certain dependent objects and because other object types are
not at all exported even though they would seem to have a dependency. For
instance indexes, triggers, and statistics will be exported under TABLE mode but
a view on the DEPT table will not. So as a caution, be careful and examine your
export logs. You may not be getting everything you think is a dependent object.
Starting "SCOTT"."SYS_EXPORT_TABLE_01": scott/******** TABLES=SCOTT.DEPT DIRECTORY=datapump DUMPFILE=dept.dmp LOGFILE=dept.log Estimate in progress using BLOCKS method... Processing object type TABLE_EXPORT/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/STATISTICS/TABLE_STATISTICS . . exported "SCOTT"."DEPT" 5.648 KB 4 rows Master table "SCOTT"."SYS_EXPORT_TABLE_01" successfully loaded/unloaded ****************************************************************************** Dump file set for SCOTT.SYS_EXPORT_TABLE_01 is: C:\ORADATA\DATAPUMP\DEPT.DMP Job "SCOTT"."SYS_EXPORT_TABLE_01" successfully completed at 18:46:56
One way to determine the objects that will or can be exported for the
different modes is to look at the three DBA views DATABASE_EXPORT_OBJECTS,
SCHEMA_EXPORT_OBJECTS, and TABLE_EXPORT_OBJECTS. Each of these views, if
queried, will give you a list and short description on the specific paths to
object types that you can expect INCLUDE or EXCLUDE to be dependent on the
object you are exporting or importing. For instance if you were to query the
TABLE_EXPORT_OBJECTS view with the following SQL you would get a list of all
objects that are dependent on exporting a table. As you can see there is no
entry for exporting views based on a table export. In actuality there are 86
INCLUCE/EXCLUDE types just in the TABLE_EXPORT_OBJECTS view and many more the
other two export views. I would encourage you to select the object paths for
each of the views and get acquainted with what you can export.
SQL> SELECT object_path, comments FROM table_export_objects where object_path like 'TABLE%'; OBJECT_PATH COMMENTS ------------------------------------------------------- -------------------------------------------------- TABLE/AUDIT_OBJ Object audits on the selected tables TABLE/COMMENT Table and column comments on the selected tables TABLE/CONSTRAINT Constraints (including referential constraints) TABLE/CONSTRAINT/REF_CONSTRAINT Referential constraints TABLE/FGA_POLICY Fine-grained auditing policies TABLE/GRANT Object grants on the selected tables TABLE/GRANT/OWNER_GRANT/OBJECT_GRANT Object grants on the selected tables TABLE/INDEX Indexes TABLE/INDEX/STATISTICS Precomputed statistics TABLE/INSTANCE_CALLOUT Instance callouts TABLE/POST_INSTANCE/GRANT/PROCDEPOBJ_GRANT Grants on instance procedural objects TABLE/POST_INSTANCE/PROCDEPOBJ Instance procedural objects TABLE/POST_INSTANCE/PROCDEPOBJ_AUDIT Audits on instance procedural objects TABLE/POST_TABLE_ACTION Post-table actions TABLE/PRE_TABLE_ACTION Pre-table actions TABLE/PROCACT_INSTANCE Instance procedural actions TABLE/RLS_CONTEXT Fine-grained access control contexts TABLE/RLS_GROUP Fine-grained access control policy groups TABLE/RLS_POLICY Fine-grained access control policies TABLE/TRIGGER Triggers on the selected tables TABLE_EXPORT/TABLE/AUDIT_OBJ Object audits on the selected tables TABLE_EXPORT/TABLE/COMMENT Table and column comments on the selected tables TABLE_EXPORT/TABLE/CONSTRAINT Constraints (including referential constraints) TABLE_EXPORT/TABLE/CONSTRAINT/REF_CONSTRAINT Referential constraints TABLE_EXPORT/TABLE/FGA_POLICY Fine-grained auditing policies TABLE_EXPORT/TABLE/GRANT Object grants on the selected tables TABLE_EXPORT/TABLE/GRANT/OWNER_GRANT/OBJECT_GRANT Object grants on the selected tables TABLE_EXPORT/TABLE/INDEX Indexes TABLE_EXPORT/TABLE/INDEX/STATISTICS Precomputed statistics TABLE_EXPORT/TABLE/INSTANCE_CALLOUT Instance callouts TABLE_EXPORT/TABLE/POST_INSTANCE/GRANT/PROCDEPOBJ_GRANT Grants on instance procedural objects TABLE_EXPORT/TABLE/POST_INSTANCE/PROCDEPOBJ Instance procedural objects TABLE_EXPORT/TABLE/POST_INSTANCE/PROCDEPOBJ_AUDIT Audits on instance procedural objects TABLE_EXPORT/TABLE/POST_TABLE_ACTION Post-table actions TABLE_EXPORT/TABLE/PRE_TABLE_ACTION Pre-table actions TABLE_EXPORT/TABLE/PROCACT_INSTANCE Instance procedural actions TABLE_EXPORT/TABLE/RLS_CONTEXT Fine-grained access control contexts TABLE_EXPORT/TABLE/RLS_GROUP Fine-grained access control policy groups TABLE_EXPORT/TABLE/RLS_POLICY Fine-grained access control policies TABLE_EXPORT/TABLE/TRIGGER Triggers on the selected tables
Through the INCLUDE/EXCLUDE options you can fine tune your exports to pull
exactly what you want from your databases. So, to take advantage of these
INCLUDE/EXCLUDE object types we can perform. an export on a table and not include
statistics with the following export command.
C:.>expdp scott/tiger TABLES=SCOTT.DEPT EXCLUDE=STATISTICS DIRECTORY=datapump DUMPFILE=dept.dmp LOGFILE=dept.log Export: Release 10.2.0.1.0 - Production on Tuesday, 23 August, 2005 19:40:25 Copyright (c) 2003, 2005, Oracle. All rights reserved. Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production With the Partitioning, OLAP and Data Mining options Starting "SCOTT"."SYS_EXPORT_TABLE_01": scott/******** TABLES=SCOTT.DEPT EXCLUDE=STATISTICS DIRECTORY=datapump DUMPFILE=5dept.dmp L GFILE=dept.log Estimate in progress using BLOCKS method... Processing object type TABLE_EXPORT/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 . . exported "SCOTT"."DEPT" 5.648 KB 4 rows Master table "SCOTT"."SYS_EXPORT_TABLE_01" successfully loaded/unloaded ****************************************************************************** Dump file set for SCOTT.SYS_EXPORT_TABLE_01 is: C:\ORADATA\DATAPUMP\DEPT.DMP Job "SCOTT"."SYS_EXPORT_TABLE_01" successfully completed at 19:40:40
When playing around with Data Pump export and using the INCLUDE / EXCLUDE
feature, I soon found out that it was much easier to use a parameter file
(parfile) when specifying the different INCLUDE / EXCLUDE options. This is the
same concept as the old export and import (exp & imp) utilities. This is
easier because in the course of trying to put all of the potential options on
one command line and with the fact that there are “special” characters required
when specifying INCLUCE / EXCLUDE options, you will soon find it easier to add
to and subtract from the export command. I tried a number of times putting these
options on a single command line but had numerous issues. So I would suggest
just getting use to the parfile from the start.
For an example in using the
parfile I decided to export the DEPT table from the SCOTT schema and include
views. Remember, as noted earlier in this article that views are not available
to export under a table. So if you were to look at the DBA views, also noted
above, you need to at least go up to a schema export to include views. So I
created the following parfile. This will actually export all views in the SCOTT
schema. If you knew the view names associated with the DEPT table you could also
create in IN list much like the INCLUDE statement for the DEPT table.
Parfile dept.par
SCHEMAS=SCOTT
INCLUDE=TABLE:"IN ('DEPT')"
INCLUDE=VIEW
DIRECTORY=datapump
DUMPFILE=dept.dmp
LOGFILE=dept.log
Here is the command line that would be issued. Looks very similar to the old
export utility exp.
C:.>expdp scott/tiger parfile=dept.par Export: Release 10.2.0.1.0 - Production on Tuesday, 23 August, 2005 19:54:46 Copyright (c) 2003, 2005, Oracle. All rights reserved. Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production With the Partitioning, OLAP and Data Mining options Starting "SCOTT"."SYS_EXPORT_SCHEMA_01": scott/******** parfile=dept.par Estimate in progress using BLOCKS method... Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA Total estimation using BLOCKS method: 64 KB Processing object type SCHEMA_EXPORT/TABLE/TABLE Processing object type SCHEMA_EXPORT/TABLE/INDEX/INDEX Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT Processing object type SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS Processing object type SCHEMA_EXPORT/VIEW/VIEW Processing object type SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS . . exported "SCOTT"."DEPT" 5.648 KB 4 rows Master table "SCOTT"."SYS_EXPORT_SCHEMA_01" successfully loaded/unloaded ****************************************************************************** Dump file set for SCOTT.SYS_EXPORT_SCHEMA_01 is: C:\ORADATA\DATAPUMP\DEPT.DMP Job "SCOTT"."SYS_EXPORT_SCHEMA_01" successfully completed at 19:55:04
Data Pump's import command is much the same as the export command. I actually just replaced the expdp with the impdp command in these examples and had no problems importing back into my database. Many times though we want to import into a different schema and this is accomplished by the REMAP_SCHEMA option. Here is an example where I imported the DEPT table into a different schema.
impdp system/tiger REMAP_SCHEMA=SCOTT:JKOOPMANN DIRECTORY=datapump DUMPFILE=dept.dmp LOGFILE=dept.log
Oracle's Data Pump utility has many options that allow you to fine tune what
you can export from a database. Just remember to query the DBA views
(DATABASE_EXPORT_OBJECTS, SCHEMA_EXPORT_OBJECTS, and TABLE_EXPORT_OBJECTS) that
dictate the dependent objects that will be exported under certain scenarios.
Also keep in mind you can just as easily exclude these object types to pull out
exactly what you want.