Oracle impdp与expdp进行数据资产快速迁移

背景

对于Oracle数据迁移任务,官方提供了一系列工具[1],应用较多的是Data Pump工具和SQL*Loader工具

Data Pump工具主要适用于Oracle数据库之间数据迁移,SQL*Loader工具偏向于外部数据文件导入。

  • Oracle Data Pump technology enables very high-speed movement of data and metadata from one database to another.
  • SQL*Loader loads data from external files into Oracle Database tables.
    © Oracle 说的😎

Data Pump工具由以下三个模块组成:

  1. Command-line clients, expdp and impdp
  2. DBMS_DATAPUMP PL/SQL package (also known as the Data Pump API)
  3. DBMS_METADATA PL/SQL package (also known as the Metadata API)

本文主要介绍expdpimpdp 的使用方法。

基本用法

环境: Windows 10 or latest, Oracle 11g or latest version

目录创建与授权

Data Pump工具导入导出的文件需要储存在实体目录下,并在Oracle中创建虚拟目录名称与之映射。

目录查询

以管理员账号登陆sqlplus

SQL>conn system/manger@orcl as sysdba
SQL>select * from dba_directories;

可以查看当前存在的目录,结果如下:

OWNER                          DIRECTORY_NAME
------------------------------ -----------------------------
DIRECTORY_PATH
------------------------------------------------------------
SYS                            XMLDIR
c:\ade\aime_dadvfh0169\oracle/rdbms/xml

DIRECTORY_PATH是实体目录位置,请确保已经创建此目录
DIRECTORY_NAME是虚拟目录名称

目录创建

可以使用已经存在的目录,或者创建新的目录(推荐)

SQL>create directory dump_dir as 'd:\test\dump';

dump_dir自定义名称,对应DIRECTORY_NAME
创建后可以再次查询是否创建成功。

目录授权

给数据恢复或导出用户授权[2]

SQL>grant read,write on directory dump_dir to scott;

导入与导出

expdp导出

导出生成的dmp会保存在上面创建的实体目录中。

  1. 导出用户

    expdp scott/tiger@orcl schemas=scott dumpfile=expdp.dmp directory=dump_dir;
  2. 导出表

    expdp scott/tiger@orcl tables=emp,dept dumpfile=expdp.dmp directory=dump_dir;
  3. 按查询条件导

    expdp scott/tiger@orcl directory=dump_dir dumpfile=expdp.dmp tables=emp query='where deptno=20';
  4. 按表空间导

    expdp system/manager@orcl directory=dump_dir dumpfile=tablespace.dmp tablespaces=temp,example;
  5. 导整个数据库

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

impdp导入

导入之前,需要确保目录创建与授权完成,并且dmp文件已经拷贝至对应目录下。

  1. 导入用户(从用户scott导入到用户scott)

    impdp scott/tiger@orcl directory=dump_dir dumpfile=expdp.dmp schemas=scott;
  2. 导入表(从scott用户中把表dept和emp导入到system用户中)

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

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

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

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

注意事项

  1. expdp和impdp是服务端工具程序,只能在oracle服务端使用,不能在客户端使用[3]
  2. imp/exp命令与impdp/expdp工具产生的文件不通用,请勿混淆[4]

Reference