Oracle数据泵导出impdp/expdp

最近项目上用测试数据库,需要从生产上导出数据,然后本地数据库导入操作,使用exp/imp一直报错,显示文件头无法识别,因此改换成数据泵导入导出,因此进行记录。从中也发现数据泵导入导出比常规imp/exp导入导出要快很多

数据泵是服务器提供的功能,因此从客户机不能使用数据泵导入导出操作,不知道这个观点对不对,没有尝试过

逻辑目录

  • 常规查看逻辑路径的方式
    常规情况下,一般数据库会有默认的,可以打开PLSQL,在左侧Objects栏中可以看到默认的数据泵导入导出路径目录,具体如下图所示
  • 命令方式查看逻辑路径方式
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    [oracle@MCDB ~]$ sqlplus /nolog

    SQL*Plus: Release 11.2.0.4.0 Production on Thu Mar 7 14:59:54 2019

    Copyright (c) 1982, 2013, Oracle. All rights reserved.

    SQL> conn jnmcbusi/123456;
    Connected.
    SQL> select * from dba_directories;

    OWNER DIRECTORY_NAME DIRECTORY_PATH
    ------------------------------ ------------------------------
    SYS DUMP_DIR /home/mgplat_bak/dump_dir

    SYS XMLDIR /home/oracle/app/oracle/product/11.2.0/dbhome_1/rdbms/xml

    SYS ORACLE_OCM_CONFIG_DIR /home/oracle/app/oracle/product/11.2.0/dbhome_1/ccr/hosts/MCDB/state

    SYS DATA_PUMP_DIR /home/oracle/app/admin/jnmcdb/dpdump/

    SYS ORACLE_OCM_CONFIG_DIR2 /home/oracle/app/oracle/product/11.2.0/dbhome_1/ccr/state

创建逻辑目录

如果没有逻辑目录,可以进行创建,创建目前知道的有两种方法,创建的时候一定要记得,保证服务器上有这个目录,如果没有,先手动创建,因为Oracle不会创建物理路径

  • 在PLSQL中右键Directories目录,然后点击New...,打开创建界面,然后填写NamePath这里要注意,填写的Path是服务器上的路径地址,如果是Linux,也要填写服务器上的地址

  • 使用命令创建逻辑目录
    使用命令创建的时候最好是sysdba,如果没有,也可以使用普通用户尝试一下,我的是成功

    1
    2
    3
    4
    5
    6
    7
    8
    [oracle@MCDB ~]$ sqlplus /nolog
    sql> conn username/password@orcl;
    sql> create directory dump_dir as '/home/mgplat_bak/dump_dir'

    ## `expdp`导出数据
    - 导出用户及对象
    ```sql
    expdp username/password@orcl dumpfile=daba_back.dmp directory=dump_dir schemas=jnmcbusi
  • 导出指定表

    1
    expdp username/password@orcl dumpfile=daba_back.dmp directory=dump_dir tables=table1,table2
  • 按条件查询导出

    1
    expdp username/password@orcl dumpfile=daba_back.dmp directory=dump_dir tables=table1 query='where deptno=20'
  • 按表空间导出

    1
    expdp username/password@orcl dumpfile=tablespace.dmp directory=dump_dir tablespaces=temp,example
  • 导出整个数据库

    1
    expdp system/manager@orcl directory=dump_dir dumpfile=full.dmp full=y

impdp导入数据

导入之前确认用户已经创建,如果没有创建,使用下面的命令创建用户

  • 创建表空间

    1
    create tablespace tb_name datafile 'D:\tablespace\tb_name.dbf' size 1024m AUTOEXTEND ON;
  • 创建用户

    1
    create user user_name identified by A123456a default tablespace tb_name temporary tablespace TEMP;
  • 用户授权

    1
    2
    3
    sql>grant read,write on directory dump_dir to user_name;

    sql>grant dba,resource,unlimited tablespace to user_name;
  • 导入用户

    1
    impdp scott/tiger@orcl directory=dump_dir dumpfile=expdp.dmp schemas=scott;
  • 导入表

    1
    impdp system/manager@orcl directory=dump_dir dumpfile=expdp.dmptables=scott.dept,scott.emp remap_schema=scott:system;
  • 导入表空间

    1
    impdp system/manager@orcl directory=dump_dir dumpfile=tablespace.dmp tablespaces=example;
  • 导入数据库

    1
    impdb system/manager@orcl directory=dump_dir dumpfile=full.dmp full=y;
  • 追加数据

    1
    impdp system/manager@orcl directory=dump_dir dumpfile=expdp.dmp schemas=systemtable_exists_action