当前文档以Oracle 11G官方文档为参考
Data Pump的介绍
Data Pump的引入
在Oracle数据库的管理过程中,我们总是不可避免的会遇到开发人员让你将这个数据库(Oracle)中的数据导入到另一个数据库(Oracle)中。如果需要导入的对象的数据量较小,我们还能使用exp和imp这种工具来传输。当需要导入的数据量很大时,使用exp和imp的时间会很长,甚至会直接卡死,严重影响到开发人员或者其他数据人员的使用。因此,Oracle从10G开始,就引入了新的工具,目的就是为了替代传统的dmp和imp。
新引入的工具名称为Data Pump,中文叫数据泵,官网描述为支持数据和元数据从一个数据库到另一个数据库的高速移动。顾名思义,用泵来抽取数据,速度是非常快的,下面就简单介绍一下Data Pump为什么快?
Data Pump的组件
Data Pump(数据泵)由三部分组成:
- 命令行客户端(expdp和impdp)
- DBMS_DATAPUMP PL/SQL程序包
- DBMS_METADATA PL/SQL程序包
客户端使用DBMS_DATAPUMP PL/SQL程序包来执行导出和导入命令,使用命令行输入的参数,这些参数支持导出和导入完整数据库或数据库对象的数据和元数据。当元数据被移动时,数据泵使用DBMS_METADATA PL/SQL程序包,该程序包提供了一个用于提取、操作和重新创建字典源数据的集中工具。
Data Pump移动数据的五种方法
Data Pump在导入和导出数据库的过程中,一共有五种方法。这些方法分别是:
- 数据文件复制(传输表空间)
- 直接路径
- 外部表
- 传统路径
- 网络链接
其中,只有数据文件复制和网络链接是手动配置,其他三种是在导出或导入的过程中,自动根据一定规则去调整。
数据文件复制(传输表空间)
数据文件复制的介绍
数据文件复制,顾名思义,它其实就是将源数据库的数据文件复制到目标数据库,不需要数据泵解释或更改数据,只导出源文件的结构信息(元数据)到转储文件中。从这种方法的原理上,能够看出他主要是依赖两个数据库之间传输的速度,这也就证明官网说的数据文件复制是这几种方法中最快的。
使用数据文件复制的限制
如果要使用数据文件复制,需要满足两个条件:
- 源数据库和目标数据库的字符集必须相同。
-
直接路径加载
直接路径加载的介绍
直接路径加载是除数据文件复制之外最快的方法。在这种方法中,数据的SQL层被绕过,行在转储文件中加载和卸载,只需要很少的解释。当表结构符合规则时,数据泵会自动使用直接路径加载来导出和导入数据。
不使用直接路径加载的情况
如果在表中存在以下情况,则使用外部表加载数据:
分区表中只导单个分区,但单个分区中存在全局索引。
- LOB列存在域索引(domain index)。
- 表是簇表(cluster)。
- There is an active trigger on a preexisting table.
- Fine-grained access control is enabled in insert mode on a preexisting table.
- A table contains BFILE columns or columns of opaque types.
- A referential integrity constraint is present on a preexisting table.
- A table contains VARRAY columns with an embedded opaque type.
- The table has encrypted columns.
- The table into which data is being imported is a preexisting table and at least one of the following conditions exists:
- There is an active trigger
- The table is partitioned
- Fine-grained access control is in insert mode
- A referential integrity constraint exists
- A unique index exists
- Supplemental logging is enabled and the table has at least one LOB column.
- 数据泵参数使用了QUERY,SAMPLE和REMAP_DATA。
- A table contains a column (including a VARRAY column) with a TIMESTAMP WITH TIME ZONE datatype and the version of the time zone data file is different between the export and import systems.
不使用直接路径卸载的情况
如果在表中存在以下情况,则使用外部表卸载数据:
- 细粒度的访问控制已启用(SELECT)。
- 表是一个队列表(queue table)。
- The table contains one or more columns of type BFILE or opaque, or an object type containing opaque columns.
- 表包含加密列。
- The table contains a column of an evolved type that needs upgrading.
- The table contains a column of type LONG or LONG RAW that is not last.
数据泵参数使用了QUERY,SAMPLE和REMAP_DATA。
外部表
外部表的介绍
如果未使用数据文件复制且无法使用直接路径加载时,就会采用外部表。外部表会创建一个外部表,该表映射到数据库表的转储文件数据,然后使用sql引擎移动数据。在转储文件中,直接路径加载的数据和外部表的数据是完全相同的,这也就表示,数据库导出和导入时采用的方法可能是不一样的。例如,导出时使用直接路径加载,导入时使用外部表。
传统路径
传统路径的介绍
在存在表冲突的情况下,Data Pump不能使用直接路径加载或外部表将数据加载到表中,这时会采用传统路径,性能会受到较大的影响。
网络链接
网络链接的介绍
通过指定NETWORK_LINK参数可以指定Data Pump采用网络链接方式来传输数据。
在指定NETWORK_LINK后,Data Pump会直接使用SELECT语句通过网络链接从远程数据库中查询数据,然后INSERT到目标数据库,不生成二进制转储文件。从定义中我们能够看出,它主要是依赖于网络的传输速度,通常网络的速度会比硬盘读写速度慢很多,这也就表名它是这几种方法中最慢的。支持的数据库链接
公共或共享
- 固定用户
- 已连接用户
不支持的数据库链接
The database link type, Current User, is not supported for use with Data Pump Export or Import.结论
从上文中,我们介绍了数据泵的五种导出方法,而这五种导出方法的性能由快到慢分别是数据文件复制(传输表空间)、直接路径加载、外部表、传统路径和网络链接,但同样的,他们有具体的使用场景和局限性,需要根据生产环境来协调使用。