Oracle 7.3 bis Oracle 23c 20+ Jahre Erfahrung Version (Freigegeben: )

Oracle Bulk Insert Skripts

07 Nov 2023

Einleitung

KeepTool 16 kann jetzt Oracle Bulk Insert Skripts erzeugen. Das Erzeugen von Insert Skripts aus Ihren Daten ist ein bekanntes Hora-Feature, das schon seit vielen Jahren vorhanden ist. Vermutlich haben Sie an dieser Stelle keine großen Änderungen erwartet.

Herzlich willkommen zu unserem November-Newsletter. Lassen Sie uns das Thema Insert Skripts mit einem Blick auf die Vorgängerversion Hora 15 beginnen.  Wir sind mit dem Oracle Demo-Schema HR (human resources, d.h. Personalwesen) verbunden. Hora zeigt den Inhalt der Tabelle JOB_HISTORY an. Ein Klick mit der rechten Maustaste innerhalb der Datenanzeige öffnet das Kontextmenü. Wir wählen den Punkt “Create INSERT script”.

Darunter befinden sich zwei Untermenüpunkte

  • Save to file
  • Copy to clipboard.

Unabhängig davon, welchen Punkt Sie wählen, erhalten Sie zu Ihren Daten einen Insert-Skript mit dem hier zu sehenden Aufbau:

Zunächst werden einige SQL*Plus-Variablen gesetzt. Das erspart Ihnen möglicherweise Probleme, wenn das Skript später mit Hilfe von SQL*Plus ausgeführt werden soll. Die folgenden Zeilen enthalten Beispielcode um Datenbanktrigger und Fremdschlüssel von Detailtabellen vorübergehend zu deaktivieren. Da die Tabelle JOB_HISTORY keine Detailtabellen ha, ist im Beispiel nur Code zum Deaktivieren der Trigger zu sehen. Entfernen Sie einfach die Kommentarzeichen “–” am Beginn der Zeile um den Beispielcode zu übernehmen.

Danach sehen Sie zahlreiche Insert-Anweisungen; ein Befehl für jede Datenzeile. Schließlich wird die Transaktion mit einer Commit-Anweisung beendet. Ggf. können temporär deaktivierte Trigger und Fremdschlüssel wieder eingeschaltet werden..

Das war’s. Der Skript kann nun in Hora, unserem separaten SQL Editor oder Oracle SQL*Plus gestartet werden.

Neuerungen in Hora 16

KeepTool 16 enthält mehrere Neuerungen für das Erzeugen von Insert Skripts. Wir werden jeden Punkt später im Detail beleuchten.
Zunächst möchten wir einen Überblick darüber geben, was sich in der Version 16 geändert hat:

  • Hora kann jetzt optional Bulk Insert Skripte erzeugen. Dabei werden mehrere Datenzeilen über eine einzelne Insert-Anweisung eingefügt.
    Dadurch verbessert sich die SQL-Ausführungszeit auf dem Zielsystem.
  • Direct Path Inserts sind ein weiterer Ansatz, die Insert-Performance zu verbessern.
  • Sehr große Skripts können jetzt in mehrere Dateien aufgeteilt werden.
    Dadurch erhöht sich die Ausführungsperformance zwar nicht automatisch, aber es erleichtert Ihnen die Bearbeitung der erzeugten Dateien im Editor Ihrer Wahl.
  • Die Benutzung dieser Optionen kann durch Einstellungen auf der Lasche “Data Content” gesteuert werden.

In den folgenden Abschnitten schauen wir uns die einzelnen Punkte im Detail an.

See how it works!

Entdecken Sie die Möglichkeiten von KeepTool.

i,g

Bulk Inserts

Es gibt unterschiedliche Möglichkeiten, um in einer Oracle-Datenbank Bulk Inserts auszuführen. Wir haben uns dafür entschieden, die INSERT ALL Syntax zu implementieren.

Im Dialog “Settings” können Sie eine “Insert script Bulk Size” einstellen.

Damit wird die Anzahl Datenzeilen vorgegeben, die zu einer einzelnen Insert-Anweisung zusammengefasst werden sollen. Sie können diese bei “1” lassen, um einzelne Insert-Anweisungen zu erzeugen wie in Hora 15 und früher:

Für dieses Beispiel haben wir den Wert auf überschaubare “3” erhöht. Damit erzeugt Hora nun INSERT ALL Anweisungen, die 3 Datenzeilen mit Hilfe einer einzelnen Insert-Anweisung einfügen.

In der Praxis ist empfohlen den Wert deutlich größer zu wählen, dabei aber in der Regel unter 1.000 zu bleiben.

