当前文档以Oracle 11G官方文档为参考

exp导出介绍

exp提供了两种导出数据的方法:

  • 常规路径导出
  • 直接路径导出

常规路径导出使用SQL查询语句从表中提取数据,数据从磁盘读取到缓冲区缓存中,并将行传输到评估缓冲区。通过表达式评估后的数据传输到客户端,然后将数据写入文件中。
直接路径导出相比传统路径导出快得多,因为数据从磁盘读取到缓冲区缓存中,它将行直接传输到客户端,评估缓冲区被绕过,从而避免了不必要的数据转换。数据传输到客户端,然后将数据写入导出文件中。

直接路径限制

直接路径导出必须使用命令行或参数文件,不能使用交互式方法调用。
直接路径导出不能使用buffer参数,只能使用recordlength参数指定导出用于写入导出文件的缓冲区大小。
直接路径导出不能使用表空间模式导出。
直接路径导出不能使用query参数。

常规路径和直接路径导出性能对比

导出test表,数据大概有4.7G,直接路径导出增加recordlength=65536,常规路径导出增加buffer=65536,其他参数不变。

常规路径导出

1、在服务器中执行常规路径导出命令

buffer=65536表示常规路径导出的I/O缓冲区大小,默认值跟操作系统有关。

[oracle@localhost dump]$ exp system/orcl@192.168.3.3/orcl file=/home/oracle/dump/test.dmp log=/home/oracle/dump/test.log tables=test buffer=65536
image.png
image.png
2、计算导出耗时,得出耗时将近8分钟

直接路径导出

1、在服务器中执行直接路径导出命令

direct=y表示使用直接路径加载,recordlength=65536表示直接路径导出的I/O缓冲区的大小,默认值跟操作系统有关。

[oracle@localhost dump]$ exp system/orcl@192.168.3.3/orcl file=/home/oracle/dump/test1.dmp log=/home/oracle/dump/test1.log tables=test DIRECT=y RECORDLENGTH=65536
image.png
image.png
2、计算导出耗时,得出耗时将近1分钟。

结论

从上述示例中可以发现,直接路径导出的性能比常规路径要快的多,导出的耗时主要是体现在评估缓冲区这里。在生产环境中,如果条件允许,建议使用直接路径加载。