Native Kompilierung in 10g

03.
März
2006
Veröffentlicht von: Hildegard Asenbauern

Mit Version 9i wurde die Möglichkeit der nativen Kompilierung eingeführt, die mit Version 10g eine deutliche Vereinfachung erfuhr...

Mit Version 9i wurde die Möglichkeit der nativen Kompilierung eingeführt, die mit Version 10g eine deutliche Vereinfachung erfuhr. In 10g wird automatisch der betriebssystemspezifische C-Compiler herangezogen, soweit ein solcher vorhanden ist, ohne dass größere Konfigurationen nötig sind. Dementsprechend entfielen die zugehörigen init.ora-Parameter PLSQL_NATIVE_C_COMPILER, PLSQL_NATIVE_LINKER, PLSQL_NATIVE_MAKE_FILE_NAME und PLSQL_NATIVE_MAKE_UTILITY.

Um mit nativer Kompilierung arbeiten zu können, muss nun nur noch der Parameter PLSQL_NATIVE_LIBRARY_DIR gesetzt sein; er gibt an, wo die dlls abgelegt werden sollen. Werden diese versehentlich gelöscht, so werden sie bei Bedarf aus der Datenbank dorthin extrahiert Auch der optionale Parameter PLSQL_NATIVE_LIBRARY_SUBDIR_COUNT wird weiterhin unterstützt.

Auch der Parameter für die Steuerung der Kompilierung wurde umgestellt: statt PLSQL_COMPILER_FLAGS wird jetzt mit PLSQL_CODE_TYPE gearbeitet.

Windows

Unter Windws wird standardmäßig in der Registry nach HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\VISUALSTUDIO\6.0 gesucht, um mit Visual C++ zu arbeiten. Wird mit einer höheren Version gearbeitet, beispielsweise Visual Studio .Net 2003, so führt der Versuch der nativen Kompilierung zu einem Fehler ("PLS-00923: Systemeigene Kompilierung nicht erfolgreich"), da der Registry-Key "6.0" ebenfalls vorhanden ist. Oracle empfiehlt als Workaround, alle Keys mit einer zu niedrigen Versionsnummer (6.0, ggf. auch 7.0) manuell zu editieren, so dass sie nicht mehr gefunden werden können (z.B.: "6.0xxx").

spnc_commands

Unter $ORACLE_HOME findet sich im plsql-Verzeichnis die Datei spnc_commands. Sie enthält den Aufruf des C-Compilers, der an das jeweilige Betriebssystem angepasst ist. Soll ein anderer als der erwartete C-Compiler verwendet werden, so kann hier der Aufruf angepasst werden. 

Ab Version 10.2 findet sich hier unter Windows auch ein Verweis, dass GCC (MINGW) unterstützt wird; auch die entsprechenden Aufrufe sind in auskommentierter Form vorhanden. Leider führt der Aufruf des Linkers unter Windows jedoch zu einem Fehler, da eine benötigte Datei (libpncrt.a) nicht vorhanden ist (Bug Nr. 4672767).

Anmerkung zu 11g:

In Version 11g ist gar kein C-Compiler mehr nötig und auch kein externes Verzeichnis, da keine dlls erstellt werden.  Dementsprechend entfällt auch der Parameter PLSQL_NATIVE_LIBRARY_DIR. Einzig verbliebener Parameter ist dann PLSQL_CODE_TYPE.

Beispiel:

-- nur 10g
SQL> ALTER SYSTEM
SET PLSQL_NATIVE_LIBRARY_DIR=
   'C:\oracle\product\10.2.0\oradata\nativeDll'
SCOPE=MEMORY;
System wurde geändert.
SQL> ALTER SESSION SET PLSQL_CODE_TYPE = 'NATIVE';
Session wurde geändert.
SQL>
CREATE OR REPLACE PROCEDURE nativetest AS
   v NUMBER := 0;
BEGIN
   FOR i IN 1..100000000 LOOP
      v := v + 2;
   END LOOP;
END;
/
Prozedur wurde erstellt.
SQL> SET TIMING ON
SQL> EXEC nativetest
PL/SQL-Prozedur erfolgreich abgeschlossen.
Abgelaufen: 00:00:07.04
SQL> ALTER PROCEDURE nativetest COMPILE PLSQL_CODE_TYPE = INTERPRETED;
Prozedur wurde geändert.
Abgelaufen: 00:00:00.03
SQL> EXEC nativetest
PL/SQL-Prozedur erfolgreich abgeschlossen.
Abgelaufen: 00:00:08.65

Dieses Beispiel lief unter Windows, wobei für den Test in der Version 10g der oben beschriebene Workaround für Visual Studio .Net verwendet wurde. Ein analoger Test unter Suse Linux lief problemlos.

PL/SQL

Jede Menge Know-how für Sie!

In unserer Know-How Datenbank finden Sie mehr als 300 ausführliche Beiträge zu den Oracle-Themen wie DBA, SQL, PL/SQL, APEX und vielem mehr.
Hier erhalten Sie Antworten auf Ihre Fragen.