首页 > 代码库 > Oracle expdp/impdp 使用示例

Oracle expdp/impdp 使用示例

1. 创建目录

 

       使用数据泵之前,需要创建一个存放文件的目录。 这个目录要写入Oracle的数据字典中才能识别。

 

 

 

1)先查看一下已经存在的目录:

 

SQL> col owner format a5

 

SQL> col directory_name format a25

 

SQL> select * from dba_directories;

 

 

 

OWNER DIRECTORY_NAME            DIRECTORY_PATH

 

----- ------------------------- ------------------------------------------------

 

SYS   BACKUP                    /u01/backup

 

 

 

2)把我们把backup 这个目录删除掉,在重新创建一下

 

SQL> drop directory backup;

 

Directory dropped.

 

SQL> select * from dba_directories;

 

SQL> create directory backup as ‘/u01/backup‘;

 

Directory created.

 

SQL> select * from dba_directories;

 

OWNER DIRECTORY_NAME            DIRECTORY_PATH

 

----- ------------------------- ------------------------------------------------

 

SYS   BACKUP                    /u01/backup

 

 

 

3)注意事项:

 

       我这里是使用sys用户来进行操作的。 如果是其他用户,那么就需要对这个用户进行赋权。

 

SQL> grant create any directory to system;

 

Grant succeeded.

 

 

 

SQL> select * from dba_sys_privs where grantee=‘SYSTEM‘;

 

 

 

grantee        privilege                       adm

 

------------------------------ ----------------------------  ------------

 

system        create any directory             no

 

system       global query rewrite              no

 

system       create materialized view          no

 

system       create table                     no

 

system       unlimited tablespace             yes

 

system       select any table                  no

 

 

 

       如果是其他用户使用sys创建的目录,也需要进行赋权,如:

 

SQL> grant read,write on directory backup to SYSTEM; 

 

Grant succeeded.

 

 

 

 

 

2. 创建测试数据

 

       我们需要演示expdp/impdp的一些功能,所以需要创建2个用户和对应的表空间,并且创建一些测试的数据。 SQL 代码如下:

 

 

 

SQL> create tablespace dave datafile ‘/u01/app/oracle/oradata/dave/dave01.dbf‘ size 50m;

 

SQL> create tablespace bl datafile ‘/u01/app/oracle/oradata/dave/bl01.dbf‘ size 50m;

 

SQL> create user dave identified by dave default tablespace dave temporary tablespace temp;

 

SQL> create user bl identified by bl default tablespace bl temporary tablespace temp;

 

SQL> grant read,write on directory backup to dave,bl;

 

SQL> grant connect,resource to dave,bl;

 

 

 

 

 

SQL> conn dave/dave;

 

Connected.

 

SQL> create table dave(id number,name varchar2(10));

 

Table created.

 

SQL> begin

 

  2  for i in 1 .. 10 loop

 

  3  insert into dave values(i,‘dave‘);

 

  4  end loop;

 

  5  end;

 

  6  /

 

PL/SQL procedure successfully completed.

 

SQL> commit;

 

Commit complete.

 

SQL> select * from dave;

 

        ID NAME

 

---------- ----------

 

         1 dave

 

         2 dave

 

         3 dave

 

         4 dave

 

         5 dave

 

         6 dave

 

         7 dave

 

         8 dave

 

         9 dave

 

        10 dave

 

10 rows selected.

 

 

 

SQL> conn bl/bl;

 

Connected.

 

SQL> create table bl(id number,name varchar2(10));

 

 

 

Table created.

 

 

 

SQL> begin

 

  2  for i in 10 .. 20 loop 

 

  3  insert into bl values(i,‘bl‘);

 

  4  end loop;

 

  5  commit;

 

  6  end;

 

  7  /

 

 

 

PL/SQL procedure successfully completed.

 

 

 

SQL> select * from bl;

 

 

 

        ID NAME

 

---------- ----------

 

        10 bl

 

        11 bl

 

        12 bl

 

        13 bl

 

        14 bl

 

        15 bl

 

        16 bl

 

        17 bl

 

        18 bl

 

        19 bl

 

        20 bl

 

 

 

11 rows selected.

 

 

 

 

 

3. 开始测试

 

3.1 FULL=Y全库导出

 

1)不指定Job_name

 

[oracle@qs-dmm-rh2 ~]$ expdp /‘/ as sysdba/‘ directory=backup full=y dumpfile=fullexp.dmp logfile=fullexp.log parallel=2;

 

 

 

-- 注意使用sys 的格式,还有full=y 导出的是非syssystem用户的对象。

 

Export: Release 10.2.0.4.0 - Production on Friday, 18 March, 2011 15:05:54

 

 

 

Copyright (c) 2003, 2007, Oracle.  All rights reserved.

 

 

 

Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Production

 

With the Partitioning, OLAP, Data Mining and Real Application Testing options

 

