Daten blitzschnell nach CSV entladen mit dem Pro*C-unloader

Heute möchte ich auf ein altes, aber bewährtes Tool von Tom Kyte verweisen, das nach meiner Erfahrung weitgehend unbekannt oder unterbewertet ist, das aber extrem hilfreich ist, wenn man Daten aus Oracle mit bestmöglichem Durchsatz entladen will: Auftritt „unloader“!

Der Originalcode befindet sich auf der AskTom-Website; es gibt jedoch eine verfeinerte Version von Philip Moore mit zusätzlichen Parametern:

  • delimiter: gibt an, mit welchem Zeichen die Spalten voneinander getrennt werden sollen (Default: ,)
  • enclosure: gibt an, mit welchem Zeichen die Spalten eingerahmt werden sollen (Default: „)

Das Programm ist mit Pro*C-Anweisungen geschrieben und muss auf der Zielplattform kompiliert und gelinkt werden. Damit das nicht zu kompliziert wird, habe ich den Quellcode und ein passendes Makefile zum Download vorbereitet. ;-)

Download von dropbox.com

Voraussetzungen zum Bauen des Programms:

  • Pro*C muss auf dem Zielsystem konfiguriert sein; dies ist bei Server-Installationen normalerweise schon erfolgt.
  • Die Umgebungsvariablen für Oracle müssen korrekt gesetzt sein (z.B. durch Aufruf von „. oraenv„).

Folgende Schritte sind zum Bauen des Programms nötig:

  1. Dateien (unloader.pc und unloader.mk) in ein Unterverzeichnis nach Wahl entpacken.
  2. Falls LD_LIBRARY_PATH noch nicht gesetzt ist:
    export LD_LIBRARY_PATH=$ORACLE_HOME/lib
  3. Precompile, Compile, Link:
    make -f ./unloader.mk unloader
  4. Test:
    ./unloader userid=scott/tiger sqlstmt=“select * from emp“

Das Makefile bezieht sich auf das aktuelle Verzeichnis; soll es von einem anderen Ort aus aufgerufen werden, muss das Verzeichnis angepasst werden:
Am Ende der Datei beginnt eine Zeile mit „MAKEFILE=“; dahinter den Pfad auf den aktuellen Standort ändern.

Hier ein Beispiel zum Entladen größerer Datenmengen in eine Datei; Statusmeldungen gehen in eine Log-Datei statt auf den Bildschirm. Dabei wird eine höhere Fetch Size verwendet (Default: 100), was Latenzen in der Kommunikation mit dem DB-Server verringert:

./unloader userid="scott/tiger@db" sqlstmt="select * from all_objects" arraysize=10000 1>./unload.csv 2>./unload.log

Demnächst folgen noch Laufzeitvergleiche mit verschiedenen Alternativen.

Schreibe einen Kommentar

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s