Tuesday, 3 January 2017

Data Pump expdp/impdb Scenarios

Overview

Datapump introduce in 10g which is very powerful utility to perform the both load and unload data using external dump files.Oracle Data Pump technology consists of two components: the Data Pump Export utility, to unload data objects from a database, and the Data Pump Import utility, to load data objects into a database. You access the two Data Pump utilities through a pair of clients called expdp and impdp.As their names indicate, the first of these corresponds to the Data Pump Export utility and the latter
to the Data Pump Import utility. You can control both Data Pump Export and Import jobs with the help of several parameters.

In this article we will demonstrate different Data Pump (expdp/impdb) scenarios.

Prerequisites

  • Creating a Database Directory
  • Create a directory named expdp_dir and specifies that it is to map to the filesystem/location and physical location on disk:
SQL> create directory expdp_dir as ' /orahm/app/oracle/admin/db01/dpdump';

  • Granting Access to the Directory
  • Grant permissions on the database-directory object to a user that wants to use Data Pump:-
SQL> grant read, write on directory expdp_dir to sys;

Table level

Export Source DB

SQL> select * from dba_directories;
OWNER       DIRECTORY_NAME        DIRECTORY_PATH
-----------------------------
SYS         DATA_PUMP_DIR        /orahm/app/oracle/admin/db01/dpdump

$expdp directory= DATA_PUMP_DIR tables=owner.table_name dumpfile=exp-tab.dmp logfile=exp-tab.log

scp /orahm/app/oracle/admin/db01/dpdump/exp-tab.dmp  oracle@targetdb:/orahm/app/oracle/admin/db01/dpdump/

Import Target DB

SQL> select * from dba_directories;

OWNER       DIRECTORY_NAME        DIRECTORY_PATH
-------------------------------------------------------------------------
SYS         DATA_PUMP_DIR        /orahm/app/oracle/admin/db01/dpdump

$impdp directory= DATA_PUMP_DIR tables=owner.table_name dumpfile=exp-tab.dmp logfile=exp-tab.log


Schema level
Below example to take the schema level export and import.

Export Source DB

SQL> select * from dba_directories;

OWNER       DIRECTORY_NAME        DIRECTORY_PATH
-------------------------------------------------------------------------
SYS         DATA_PUMP_DIR        /orahm/app/oracle/admin/db01/dpdump
$expdp directory= DATA_PUMP_DIR schemas=ABC dumpfile= exp-schema.dmp logfile= exp-schmea.log

scp /orahm/app/oracle/admin/db01/dpdump/exp-schema.dmp oracle@targetdb:/orahm/app/oracle/admin/db01/dpdump/

Import Target DB

$impdp directory= DATA_PUMP_DIR schemas=ABC dumpfile= exp-schema.dmp logfile=imp-schema.log

Check invalid object and compile if required.

select object_name from dba_objects where owner=’ABC’ and status='INVALID' ;
compiling invalid object.

ALTER PROCEDURE <PROCEDURE_NAME> COMPILE;

Database level
Below example for full DB export and import.

Export Source DB

SQL> select * from dba_directories;
OWNER       DIRECTORY_NAME        DIRECTORY_PATH
-------------------------------------------------------------------------
SYS         DATA_PUMP_DIR        /orahm/app/oracle/admin/db01/dpdump
Check the tablespace name and size to match same on target db

select    a.TABLESPACE_NAME,
ROUND(a.BYTES/1024000) "Total (MB)",
ROUND(b.BYTES/1024000) "Free (MB)",
round(((a.BYTES-b.BYTES)/a.BYTES)*100,2) "% USED",
100-round(((a.BYTES-b.BYTES)/a.BYTES)*100,2) "% FREE"
from
(
select  TABLESPACE_NAME,
sum(BYTES) BYTES
from    dba_data_files
group   by TABLESPACE_NAME
)
a,
(
select  TABLESPACE_NAME,
sum(BYTES) BYTES ,
max(BYTES) largest
from    dba_free_space
group   by TABLESPACE_NAME
)b
where    a.TABLESPACE_NAME=b.TABLESPACE_NAME
and a.TABLESPACE_NAME like '%'
order      by ((a.BYTES-b.BYTES)/a.BYTES) desc;

$expdp directory= DATA_PUMP_DIR full=y dumpfile=exp-full.dmp logfile=exp-full.log

scp /orahm/app/oracle/admin/db01/dpdump/ exp-full.dmp oracle@targetdb:/orahm/app/oracle/admin/db01/dpdump/


