ITPub博客

首页 > Linux操作系统 > Linux操作系统 > oracle 数据泵(1)

oracle 数据泵(1)

原创 Linux操作系统 作者:扬州老鬼 时间:2012-11-03 14:25:10 0 删除 编辑

数据泵支持直接路径以及外部表的两种方式加载以及卸载行数据

可以导出:

*属于其他schema的数据库对象

*导入和导出表空间,schema的定义,系统权限,资源计划等

*可以attach、监视、控制他人的导入导出job

*重映射数据库数据文件

*重映射对于schema的操作。


以下情况下,数据泵使用外部表的方式来load数据:

1.       对于分区表,如果在load某个分区的时候,存在全局索引。

2.       对于LOB列,存在一个domain index

3.       簇族表

4.       表上存在一个活动trigger

5.       表开启了insert 精细审计

6.       表中存在 BFILE 、 opaque types的列

7.        表中referential integrity constraint(参照完整性约束)

8.       表中包含VARRAY 列,该列为embedded opaque type

9.       表中的列被加密了

10.   导入数据,导入对象的表满足(存在一个活动trigger、分区,insert 精细审计、包含referential integrity constraint,唯一性index)其中一个条件,使用外部表方式来导入

11.   开启了Supplemental logging ,表中至少包含一个LOB 列

注:如果你的主键或唯一索引是组合的(复合的),就需要为表配置supplemental log,否则就不必,也就是说,如果你的所有表的主键是单列的,那你根本就不必去理会它是什么意思,oracle stream replication的时候如果你更新了主键中的部分字段,那supplemental log的作用就是把该记录其余的组成部分的数据也传输到目标机,否则目标机就存在不确定

以下情况下,数据泵使用外部表的方式unload数据:

1.       表开启了select 模式下的精细审计

2.       表是一个队列表(queue 表)

3.       表包含一个或者多个 BFILE 、 opaque types的列

4.       表包含加密列

5.       一个需要被升级的evolved type(演进类型) 列

6.       一个为LONG or LONG RA

当表很大,并且可以使用并行sql来完成unload和load的时候,也用外部表的方式来完成。

 在Data Pump Job过程中做了些什么?

Data Pump jobs使用一张master table,master process,以及work processes来完成工作。以及对process进行跟踪。

oracle会为每一个Data Pump export job,和Data Pump import job 产生一个master process,这个master process在整个job过程中起着控制作用,包括和客户端进行通信,产生并控制work processes,以及进行log 操作。

数据库会使用master table来跟踪一个job 的procee,master table是在数据库内部真实存在的,他属于执行expdp或者impdp的操作的那个用户schema。所以这个用户必须要有在表空间中有足够的quota。master table的名字和job 名是相同。所以在使用expdp impdp的时候,job_name选项的值不能和已经在数据库中存在的表或者视图相同。

数据库都会创建一个master table来记录了某数据库对象的位置,export在导出job期间创建并维护这个master table,并在job完成之后,写入到dumpfile文件中。

在impdp的时候,从dumpfile文件中读出这个master table,用来控制对对象的操作顺序。

maste table的生存周期

1.  当job 正常完成之后,该maste table 被drop掉。

2.  在job运行过程中,使用在交互式命令行模式下( interactive command)STOP_JOB,该master table会被保留,并且 可以重新开始。

3.  使用在交互式命令行模式下( interactive command)kill_job,那么该master job 会被删除。

4.  如果job 异常结束,那么这个master table也是会被保留住的。你可以删除。或者重新开始

 maste table中定义一些属性对象,例如name 以及schema名,这些属性对象又属于一种类别(class,如table,index,constrain,directory等),可是使用exclude以及include属性来完成对这些列表的过滤。

INCLUDE= TABLE:\"IN \(\'EMP\'\)\" -à其中的符号必须要转义。

[oracle@localhost dir0]$ expdp yyp/oracle schemas=scott  directory=dir0  logfile=expinclude.log  dumpfile=expinclue.dmp INCLUDE=TABLE:\"IN \(\'EMP\'\)\"。


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/25651216/viewspace-748256/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 没有了~
下一篇: oracle 数据泵(2)
请登录后发表评论 登录
全部评论

注册时间:2012-10-10

  • 博文量
    4
  • 访问量
    7121