Oracle 的 EXP/IMP 命令用于实现对数据库的 导出/导入 操作,EXP 命令用于将数据从数据库服务端导出至本地并生成 DMP 文件,IMP 命令用于将本地的数据库 DMP 文件导入至数据库服务端。

EXP 导出

EXP 导出工具将数据库中数据备份压缩成一个二进制系统文件,可以在不同 OS 间迁移

它有三种模式:

  • 用户模式: 导出用户所有对象以及对象中的数据;
  • 表模式: 导出用户所有表或者指定的表;
  • 整个数据库: 导出数据库中所有对象。

命令行交互模式

命令行交互模式下,使用 EXP 导出表:

C:\Windows\system32>cd c:\backup

c:\backup>exp

Export: Release 11.2.0.3.0 - Production on 星期二 1月 8 18:53:59 2019

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.


用户名: scott
口令:

连接到: Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
输入数组提取缓冲区大小: 4096 >

 导出文件: EXPDAT.DMP >

(1)E(完整的数据库), (2)U(用户) 或 (3)T(表): (2)U > 3

导出表数据 (yes/no): yes > yes

压缩区 (yes/no): yes > no

已导出 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集

即将导出指定的表通过常规路径...
要导出的表 (T) 或分区 (T: P): (按 RETURN 退出) > emp

. . 正在导出表                             EMP导出了          14 行
要导出的表 (T) 或分区 (T: P): (按 RETURN 退出) >

成功终止导出, 没有出现警告。

命令行非交互模式

全库导出

D:\>exp system/oracle@127.0.0.1:1521/orcl file=d:\full.dmp log=full.log full=y

Export: Release 11.2.0.4.0 - Production on 星期三 1 9 13:41:27 2019

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.


连接到: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, Oracle Label Security, OLAP, Data Mining,
Oracle Database Vault and Real Application Testing option
已导出 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集

即将导出整个数据库...
. 正在导出表空间定义
. 正在导出概要文件
. 正在导出用户定义
. 正在导出角色
. 正在导出资源成本
. 正在导出回退段定义
. 正在导出数据库链接
. 正在导出序号
. 正在导出目录别名
. 正在导出上下文名称空间
. 正在导出外部函数库名
. 导出 PUBLIC 类型同义词
. 正在导出专用类型同义词
. 正在导出对象类型定义
. 正在导出系统过程对象和操作
. 正在导出 pre-schema 过程对象和操作
. 正在导出簇定义
. 即将导出 SYSTEM 的表通过常规路径...
. . 正在导出表                     DEF$_AQCALL导出了           0 
. . 正在导出表                    DEF$_AQERROR导出了           0 

导出 SCHEMA

D:\>exp system/oracle@127.0.0.1:1521/orcl owner=scott file=d:\scott.dmp log=scott.log

Export: Release 11.2.0.4.0 - Production on 星期三 1 9 13:50:48 2019

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.


连接到: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, Oracle Label Security, OLAP, Data Mining,
Oracle Database Vault and Real Application Testing option
已导出 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集

即将导出指定的用户...
. 正在导出 pre-schema 过程对象和操作
. 正在导出用户 SCOTT 的外部函数库名
. 导出 PUBLIC 类型同义词
. 正在导出专用类型同义词
. 正在导出用户 SCOTT 的对象类型定义
即将导出 SCOTT 的对象...
. 正在导出数据库链接
. 正在导出序号
. 正在导出簇定义
. 即将导出 SCOTT 的表通过常规路径...
. . 正在导出表                           BONUS导出了           0 
. . 正在导出表                            DEPT导出了           4 
. . 正在导出表                             EMP导出了          14 
. . 正在导出表                            JOBS导出了          14 
. . 正在导出表                        SALGRADE导出了           5 
. . 正在导出表                      SYS_ACTION导出了          16 
. . 正在导出表                          T_CLOB导出了           1 
. 正在导出同义词
. 正在导出视图
. 正在导出存储过程
. 正在导出运算符

导出当前用户的指定表

D:\>exp scott/tiger@127.0.0.1:1521/orcl tables=(emp, dept) file=d:\scott_tables.dmp log=scott_tables.log

Export: Release 11.2.0.4.0 - Production on 星期三 1 9 13:55:00 2019

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.


连接到: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, Oracle Label Security, OLAP, Data Mining,
Oracle Database Vault and Real Application Testing option
已导出 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集

即将导出指定的表通过常规路径...
. . 正在导出表                             EMP导出了          14 
. . 正在导出表                            DEPT导出了           4 
成功终止导出, 没有出现警告。

导出其它用户的指定表

D:\>exp system/oracle@127.0.0.1:1521/orcl tables=(scott.emp, scott.dept) file=d:\scott_tables.dmp log=scott_tables.log

Export: Release 11.2.0.4.0 - Production on 星期三 1 9 13:53:11 2019

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.


连接到: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, Oracle Label Security, OLAP, Data Mining,
Oracle Database Vault and Real Application Testing option
已导出 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集