Die Klausel SELECT FROM DUAL am Ende der Anweisung ist bei der INSERT ALL Syntax formell erforderlich.

Für Oracle 23c erzeugt Hora eine INSERT ALL Anweisung, die keine wiederholte Auflistung der Spaltennamen und auch nicht die formelle Klausel SELECT 1 FROM DUAL beinhaltet.

Laut Testberichten ist die neue Syntax auch deutlich performanter als das traditionelle INSERT ALL.

Direct Path Inserts

Direct Path Inserts kennen Sie möglicherweise bereits aus dem Umfeld der Oracle Export- und Importwerkzeuge. Diese Technologie kann auch bei Insert Skripts genutzt werden. Direct Path Inserts können deutlich schneller ausgeführt werden. Trotzdem ist es nützlich, sich mit den Vor- und Nachteilen von Direct Path Inserts vertraut zu machen.

Sie können Direct Path über eine Checkbox in den Einstellungen aktivieren.

Später zeigen wir Ihnen noch eine Zusammenfassung aller Einstellungen für die Erzeugung von Insert Skripten.

Wenn Direct Path Inserts aktiviert sind, gibt es die folgenden beiden Änderungen beim Erzeugen von Insert Skripten:

  • Für Oracle 11g und höher wird der Optimizer-Hint  /*+append_values*/ angegeben. Für Oracle 9 und 10 wird stattdessen /*+appened*/ benutzt.
  • Nach jeder Insert-Anweisung folgt ein Commit-Befehl.
    Das Commit ist erforderlich, um auf den Abschluss aller parallelen Aktivitäten zu warten, bevor das nächste Insert ausgeführt werden kann.

Aufteilen großer Dateien

Wenn Sie für eine sehr große Tabelle Insert-Skripte erzeugen, kann die Dateigröße gut und gerne mehrere hundert MByte erreichen. Insofern Sie eine Datei dieser Größe im Editor Ihrer Wahl öffnen, kann das Bearbeiten sehr träge werden, insbesondere wenn eine Syntaxhervorhebung oder automatischer Zeilenumbruch aktiv sind. In Hora geben wir Ihnen jetzt die Möglichkeit, solche Skripts auf mehrere kleinere Dateien aufzuteilen.

Sie können die maximale Dateigröße unter “Settings | Data Content | Split Insert Scripts every MBytes” vorgeben. Für unseren SQL Editor ist eine Maximalgröße von 50 MBytes ein guter Ausgangspunkt.

Einstellungen

In der folgenden Abbildung zeigen wir noch einmal zusammenfassend alle Einstellungen, die für das Erzeugen von Insert Skripten relevant sind.

Auf der rechten Seite der Lasche “Data Content” gibt es nun die folgenden Einstellmöglichkeiten:

  • Split Insert Scripts every MBytes
    Bei jedem Überschreiten der vorgegebenen Dateigröße erzeugt der Skriptgenerator eine neue Datei.
  • Insert script bulk size.
    Die Anzahl Datensätze, die in jeder Insert-Anweisung zusammengefasst werden.
  • Single-line Insert statements.
    Wenn die Option markiert ist, werden die Feldnamen und die Werteklauseln in dieselbe Zeile geschrieben.
    Anderenfalls werden die Werteklauseln in eine eigene Zeile geschrieben.
    Diese Option gilt nur für Bulk Size 1.
  • Direct path Insert statements.
    Ein Optimizer-Hint “append” wird eingefügt. Nach jedem Insert erfolgt ein Commit.
  • Use time stamp literals for date values.
    Für Werte vom Typ DATE erzeugt der Skriptgenerator TIMESTAMP Literale.
    Dadurch kann der Skript unabhängig von NLS Datums- und Zeiteinstellungen ausgeführt werden.
  • Escape non-ASCII literals.
    Literale außerhalb des ASCII-Bereichs werden binär kodiert.

Einige Optionen sind bereits aus früheren Versionen vorhanden. Dazugekommen sind Einstellmöglichkeiten für die neuen Features.

Zusammenfassung

Hora 16 bringt eine Reihe Neuerungen für das Erzeugen von Insert-Anweisungen wie beispielsweise Oracle Bulk Insert Skripts.
Diese sind besonders nützlich bei der Verarbeitung großer Datenmengen und unter Performanceaspekten.

Nachtrag

KeepTool 16.1.0 zeigt einen modalen Dialog, um die Einstellungen zur INSERT-Skript-Erzeugung anpassen zu können.

Die aktuell gewählten Einstellungen können als Standard gespeichert werden.