Import Target DB

Make target db contain all the tablespace and available free space to accommodate the source object into target DB

Sql> select    a.TABLESPACE_NAME,
ROUND(a.BYTES/1024000) "Total (MB)",
ROUND(b.BYTES/1024000) "Free (MB)",
round(((a.BYTES-b.BYTES)/a.BYTES)*100,2) "% USED",
100-round(((a.BYTES-b.BYTES)/a.BYTES)*100,2) "% FREE"
from
(
select  TABLESPACE_NAME,
sum(BYTES) BYTES
from    dba_data_files
group   by TABLESPACE_NAME
)
a,
(
select  TABLESPACE_NAME,
sum(BYTES) BYTES ,
max(BYTES) largest
from    dba_free_space
group   by TABLESPACE_NAME
)b
where    a.TABLESPACE_NAME=b.TABLESPACE_NAME
and a.TABLESPACE_NAME like '%'
order      by ((a.BYTES-b.BYTES)/a.BYTES) desc;

$impdp directory= DATA_PUMP_DIR full=y dumpfile=exp-full.dmp logfile=imp-full.log

Check the invalid object and compile.
Sql>select object_name,owner,status from dba_objects where status='INVALID';
Sql>@$ORACLE_HOME/rdbms/admin/utlrp.sql
Sql>select object_name,owner,status from dba_objects where status='INVALID';

Using Parameter file
Below export and import example using parameter file.

Export Source DB

SQL> select * from dba_directories;
OWNER       DIRECTORY_NAME        DIRECTORY_PATH
-------------------------------------------------------------------------
SYS         DATA_PUMP_DIR        /orahm/app/oracle/admin/db01/dpdump
Check the tablespace name and size to match same on target db

select    a.TABLESPACE_NAME,
ROUND(a.BYTES/1024000) "Total (MB)",
ROUND(b.BYTES/1024000) "Free (MB)",
round(((a.BYTES-b.BYTES)/a.BYTES)*100,2) "% USED",
100-round(((a.BYTES-b.BYTES)/a.BYTES)*100,2) "% FREE"
from
(
select  TABLESPACE_NAME,
sum(BYTES) BYTES
from    dba_data_files
group   by TABLESPACE_NAME
)
a,
(
select  TABLESPACE_NAME,
sum(BYTES) BYTES ,
max(BYTES) largest
from    dba_free_space
group   by TABLESPACE_NAME
)b
where    a.TABLESPACE_NAME=b.TABLESPACE_NAME
and a.TABLESPACE_NAME like '%'
order      by ((a.BYTES-b.BYTES)/a.BYTES) desc;
Create parameter file as below under data pump directory.

vi full_db.par
directory=DATA_PUMP_DIR
full=y dumpfile=exp-full.dmp
logfile=exp-full.log

Take export using par file.
$ expdp parfile=full_db.par

scp /orahm/app/oracle/admin/db01/dpdump/exp-tab.dmp  oracle@targetdb:/orahm/app/oracle/admin/db01/dpdump/


Import Target DB

Make target db contain all the tablespace and available free space to accommodate the source object into target DB

Sql> select    a.TABLESPACE_NAME,
ROUND(a.BYTES/1024000) "Total (MB)",
ROUND(b.BYTES/1024000) "Free (MB)",
round(((a.BYTES-b.BYTES)/a.BYTES)*100,2) "% USED",
100-round(((a.BYTES-b.BYTES)/a.BYTES)*100,2) "% FREE"
from
(
select  TABLESPACE_NAME,
sum(BYTES) BYTES
from    dba_data_files
group   by TABLESPACE_NAME
)
a,
(
select  TABLESPACE_NAME,
sum(BYTES) BYTES ,
max(BYTES) largest
from    dba_free_space
group   by TABLESPACE_NAME
)b
where    a.TABLESPACE_NAME=b.TABLESPACE_NAME
and a.TABLESPACE_NAME like '%'
order      by ((a.BYTES-b.BYTES)/a.BYTES) desc;
                               
Create parameter file as below under data pump directory.


vi full_db.par
directory=DATA_PUMP_DIR
full=y dumpfile=exp-full.dmp
logfile=imp-full.log


Perform import using parameter file.
$impdp parfile=full_db.par

Check the invalid object and compile.
Sql>select object_name,owner,status from dba_objects where status='INVALID';
Sql>@$ORACLE_HOME/rdbms/admin/utlrp.sql
Sql>select object_name,owner,status from dba_objects where status='INVALID';