Starting "SYS"."SYS_EXPORT_FULL_02":  ‘/******** AS SYSDBA‘ directory=backup full=y dumpfile=fullexp.dmp logfile=fullexp.log parallel=2 

 

Estimate in progress using BLOCKS method...

 

Processing object type DATABASE_EXPORT/SCHEMA/TABLE/TABLE_DATA

 

Total estimation using BLOCKS method: 18.68 MB

 

……

 

……

 

Master table "SYS"."SYS_EXPORT_FULL_02" successfully loaded/unloaded

 

******************************************************************************

 

Dump file set for SYS.SYS_EXPORT_FULL_02 is:

 

  /u01/backup/fullexp.dmp

 

Job "SYS"."SYS_EXPORT_FULL_02" successfully completed at 15:07:27

 

 

 

       expdp/impd Job形式的,会调用DBMS_DATAPUMP PL/SQL包,这个API提供高速的导出导入功能;还有DBMS_METADATA PL/SQL包,这个包是将metadata(对象定义)存储在XML里。 所有的进程都能load unload 这些metadata。 

 

       在备份???间,会自动的生成一张与Job_name 相同名称的表, 该表在备份期间保存metadata数据。 当备份技术后,自动删除该表。 

 

       我们可以使用SQL

 

              SQL>select *  FROM dba_datapump_jobs

 

       查看Job 的信息。 如果意外情况导致备份Job失败,那么对应保存metadata的表,还是会存在。 这个时候,如果查询dba_datapump_jobs,会显示该Jobnot running。 这时候,我们只需要drop 掉对应的表,在查询dba_datapump_jobs。 就没有记录了。 这个也是一种处理方法。

 

       

 

       在开始我就说了,这里没有指定Job name。 所以系统自动给我们生成了一个:SYS_EXPORT_FULL_02。 

 

       默认是从SYS_EXPORT_FULL_01开始,因为我之前有一个没有运行的Job,所以这里从2开始了。

 

 

 

2)指定Job_name

 

[oracle@qs-dmm-rh2 ~]$ expdp /‘/ as sysdba/‘ directory=backup full=y dumpfile=fullexp3.dmp logfile=fullexp3.log parallel=2 job_name=daveJob;

 

--在这里我指定了Job_name

 

Export: Release 10.2.0.4.0 - Production on Friday, 18 March, 2011 15:29:56

 

 

 

Copyright (c) 2003, 2007, Oracle.  All rights reserved.

 

 

 

Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Production

 

With the Partitioning, OLAP, Data Mining and Real Application Testing options

 

Starting "SYS"."DAVEJOB":  ‘/******** AS SYSDBA‘ directory=backup full=y dumpfile=fullexp3.dmp logfile=fullexp3.log parallel=2 job_name=daveJob 

 

Estimate in progress using BLOCKS method...

 

Processing object type DATABASE_EXPORT/SCHEMA/TABLE/TABLE_DATA

 

Total estimation using BLOCKS method: 18.68 MB

 

……

 

……

 

……

 

Master table "SYS"."DAVEJOB" successfully loaded/unloaded

 

******************************************************************************

 

Dump file set for SYS.DAVEJOB is:

 

  /u01/backup/fullexp3.dmp

 

Job "SYS"."DAVEJOB" successfully completed at 15:31:06

 

 

 

 

 

3.2 全库导入

 

[oracle@qs-dmm-rh2 archivelog]$ impdp /‘/ as sysdba/‘ directory=backup full=y dumpfile=fullexp3.dmp logfile=fullexp3.log parallel=2 job_name=daveJob table_exists_action=replace;

 

 

 

       注意: 导入的过程会生成归档日志,所以,如果是Data Guard 环境,只需要导入主库就可以了。

 

 

 

 

 

3.3  导出表

 

$ expdp  /‘/ as sysdba/‘ directory=backup dumpfile=table.dmp logfile=table.log tables=dave.dave,dave.dba;

 

注意: 这里必须是同一个schema下的表

 

 

 

或者:

 

$expdp  dave/dave directory=backup dumpfile=table.dmp logfile=table.log tables=dave, dba;

 

 

 

3.4 导入表

 

$impdp dave/dave directory=backup dumpfile=table.dmp logfile=table.log tables=dave,dba;

 

 

 

 

 

3.5 导出用户

 

$ expdp  /‘/ as sysdba/‘ directory=backup dumpfile=user.dmp logfile=user.log schemas=dave,bl;

 

 

 

这里是同时导出多个用户

 

 

 

3.6 导入用户

 

$ impdp  /‘/ as sysdba/‘ directory=backup dumpfile=user.dmp logfile=user.log schemas=dave,bl table_exists_action=replace;

 

 

 

 

 

3.7 导出表空间

 

$ expdp  /‘/ as sysdba/‘ directory=backup dumpfile=tbs.dmp logfile=tbs.log tablespaces=dave,bl;

 

 

 

--同时导出2个表空间

 

 

 

3.8 导入表空间

 

$ impdp  /‘/ as sysdba/‘ directory=backup dumpfile=user.dmp logfile=user.log tablespaces=dave table_exists_action=replace;

 

--导入一个表空间

 

 

 

$ impdp  /‘/ as sysdba/‘ directory=backup dumpfile=user.dmp logfile=user.log tablespaces=dave,bl table_exists_action=replace;

 

 

 

--导入2个表空间

 

本篇文章来源于 Linux公社网站(www.linuxidc.com)  原文链接:http://www.linuxidc.com/Linux/2011-09/43891.htm