exp时direct=y的作用
[@more@]
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的操作。
从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/271283/viewspace-1015925/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/271283/viewspace-1015925/