Data Pump Export/Import more examples

  • Using parallel option
Using parallel option we can make export faster. It generate more dump files depends on parallel option during export.

Export Source DB

SQL> select * from dba_directories;

OWNER       DIRECTORY_NAME        DIRECTORY_PATH
-------------------------------------------------------------------------
SYS         DATA_PUMP_DIR        /orahm/app/oracle/admin/db01/dpdump

$expdp directory= DATA_PUMP_DIR schemas=ABC dumpfile=exp-schema_%Udmp logfile= exp-schmea.log parallel=2

scp /orahm/app/oracle/admin/db01/dpdump/exp-schema_%U.dmp oracle@targetdb:/orahm/app/oracle/admin/db01/dpdump/

Import Target DB

$impdp directory= DATA_PUMP_DIR schemas=ABC dumpfile= exp-schema_%U.dmp logfile=imp-schema.log

Check invalid object and compile if required.

select object_name from dba_objects where owner=’ABC’ and status=‘INVALID’;
Compiling invalid object.

ALTER PROCEDURE <PROCEDURE_NAME> COMPILE;

  • Using compress option
Using compress option we can reduce the size of dump files.

Export Source DB

SQL> select * from dba_directories;

OWNER       DIRECTORY_NAME        DIRECTORY_PATH
-------------------------------------------------------------------------
SYS         DATA_PUMP_DIR        /orahm/app/oracle/admin/db01/dpdump

$expdp directory= DATA_PUMP_DIR compression=all schemas=ABC dumpfile= exp-schema.dmp logfile= exp-schmea.log

scp /orahm/app/oracle/admin/db01/dpdump/exp-schema.dmp oracle@targetdb:/orahm/app/oracle/admin/db01/dpdump/

Import Target DB

$impdp directory= DATA_PUMP_DIR schemas=ABC dumpfile= exp-schema.dmp logfile=imp-schema.log

Check invalid object and compile if required.

select object_name from dba_objects where owner=’ABC’ and status=‘INVALID’;
Compiling invalid object.

ALTER PROCEDURE <PROCEDURE_NAME> COMPILE;


Creating DDL file
Using Sqlfile option we can only extract the DDL without data.

Export Source DB

SQL> select * from dba_directories;

OWNER       DIRECTORY_NAME        DIRECTORY_PATH
-------------------------------------------------------------------------
SYS         DATA_PUMP_DIR        /orahm/app/oracle/admin/db01/dpdump

$expdp directory= DATA_PUMP_DIR tables=owner.table_name dumpfile=exp-tab.dmp logfile=exp-tab.log sqlfile=ddl-script.sql

scp /orahm/app/oracle/admin/db01/dpdump/exp-tab.dmp ddl-script.sql oracle@targetdb:/orahm/app/oracle/admin/db01/dpdump/

Import Target DB

Import only DDL
$impdp directory= DATA_PUMP_DIR tables=owner.table_name dumpfile=exp-tab.dmp logfile=exp-tab.log sqlfile=ddl-script.sql

  • Cloning user (remap_schema)
Using Remap_schema option we can import the object from one schema to other schema.

Export Source DB

SQL> select * from dba_directories;

OWNER       DIRECTORY_NAME        DIRECTORY_PATH
-------------------------------------------------------------------------
SYS         DATA_PUMP_DIR        /orahm/app/oracle/admin/db01/dpdump

$expdp directory= DATA_PUMP_DIR compression=all schemas=ABC dumpfile= exp-schema.dmp logfile= exp-schmea.log

scp /orahm/app/oracle/admin/db01/dpdump/exp-schema.dmp oracle@targetdb:/orahm/app/oracle/admin/db01/dpdump/

Import Target DB

$impdp directory= DATA_PUMP_DIR remap_schema=ABC:XYZ dumpfile= exp-schema.dmp logfile=imp-schema.log

Check invalid object and compile if required.

select object_name from dba_objects where owner=’XZY’ and status=‘INVALID’;

Compiling invalid object.

ALTER PROCEDURE <PROCEDURE_NAME> COMPILE;

  • Cloning table (remap_table)
Remap_table option is to create the table with new name during import to avoid overwriting existing table in target DB.

Export Source DB

SQL> select * from dba_directories;

OWNER       DIRECTORY_NAME        DIRECTORY_PATH
-------------------------------------------------------------------------
SYS         DATA_PUMP_DIR        /orahm/app/oracle/admin/db01/dpdump

