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_DATABASE
和 DBA
权限的用户才能做整个数据库导入操作。
命令行交互模式
命令行交互模式下,使用 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/