EXP导出表时有两种导出方式:
1. Conventional path Export
2. Conventional path Export
概念:
conventional path export使用SQL SELECT语句从表中提取数据。数据是从磁盘读取到buffer cache中,行被转移到了evaluating buffer。这些数据经过评估后传递给export客户端,然后客户端负责把这些数据写入导出文件。
direct path export要比 conventional path Export快很多,因为数据是从磁盘读取到buffer cache,行被直接转移到export客户端。 evaluating buffer(SQL命令处理层)被跳过。数据已经是export需要的格式,所有没有不必要的数据转换。数据被传递给export客户端,然后客户端负责把这些数据写入导出文件。
Direct path export的限制:
1.为了使用direct path Export,需要使用命令或者参数文件指定参数。direct path Export不支持交互模式
2.BUFFER应用于conventional path Exports, RECORDLENGTH应用于direct path Export
3.在 tablespace mode不能使用 direct path
4.在 direct path Export中不能使用QUERY参数。
5.direct path Export只能在session和数据库字符集相同的情况下使用。如果 NLS_LANG未指定或者与数据库字符集不一致,导出会中止并受到警告。默认 NLS_LANG环境变量是AMERICAN_AMERICA.US7ASCII
buffer大小如何决定?
前面提到了buffer和recordlength参数其实是用于两种导出模式的两个指定buffer大小的参数,下面我就只列举一个
buffer:
默认值由操作系统决定。此参数用于指定获取行的buffer大小,也决定了在exp时每次获取时的最大行数。使用一下式子可以计算buffer size:
buffer_size = rows_in_array * maximum_row_size
如果设置为零,exp只会每次获取一行数据。表中包含 LOBs, LONG, BFILE, REF, ROWID, LOGICAL ROWID, or DATE 类型的列,也会一次读取一行。
BUFFER参数只适用于conventional path export,对于direct path export无效。使用RECORDLENGTH参数可用指定direct path export的buffer大小。
例:
查找scott.emp表字段大小
SQL> col data_type for a20;
SQL> col column_name for a10;
SQL> select column_name,data_type,data_length from dba_tab_columns where table_name='EMP' and owner='SCOTT';
COLUMN_NAM DATA_TYPE DATA_LENGTH
---------- -------------------- -----------
EMPNO NUMBER 22
ENAME VARCHAR2 10
JOB VARCHAR2 9
MGR NUMBER 22
HIREDATE DATE 7
SAL NUMBER 22
COMM NUMBER 22
DEPTNO NUMBER 22
8 rows selected.
或者直接求和
SQL> select sum(data_length) from dba_tab_columns where table_name='EMP' and owner='SCOTT';
SUM(DATA_LENGTH)
----------------
136
从官方文档上看,每列都有一个指示器(indicator),占用2 bytes。也就是说每列加2bytes,需要加2*8bytes,所以最终大小=136+2*8=152bytes。
如果每次获取100行,buffer=15200。
1. Conventional path Export
2. Conventional path Export
概念:
conventional path export使用SQL SELECT语句从表中提取数据。数据是从磁盘读取到buffer cache中,行被转移到了evaluating buffer。这些数据经过评估后传递给export客户端,然后客户端负责把这些数据写入导出文件。
direct path export要比 conventional path Export快很多,因为数据是从磁盘读取到buffer cache,行被直接转移到export客户端。 evaluating buffer(SQL命令处理层)被跳过。数据已经是export需要的格式,所有没有不必要的数据转换。数据被传递给export客户端,然后客户端负责把这些数据写入导出文件。
Direct path export的限制:
1.为了使用direct path Export,需要使用命令或者参数文件指定参数。direct path Export不支持交互模式
2.BUFFER应用于conventional path Exports, RECORDLENGTH应用于direct path Export
3.在 tablespace mode不能使用 direct path
4.在 direct path Export中不能使用QUERY参数。
5.direct path Export只能在session和数据库字符集相同的情况下使用。如果 NLS_LANG未指定或者与数据库字符集不一致,导出会中止并受到警告。默认 NLS_LANG环境变量是AMERICAN_AMERICA.US7ASCII
buffer大小如何决定?
前面提到了buffer和recordlength参数其实是用于两种导出模式的两个指定buffer大小的参数,下面我就只列举一个
buffer:
默认值由操作系统决定。此参数用于指定获取行的buffer大小,也决定了在exp时每次获取时的最大行数。使用一下式子可以计算buffer size:
buffer_size = rows_in_array * maximum_row_size
如果设置为零,exp只会每次获取一行数据。表中包含 LOBs, LONG, BFILE, REF, ROWID, LOGICAL ROWID, or DATE 类型的列,也会一次读取一行。
BUFFER参数只适用于conventional path export,对于direct path export无效。使用RECORDLENGTH参数可用指定direct path export的buffer大小。
例:
查找scott.emp表字段大小
SQL> col data_type for a20;
SQL> col column_name for a10;
SQL> select column_name,data_type,data_length from dba_tab_columns where table_name='EMP' and owner='SCOTT';
COLUMN_NAM DATA_TYPE DATA_LENGTH
---------- -------------------- -----------
EMPNO NUMBER 22
ENAME VARCHAR2 10
JOB VARCHAR2 9
MGR NUMBER 22
HIREDATE DATE 7
SAL NUMBER 22
COMM NUMBER 22
DEPTNO NUMBER 22
8 rows selected.
或者直接求和
SQL> select sum(data_length) from dba_tab_columns where table_name='EMP' and owner='SCOTT';
SUM(DATA_LENGTH)
----------------
136
从官方文档上看,每列都有一个指示器(indicator),占用2 bytes。也就是说每列加2bytes,需要加2*8bytes,所以最终大小=136+2*8=152bytes。
如果每次获取100行,buffer=15200。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/31461640/viewspace-2141581/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/31461640/viewspace-2141581/