$expdp directory= DATA_PUMP_DIR tables=ABC.table1 dumpfile=exp-tab.dmp logfile=exp-tab.log

scp /orahm/app/oracle/admin/db01/dpdump/exp-tab.dmp oracle@targetdb:/orahm/app/oracle/admin/db01/dpdump/

Import Target DB

Remap table to new name.

$impdp directory= DATA_PUMP_DIR tables=ABC.table1 remap_table= ABC.table1:table2 dumpfile=exp-tab.dmp logfile=exp-tab.log

  • Importing when objects Already Exist
Using the TABLE_EXISTS_ACTION option we can import the object if the object already exist on target.

TABLE_EXISTS_ACTION=[SKIP | APPEND | TRUNCATE | REPLACE]
SKIP leaves the table as is and moves on to the next object. This is not a valid option if the CONTENT parameter is set to DATA_ONLY.
APPEND loads rows from the source and leaves existing rows unchanged.
TRUNCATE deletes existing rows and then loads rows from the source.
REPLACE drops the existing table and then creates and loads it from the source. This is not a valid option if the CONTENT parameter is set to DATA_ONLY.

Export Source DB

SQL> select * from dba_directories;

OWNER       DIRECTORY_NAME        DIRECTORY_PATH
-------------------------------------------------------------------------
SYS         DATA_PUMP_DIR        /orahm/app/oracle/admin/db01/dpdump

$expdp directory= DATA_PUMP_DIR schemas=ABC dumpfile= exp-schema.dmp logfile= exp-schmea.log

scp /orahm/app/oracle/admin/db01/dpdump/exp-schema.dmp oracle@targetdb:/orahm/app/oracle/admin/db01/dpdump/

Import

$impdp directory= DATA_PUMP_DIR schemas=ABC dumpfile= exp-schema.dmp logfile=imp-schema.log table_exists_action==[SKIP | APPEND | TRUNCATE | REPLACE]

Check invalid object and compile if required.

select object_name from dba_objects where owner=’ABC’ and status='INVALID' ;
compiling invalid object.

ALTER PROCEDURE <PROCEDURE_NAME> COMPILE;

  • Exclude option
EXCLUDE parameter is used, all objects except those specified by it will be included in the export/import

Export Source DB

SQL> select * from dba_directories;
OWNER       DIRECTORY_NAME        DIRECTORY_PATH
-------------------------------------------------------------------------
SYS         DATA_PUMP_DIR        /orahm/app/oracle/admin/db01/dpdump
Check the tablespace name and size to match same on target db

select    a.TABLESPACE_NAME,
ROUND(a.BYTES/1024000) "Total (MB)",
ROUND(b.BYTES/1024000) "Free (MB)",
round(((a.BYTES-b.BYTES)/a.BYTES)*100,2) "% USED",
100-round(((a.BYTES-b.BYTES)/a.BYTES)*100,2) "% FREE"
from
(
select  TABLESPACE_NAME,
sum(BYTES) BYTES
from    dba_data_files
group   by TABLESPACE_NAME
)
a,
(
select  TABLESPACE_NAME,
sum(BYTES) BYTES ,
max(BYTES) largest
from    dba_free_space
group   by TABLESPACE_NAME
)b
where    a.TABLESPACE_NAME=b.TABLESPACE_NAME
and a.TABLESPACE_NAME like '%'
order      by ((a.BYTES-b.BYTES)/a.BYTES) desc;

Create parameter file as below under data pump directory.

vi full_db.par
directory=DATA_PUMP_DIR
full=y dumpfile=exp-full.dmp
logfile=exp-full.log
exclude=schema:"IN ('SYS','SYSTEM','ANONYMOUS','DBSNMP','DIP','EXFSYS','ORACLE_OCM','OUTLN','WMSYS','XDB')"

Take export using par file.

$ expdp parfile=full_db.par

scp /orahm/app/oracle/admin/db01/dpdump/exp-tab.dmp oracle@targetdb:/orahm/app/oracle/admin/db01/dpdump/

Import Target DB

Make target db contain all the tablespace and available free space to accommodate the source object into target DB

