zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    jwt原理
    图书管理系统后端
    图书管理系统前端
    图书管理前端页面
    Linux多任务: exec 和fork()的联用
    CPU 字长与存储器位宽不一致处理
    关键字volatule
    linux C 中断程序:利用队列保存中断类型
    Linux下的Make与Makefile
    C :assert() 的用法
  • 原文地址:https://www.cnblogs.com/jack-Star/p/3926441.html
Copyright © 2011-2022 走看看