即将导出指定的表通过常规路径...
当前的用户已更改为 SCOTT
. . 正在导出表                             EMP导出了          14 
. . 正在导出表                            DEPT导出了           4 
成功终止导出, 没有出现警告。

仅导出表结构,不导出表数据

D:\>exp system/oracle@127.0.0.1:1521/orcl tables=(scott.emp, scott.dept) file=d:\scott_tables.dmp log=scott_tables.log rows=n

Export: Release 11.2.0.4.0 - Production on 星期三 1 9 13:56:56 2019

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.


连接到: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, Oracle Label Security, OLAP, Data Mining,
Oracle Database Vault and Real Application Testing option
已导出 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集
: 将不导出表数据 ()

即将导出指定的表通过常规路径...
当前的用户已更改为 SCOTT
. . 正在导出表                             EMP
. . 正在导出表                            DEPT
成功终止导出, 没有出现警告。

导出表的指定数据

D:\>exp system/oracle@127.0.0.1:1521/orcl tables=(scott.emp) file=d:\scott_emp.dmp log=scott_emp.log query=\" where deptno=10 \"

Export: Release 11.2.0.4.0 - Production on 星期三 1 9 14:03:23 2019

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.


连接到: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, Oracle Label Security, OLAP, Data Mining,
Oracle Database Vault and Real Application Testing option
已导出 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集

即将导出指定的表通过常规路径...
当前的用户已更改为 SCOTT
. . 正在导出表                             EMP导出了           3 
EXP-00091: 正在导出有问题的统计信息。
EXP-00091: 正在导出有问题的统计信息。
导出成功终止, 但出现警告。

导出分区表

SQL> create table p_emp (
  empno    NUMBER(4) not null,
  ename    VARCHAR2(10),
  job      VARCHAR2(9),
  mgr      NUMBER(4),
  hiredate DATE,
  sal      NUMBER(7,2),
  comm     NUMBER(7,2),
  deptno   NUMBER(2)
)
partition by range(hiredate) 
(
  partition p1 values less than (to_date('1981-01-01', 'YYYY-MM-DD')),
  partition p2 values less than (to_date('1982-01-01', 'YYYY-MM-DD')),
  partition p3 values less than (to_date('1990-01-01', 'YYYY-MM-DD'))
);


SQL> insert into p_emp select * from emp;

14 rows inserted


SQL> commit;

Commit complete
  • 导出单个分区
D:\>exp system/oracle@127.0.0.1:1521/orcl file=d:\p_emp.dmp log=d:\p_emp.log tables=(scott.p_emp:p1)

Export: Release 11.2.0.4.0 - Production on 星期三 10 27 16:13:43 2021

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.


连接到: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, Oracle Label Security, OLAP, Data Mining,
Oracle Database Vault and Real Application Testing option
已导出 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集

即将导出指定的表通过常规路径...
当前的用户已更改为 SCOTT
. . 正在导出表                           P_EMP
. . 正在导出分区                              P1导出了           1 
EXP-00091: 正在导出有问题的统计信息。
导出成功终止, 但出现警告。
  • 导出多个分区
D:\>exp system/oracle@127.0.0.1:1521/orcl file=d:\p_emp.dmp log=d:\p_emp.log tables=(scott.p_emp:p1, scott.p_emp:p2)

Export: Release 11.2.0.4.0 - Production on 星期三 10 27 16:14:14 2021

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.


连接到: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, Oracle Label Security, OLAP, Data Mining,
Oracle Database Vault and Real Application Testing option
已导出 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集

即将导出指定的表通过常规路径...
当前的用户已更改为 SCOTT
. . 正在导出表                           P_EMP
. . 正在导出分区                              P1导出了           1 
. . 正在导出分区                              P2导出了          10 
EXP-00091: 正在导出有问题的统计信息。
导出成功终止, 但出现警告。

IMP 导入

IMP 导入工具可以将 EXP 导出的二进制系统文件导入到数据库中

它有三种模式:

  • 用户模式: 导出用户所有对象以及对象中的数据;
  • 表模式: 导出用户所有表或者指定的表;
  • 整个数据库: 导出数据库中所有对象。

只有拥有 IMP_FULL_DATABASEDBA 权限的用户才能做整个数据库导入操作。

命令行交互模式

命令行交互模式下,使用 IMP 命令导入 DMP 文件:

C:\Windows\system32>cd c:\backup

c:\backup>imp

Import: Release 11.2.0.3.0 - Production on 星期二 1月 8 18:56:46 2019

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

用户名: scott
口令:

连接到: Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

仅导入数据 (yes/no): no > no

导入文件: EXPDAT.DMP>

输入插入缓冲区大小 (最小为 8192) 30720>

经由常规路径由 EXPORT:V11.02.00 创建的导出文件
已经完成 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集中的导入
只列出导入文件的内容 (yes/no): no >

由于对象已存在, 忽略创建错误 (yes/no): no > yes

导入权限 (yes/no): yes >

导入表数据 (yes/no): yes >

导入整个导出文件 (yes/no): no > yes

