ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 数据库导出:exp direct

数据库导出:exp direct

原创 Linux操作系统 作者:wuft2003 时间:2011-09-05 16:13:37 0 删除 编辑
1. exp -help
DIRECT     direct path (N)
RECORDLENGTH length of IO record
未指明direct 的情况下是常规路径导出,指定DIRECT=Y以后,代表是直接路径导出;
指定这个参数能让让导出速度增加,文件也会变小。
 
=========================
exp导出时,加where条件:
exp scott/tiger TABLES=(emp,bonus) QUERY="WHERE job='SALESMAN' and sal<1600"
限定 :
1.The parameter QUERY cannot be specified for full, user, or tablespace mode exports.
参数query不能应用在完备 导出,用户导出和表空间导出行动
2.The parameter QUERY must be applicable to all specified tables.
参数query指定的内容必需对全部指定的表都有效
3.The parameter QUERY cannot be specified in a direct path export (DIRECT=y)
参数query不能与direct路径导出同时应用
4.The parameter QUERY cannot be specified for tables with inner nested tables.
参数query不能导出内嵌表
5.You cannot determine from the contents of the export file whether the data is the result of a QUERY export.
用query参数导出的数据与同其他行动导出的数据是一样的,无法按照导出文件举办星散 
===============
 
Conventional Path Export和Direct Path Export
从Oracle7的release7.3开始,Oracle开始在exp工具中提供两种方法导出表的数据:Direct Path导出和Conventional Path导出。通过exp的参数Direct来判断选用那种导出方式。这个参数有两个值Y/N,如果指定为Y,则表明exp是使用Direct Path的模式导出数据,指定为N,表明数据库是用Conventional Path的模式导出数据的。如果不明确指定direct的值,默认是N,也就是用Conventional Path的模式导出数据


一、两种导出的模式在导出的原理上是存在差别的。

Ø         Conventional Path模式导出相当于使用select语句从表中取出数据,数据从磁盘上先读到buffer cache中,记录被转移到一个评估检测的缓冲区中,数据经过语法检测后没有问题,将数据传给exp的客户端,最后写入导出的文件中。

Ø         如果使用Direct Path模式导出,数据直接从磁盘上读取到导出的PGA中:记录直接被转换导出会话的私有buffer中。这也就是意味着SQL语句处理层被忽略掉了,因为数据已经是符合导出的格式了,不需要其他的转换处理了。数据直接被传送给导出的客户端,最后写入导出文件。

二、两种导出模式性能上也有一定的差异。

Ø         Direct Path导出模式速度上明显快于Conventional Path导出模式,因为Direct Path导出模式忽略了SQL语句处理这一层。

Ø         当使用Direct Path导出模式的时候,可以增大参数RECORDLENGTH的值来提高导出的性能。导出的性能主要取决以下的因素:DB_BLOCK_SIZE、导出表上列的类型、导出文件的I/O层(主要是指导出文件尽量要和数据库的数据文件在不同的磁盘上,避免I/O上的竞争)。一般来说,参数RECORDLENGTH设置为操作系统I/O的block size或者是DB_BLOCK_SIZE的整数倍,例如64K。

Ø         使用哪种模式导出数据都不会影响导入数据,也就是说导入数据的时间是一样的。


三、两种导出模式都存在一些限制,在某些情况下只能使用其中的一种。

Ø         Direct Path导出模式只能使用命令行或者参数文件的方式来导出,不能使用交互式的方式导出数据,只有Conventional Path导出模式可以使用交互式的方式。

Ø         Direct Path导出模式不能用于导出表空间,即设置参数TRANSPORT_TABLESPACES=Y,其他的FULL、USER、TABLE模式均可以使用Direct Path导出模式。

Ø         在Oracle8i以前的版本里面,如果表里面存在LOB的对象,是不能使用Direct Path导出模式导出表的,如果使用Direct Path导出模式导出表,那些存在LOB对象的记录是不会被导出的。自从Oracle8i之后,这种限制就被取消了。对于Oracle8i之后的版本,如果使用Direct Path导出模式导出表,那些存在LOB对象的记录是会自动以Conventional Path导出模式来导出。但是如果你用低于Oracle8i的客户端的exp工具的Direct Path导出模式导出Oracle8i以上的数据库存在LOB对象的表,那些包含LOB的记录还是同样不会被导出。

Ø         Exp工具中的QUERY参数只能用于Conventional Path导出模式,QUERY参数允许导出一个表的满足一定条件的部分记录。

Ø         Exp工具中的BUFFER参数只能用于Conventional Path导出模式,BUFFER参数设置了用于fetch记录的缓存的大小,以字节为单位,即在array中最大数量的记录。

Ø         参数RECORDLENGTH指定文件记录的最大长度,以字节为单位,即导出I/O的buffer,最大为64K。这个参数决定了在没写入导出文件中缓存中堆积数据的多少。如果没有设置这个参数,在大多数平台的默认值是1024字节。

Ø         只有当环境变量中的NLS_LANG设置成跟导出数据库中的字符集一致的时候才能使用Direct Path导出模式导出数据。如果环境变量中的NLS_LANG和数据库的字符集不一致的时候,导出就会报类似下面的错误:
EXP-41 "Export done in server's UTF8, different from user's character set WE8ISO8859P1"      
EXP-0 "Export terminated unsuccessfully".

这种限制只对于Oracle8i及其更低版本的Oracle有效,Oracle8i以上的版本不会出现此类错误。

四、两种导出模式在安全方面的一些差异。
Ø         对于虚拟数据库(Virtual Private Database)和Oracle Label Security如果强制使用Conventional Path导出模式导出数据,导出会成功的中止,但是存在类似下面的提示警告:EXP-79 "Data in table %s is protected. Conventional path may only be exporting partial table."  

Ø         对于SYS用户和被授予了EXEMPT ACCESS POLICY权限的用户,在导出数据的时候是不受虚拟数据库(Virtual Private Database)和Oracle Label Security的影响的,两种导出模式均可以使用。但是我们需要注意的是,EXEMPT ACCESS POLICY的权限很大,在管理数据库用户的时候一般不要轻易授予,但是这个权限不会影响对传统对象执行SELECT、INSERT、DELETE、UPDATE的操作。

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

请登录后发表评论 登录
全部评论

注册时间:2009-05-12

  • 博文量
    295
  • 访问量
    324110