Sql> select    a.TABLESPACE_NAME,
ROUND(a.BYTES/1024000) "Total (MB)",
ROUND(b.BYTES/1024000) "Free (MB)",
round(((a.BYTES-b.BYTES)/a.BYTES)*100,2) "% USED",
100-round(((a.BYTES-b.BYTES)/a.BYTES)*100,2) "% FREE"
from
(
select  TABLESPACE_NAME,
sum(BYTES) BYTES
from    dba_data_files
group   by TABLESPACE_NAME
)
a,
(
select  TABLESPACE_NAME,
sum(BYTES) BYTES ,
max(BYTES) largest
from    dba_free_space
group   by TABLESPACE_NAME
)b
where    a.TABLESPACE_NAME=b.TABLESPACE_NAME
and a.TABLESPACE_NAME like '%'
order      by ((a.BYTES-b.BYTES)/a.BYTES) desc;
                               
Create parameter file as below under data pump directory.

vi full_db.par
directory=DATA_PUMP_DIR
full=y dumpfile=exp-full.dmp
logfile=imp-full.log

Perform import using parameter file.
$impdp parfile=full_db.par

Check the invalid object and compile.
Sql>select object_name,owner,status from dba_objects where status='INVALID';
Sql>@$ORACLE_HOME/rdbms/admin/utlrp.sql
Sql>select object_name,owner,status from dba_objects where status='INVALID';

  • Include option
INCLUDE parameter is used, only those objects specified by it will be included in the export/import.

Export Source DB

SQL> select * from dba_directories;

OWNER       DIRECTORY_NAME        DIRECTORY_PATH
-------------------------------------------------------------------------
SYS         DATA_PUMP_DIR        /orahm/app/oracle/admin/db01/dpdump

$expdp directory= DATA_PUMP_DIR schemas=ABC  include=TABLE:”IN(“EMP’,’DEPT’) dumpfile= exp-schema.dmp logfile= exp-schmea.log

scp /orahm/app/oracle/admin/db01/dpdump/exp-schema.dmp oracle@targetdb:/orahm/app/oracle/admin/db01/dpdump/

Import Target DB

$impdp directory= DATA_PUMP_DIR schemas=ABC dumpfile= exp-schema.dmp logfile=imp-schema.log

Check invalid object and compile if required.

select object_name from dba_objects where owner=’ABC’ and status='INVALID' ;
compiling invalid object.

ALTER PROCEDURE <PROCEDURE_NAME> COMPILE;

  • Creating a Consistent Export
CONSISTENT=Y parameter to indicate the export should be consistent to a point in time

Export Source DB

SQL> select * from dba_directories;
OWNER       DIRECTORY_NAME        DIRECTORY_PATH
-------------------------------------------------------------------------
SYS         DATA_PUMP_DIR        /orahm/app/oracle/admin/db01/dpdump

$expdp directory= DATA_PUMP_DIR tables=owner.table_name dumpfile=exp-tab.dmp logfile=exp-tab.log consistent=y

scp /orahm/app/oracle/admin/db01/dpdump/exp-tab.dmp  oracle@targetdb:/orahm/app/oracle/admin/db01/dpdump/

Import Target DB

$impdp directory= DATA_PUMP_DIR tables=owner.table_name dumpfile=exp-tab.dmp logfile=exp-tab.log

  • Network based import
NETWORK_LINK parameter identifies a database link to be used as the source for a network export/import.

Export Source DB

SQL> select * from dba_directories;
OWNER       DIRECTORY_NAME        DIRECTORY_PATH
-------------------------------------------------------------------------
SYS         DATA_PUMP_DIR        /orahm/app/oracle/admin/db01/dpdump

Create the db link on on local db which is point to source db for export task.It will export the source db and put the dumpfile in dump directory

sql>CREATE DATABASE LINK remote_expdp CONNECT TO sys IDENTIFIED BY sys123 USING 'DB01';

$expdp directory= DATA_PUMP_DIR tables=owner.table_name network_link=remote_expdp dumpfile=exp-tab.dmp logfile=exp-tab.log

Import Target DB

Create the db link on local DB which is point to source db. Here it will directly import the data using netwok link option without dumpfile of source db.

sql>CREATE DATABASE LINK remote_impdp CONNECT TO sys IDENTIFIED BY sys123 USING 'DB01';

$impdp directory= DATA_PUMP_DIR tables=owner.table_name logfile=exp-tab.log network_link=remote_impdp


Conclusion

In this article we have learnt different Data Pump (expdp/impdb) scenarios.

No comments:

Post a Comment

Comparing Oracle Database Appliance X8-2 Model Family

September 2019 Oracle announced Oracle Database Appliance X8-2 (Small, Medium and HA). ODA X8-2 comes with more computing resources com...