I did a performance comparation of Oracle datapump, export and SQLULDR2 on a linux machine, the CPUs' frequency is 3G HZ. When running exp and SQLULDR2, the relative process take almost 100% of one CPU, so for data unloading utilitys, the CPU speed is very critical. And I get the following result, supposed that SQLULDR2 is the base unit of performance.
expdp = (parallel degree - 1) * 2 * sqluldr2
exp direct = 2 * sqluldr2
exp = 1 * sqluldr2
It seems that Oracle datapump is mostly like an upgraded version of export, always export data in direct mode, and can be parallelized by writing to multiple export files concurrently. Oracle datapump can control multiple parallel server processes, and that's why the files can only be generated on server side. The another reason is for security issue, you cannot get the data even if you have export it, untill you get the access of the server machine. Oracle client processes cannot communicate to the parallel slaves directly.
Both Oracle datapump and export have a direct export mode, but what's the direct mode internals? I searched on google and metalink, but found nothing. No OCI or Pro*C APIs related to direct unloading, I can only found some APIs for direct mode data loading, does anybody have a clue of it? It seems Oracle did not get some APIs open for public, to prevent customers migrate their data to other database system with lower cost.
I am thinking implementing direct mode in SQLULDR2 utility to double the speed of text unloading.