. 正在将 SCOTT 的对象导入到 SCOTT
. 正在将 SCOTT 的对象导入到 SCOTT
. . 正在导入表                           "EMP"导入了          14 行
即将启用约束条件...
成功终止导入, 没有出现警告。

命令行非交互模式

整库导入

D:\>imp system/oracle@127.0.0.1:1521/orcl file=d:\full.dmp full=y ignore=y

Import: Release 11.2.0.4.0 - Production on 星期三 1 9 15:01:58 2019

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.


连接到: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, Oracle Label Security, OLAP, Data Mining,
Oracle Database Vault and Real Application Testing option

经由常规路径由 EXPORT:V11.02.00 创建的导出文件
已经完成 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集中的导入
. 正在将 SYSTEM 的对象导入到 SYSTEM
. 正在将 ORDDATA 的对象导入到 ORDDATA
. 正在将 OLAPSYS 的对象导入到 OLAPSYS
. 正在将 SYSMAN 的对象导入到 SYSMAN
. 正在将 APEX_030200 的对象导入到 APEX_030200
. 正在将 SYSTEM 的对象导入到 SYSTEM
. 正在将 OLAPSYS 的对象导入到 OLAPSYS
......

导入 SCHEMA

D:\>imp system/oracle@127.0.0.1:1521/orcl file=d:\scott.dmp fromuser=scott touser=scott ignore=y

Import: Release 11.2.0.4.0 - Production on 星期三 1 9 15:10:16 2019

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.


连接到: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, Oracle Label Security, OLAP, Data Mining,
Oracle Database Vault and Real Application Testing option

经由常规路径由 EXPORT:V11.02.00 创建的导出文件
已经完成 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集中的导入
. 正在将 SCOTT 的对象导入到 SCOTT
. . 正在导入表                         "BONUS"导入了           0 
. . 正在导入表                          "DEPT"导入了           4 
. . 正在导入表                           "EMP"导入了          14 
. . 正在导入表                          "JOBS"导入了          14 
. . 正在导入表                      "SALGRADE"导入了           5 
. . 正在导入表                    "SYS_ACTION"导入了          16 
. . 正在导入表                        "T_CLOB"导入了           1 

导入表

D:\>imp system/oracle@127.0.0.1:1521/orcl file=d:\scott_tables.dmp tables=(emp, dept) fromuser=scott touser=scott ignore=y

Import: Release 11.2.0.4.0 - Production on 星期三 1 9 15:19:07 2019

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.


连接到: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, Oracle Label Security, OLAP, Data Mining,
Oracle Database Vault and Real Application Testing option

经由常规路径由 EXPORT:V11.02.00 创建的导出文件
已经完成 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集中的导入
. 正在将 SCOTT 的对象导入到 SCOTT
. . 正在导入表                           "EMP"导入了          14 
. . 正在导入表                          "DEPT"导入了           4 
即将启用约束条件...
成功终止导入, 没有出现警告。

导入分区表

D:\>imp system/oracle@127.0.0.1:1521/orcl file=d:\p_emp.dmp log=d:\p_emp.log fromuser=scott touser=scott ignore=y

Import: Release 11.2.0.4.0 - Production on 星期三 10 27 16:24:00 2021

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.


连接到: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, Oracle Label Security, OLAP, Data Mining,
Oracle Database Vault and Real Application Testing option

经由常规路径由 EXPORT:V11.02.00 创建的导出文件
已经完成 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集中的导入
. 正在将 SCOTT 的对象导入到 SCOTT
. . 正在导入分区                    "P_EMP":"P1"导入了           1 
. . 正在导入分区                    "P_EMP":"P2"导入了          10 
IMP-00057: 警告: 转储文件可能不含有此表的所有分区数据
成功终止导入, 但出现警告。

使用 PLSQL Developer 工具

在 PL/SQL Developer 工具中,打开 Command Window,使用符号 $,可以完成 EXP/IMP 操作。

导出/导入数据至本地磁盘

$exp system/oracle@127.0.0.1:1521/orcl file=d:\p_emp.dmp log=d:\p_emp.log tables=(scott.p_emp:p1, scott.p_emp:p2)

导出/导入数据至远程磁盘

$exp system/oracle@127.0.0.1:1521/orcl file=\\tsclient\d\p_emp.dmp log=\\tsclient\d\p_emp.log tables=(scott.p_emp:p1, scott.p_emp:p2)

常见问题及解决方案

  • 数据库对象已经存在

一般情况, 导入数据前应该彻底删除目标库数据下的表、 序列、 函数/过程、触发器等;
数据库对象如果已经存在, 按缺省的 IMP 参数, 则会导入失败;
如果用了参数 ignore=y,会把 EXP 文件内的数据内容导入,此时如果表有唯一约束条件, 不合条件的记录将不会被导入,如果表没有唯一约束条件,将造成重复记录。

  • EXP-00011: SCOTT.; 不存在

使用 EXP 命令时,注意是否使用了分号 ;EXP 语句结束是不需要分号的,加上分号可能会出现问题。

原创文章,转载请注明出处:http://www.opcoder.cn/article/19/