因为我只需要一个对象,明确包含该对象比起明确不包括其它对象要容易得多。我的 INCLUDE 参数值的第一部分是关键字 TABLE ,表明我要导入的对象是一个数据表(其它的可能是一个函数或一个过程)。 接下来是一个冒号,然后是一个 WHERE 子句的谓词。我明确希望数据表名为 GNIS ,所以这个谓词是 "= 'GNIS'" 。如果必要,则你可以写出多个详细的谓词。通过 INCLUDE 和 EXCLUDE 参数,你可以确切地指出以什么样的粒度导入或导出。我建议你仔细地阅读关于这两个参数的文档。它们的功能之强大和多功能性是我在本文中所无法描述的。
我可以很轻松地完成该模式的改变,将来自 GNIS 模式的数据表重新映射到 MICHIGAN 模式:
REMAP_SCHEMA=gennick: michigan
我只需要关于密歇根州的数据行。为此,我可以使用 QUERY 参数来指定一个 WHERE 子句:
QUERY="WHERE gnis_state_abbr='MI'"
QUERY 在老的实用程序中也有,但只能用于导出操作。数据泵使 QUERY 也能用于导入操作,因为数据泵利用了 Oracle 较新的外部数据表功能。只要可能,数据泵会选择直接路径来导出或导入数据,包括从数据库数据文件中读取数据然后直接写到一个导出转储文件中,或读取转储文件然后直接写入数据库数据文件中。但是,当你指定了 QUERY 参数时,数据泵将使用一个外部数据表。对于一个导入任务,数据泵将使用 ORACLE_DATAPUMP 存取驱动程序建立一个外部数据表,并执行一条 INSERT...SELECT...FROM 语句。
我的最后一个要求是避免导入与已被导出的数据表相关的存储参数。我希望 MICHIGAN 模式中的新 GNIS 表沿用该模式的默认表空间的默认存储参数。原因是 MICHIGAN 的默认表空间不足以容纳该数据表的本来大小,但是是以仅仅容纳与密歇根有关的数据行。通过 TRANSFORM 参数,我可以告诉导入任务不要包含与原始表相关的任何数据段属性:
TRANSFORM=SEGMENT_ATTRIBUTES:N
这看起来是件小事,但以前有很多次我都希望老的导入实用程序的 TRANSFORM 参数有这样的功能。我在试图将少量生产数据导入到测试系统中时经常失败,因为即使存储生产数据的各个区段当中许多是空的,其数据量也比我测试系统所能支持的大得多。对于只导入一张数据表的情况,预先建立数据表是解决这个问题的一个办法。然而,随着数据表的增多,预先建表会很麻烦。而 TRANSFORM 这样的简单开关可以轻松地将转储文件中所有数据段的属性全体忽略掉。
将我上面描述的所有选项放到一个参数文件中后,我可以调用导入实用程序,如下所示:
impdp michigan/password
parfile=gnis_import.par
当作为一个没被授权的用户进行导入时,你需要连接到目标模式。如果你拥有 IMP_FULL_DATABASE 角色,那么你可以用自己的身份登录,然后导入到任何目标模式。
八、性能和多功能性
Oracle 数据泵比起以前的导出和导入实用程序在性能上有很大的提高。这种性能提高大部分来自于读写转储文件的并行操作。你可以指定并行程度来达到你所要求的速度与资源消耗的折中。
九、下载本文所使用的示例数据
数据泵还很好地利用了 Oracle 数据库其他最新开发的创新特性。 Flashback (回闪)用于确保导出数据的一致性,而 FLASHBACK_SCN 和 FLASHBACK_TIME 参数使你能够完全控制这一功能。直接路径( direct-path ) API 用于在任何可能的时候提高性能,当直接路径 API 不能使用时,用外部数据表和新的 ORACLE_DATAPUMP 外部数据表存取驱动程序来传输数据。
数据泵除了提供全新的性能外还为你提供灵活性。这表现在 INCLUDE 和 EXCLUDE 参数、 QUERY 参数、 TRANSFORM 参数和其他参数的实现中,这些参数使你能够精细地控制被加载和卸载的数据和对象。
人们一直在不断地对 " 大数据" 的含意进行重新定义,这种数据库容量之大在十年前还只能是梦想。在这样的世界里,数据泵对于你的数据库管理员所用的工具库是个不错的补充,使你能够以前所未有的速度对数据库进行数据导入和导出。
Jonathan Gennick ( Jonathan@Gennick.com ) 是一名经验丰富的 Oracle 数据库管理员和 Oracle 认证
文章来源于领测软件测试网 https://www.ltesting.net/