Native PL/ SQL compilation is achieved by translating the PL/ SQL source code into C source code which is then compiled on the given platform. The compiling and linking of the generated C source code is done using 3 rd party utilities whose location has been specified by the DBA, typically in init.ora. The DBA should ensure that all these utilities are owned by the ORACLE owner (or a correspondingly trusted system user) and that only this user has write access to them. The object code for each natively compiled PL/ SQL library unit is stored on the platform's filesystem in directories, similarly under the DBA's control. Thus native compilation does take longer than interpreted mode compilation. Our tests have shown a factor of about times two. This is because it involves these extra steps: generating C code from the initial output of the PL/ SQL compilation; writing this to the filesystem; invoking and running the C compiler; and linking the resulting object code into ORACLE.
Oracle recommends that the C compiler is configured to do no optimization. Our tests have shown that optimizing the generated C produces negligible improvement in run-time performance but substantially increases the compilation time.