L02-T2 · SQL und Programmierung

Datenbanknahe Verarbeitung präzise entwickeln und untersuchen

Wir strukturieren SQL, PL/SQL-Packages, Prozeduren, Funktionen und Hintergrundverarbeitung so, dass fachliche Regeln, Transaktionsgrenzen, Fehlerbehandlung und Wiederanlauf erkennbar bleiben.

Bei Performanceproblemen untersuchen wir Ausführungspläne, Datenverteilung, Statistiken, Indizes, Sperren, Parallelität und Aufrufketten. Der Optimierungsbedarf wird aus Messdaten abgeleitet und nicht aus Vermutungen.

Übergeordnet
L02 · Datenbankarchitektur, Performance & Anwendungen
Lesetiefe
Technik
Ergebnis
Nachvollziehbare und messbare datenbanknahe Verarbeitung
Methodik
Verstehen · messen · strukturieren · prüfen
L02-T2

Was geschieht zwischen Funktionsaufruf und Commit?

Datenbanknahe Verarbeitung verbindet fachliche Regeln mit Transaktionen, Parallelität und physischer Datenverarbeitung. Eine kleine Prozedur kann große Datenmengen bewegen, zahlreiche Sperren erzeugen oder weitere Packages, Trigger und Hintergrundjobs auslösen.

Wir betrachten deshalb nicht nur den sichtbaren Quelltext. Wir verfolgen:

  • welche Anwendung den Aufruf auslöst
  • welche Parameter und Datenmengen übergeben werden
  • welche SQL-Anweisungen tatsächlich ausgeführt werden
  • welche Tabellen, Indizes und Partitionen betroffen sind
  • welche weiteren Packages, Funktionen und Trigger beteiligt sind
  • wo Transaktionen beginnen und enden
  • welche Sperren und konkurrierenden Zugriffe entstehen
  • wie Fehler protokolliert und weitergegeben werden
  • ob eine abgebrochene Verarbeitung wiederholt werden kann
  • welche fachliche Wirkung nach dem Commit sichtbar sein muss

Damit wird datenbanknahe Geschäftslogik als zusammenhängender Verarbeitungspfad und nicht als Sammlung einzelner SQL-Anweisungen behandelt.

01 · SQL-Verarbeitung

Mengenorientiert formulieren und mit tatsächlichen Plänen untersuchen

SQL beschreibt das gewünschte Ergebnis. Der Optimizer entscheidet anhand von Datenverteilung, Statistiken, Parametern und Datenbankkonfiguration, wie dieses Ergebnis erzeugt wird.

Wir untersuchen insbesondere:

  • tatsächliche Ausführungspläne
  • geschätzte und tatsächlich verarbeitete Zeilen
  • Tabellen- und Indexzugriffe
  • Join-Reihenfolge und Join-Verfahren
  • Filterung und Datenreduktion
  • Sortier- und Hash-Operationen
  • Partition Pruning
  • Parallelverarbeitung
  • Bind Variables
  • implizite Typumwandlungen
  • wiederholte Einzelabfragen
  • SQL innerhalb von Schleifen
  • Anzahl der Ausführungen
  • Buffer Gets, I/O, CPU und Laufzeit
  • Auswirkungen konkurrierender Verarbeitung

Ein kostengünstig geschätzter Plan ist noch kein Nachweis für eine schnelle Verarbeitung. Entscheidend sind die tatsächlichen Datenmengen, Bind-Werte und Ausführungsstatistiken unter einer repräsentativen Arbeitslast.

Wir bevorzugen mengenorientierte Verarbeitung, wenn sie die fachliche Regel eindeutig und nachvollziehbar abbildet. Zeilenweise Verarbeitung bleibt dort möglich, wo der Geschäftsprozess oder eine kontrollierte Fehlerbehandlung sie erfordert.

02 · PL/SQL-Packages und Schnittstellen

Geschäftslogik kapseln und Verantwortungsgrenzen sichtbar halten

PL/SQL-Packages bündeln Datenbanklogik hinter definierten Schnittstellen. Package Specification und Package Body trennen den von außen sichtbaren Vertrag von seiner internen Umsetzung.

Wir strukturieren:

  • öffentliche und interne Prozeduren und Funktionen
  • Eingabe-, Ausgabe- und Rückgabewerte
  • fachliche Vorbedingungen
  • Validierungen
  • Zustandsänderungen
  • Transaktionsverantwortung
  • Fehlercodes und Fehlermeldungen
  • Abhängigkeiten zu Tabellen, Views und anderen Packages
  • Berechtigungen und Ausführungskontext
  • Protokollierung und Messpunkte
  • Versionierung und Deployment

Eigene Anwendungen sollen nicht unkontrolliert in die Tabellen eines Standardprodukts schreiben. Wo Hersteller-APIs oder definierte Erweiterungspunkte bestehen, werden sie gegenüber direkten Eingriffen bevorzugt.

Bei Oracle Applications und vergleichbaren ERP-Systemen bleibt dadurch erkennbar:

  • welche Logik zum Produktstandard gehört
  • welche Funktion konfiguriert wurde
  • welche kundeneigenen Packages existieren
  • welche Hersteller-APIs verwendet werden
  • welche Abhängigkeiten bei Upgrade oder Migration zu prüfen sind
  • wer die fachliche und technische Verantwortung trägt

Direkte Änderungen an Produktdaten oder Produktcode bleiben begründungspflichtige Ausnahmen mit ausdrücklich bewerteten Auswirkungen.

03 · Transaktionen und Parallelität

Konsistente Zustandsänderungen unter konkurrierender Last führen

Eine Transaktion muss einen fachlich konsistenten Zustandsübergang abbilden. Commit und Rollback dürfen nicht zufällig durch technische Schleifen, Zwischenstände oder einzelne Hilfsfunktionen bestimmt werden.

Wir untersuchen:

  • fachliche Transaktionsgrenzen
  • Commit- und Rollback-Verantwortung
  • Sperrreihenfolge
  • konkurrierende Änderungen
  • verlorene Aktualisierungen
  • wiederholte Verarbeitung
  • Idempotenz
  • Savepoints
  • Undo- und Redo-Verhalten
  • lange offene Transaktionen
  • Deadlock-Risiken
  • Fehler nach teilweiser Verarbeitung
  • Wiederaufnahme nach Abbruch

Oracle stellt lesenden Transaktionen über SCN und Undo einen konsistenten Datenstand bereit. Die Anwendung muss dennoch festlegen, welche fachlichen Zustände gemeinsam verändert werden und welche Zwischenstände für andere Prozesse sichtbar sein dürfen.

Bei hoher Parallelität betrachten wir nicht nur die Laufzeit einer einzelnen Verarbeitung. Entscheidend ist, wie viele gleichzeitige Vorgänge möglich sind, ohne dass Sperren, Redo, Undo oder gemeinsame Ressourcen den Gesamtdurchsatz begrenzen.

04 · Bulk- und Hintergrundverarbeitung

Große Datenmengen kontrolliert und wiederanlauffähig verarbeiten

PL/SQL und SQL besitzen unterschiedliche Ausführungsbereiche. Häufige Wechsel zwischen PL/SQL und SQL erhöhen den Verarbeitungsaufwand. BULK COLLECT und FORALL können die Zahl dieser Wechsel reduzieren, wenn Mengen, Speicherbedarf und Fehlerbehandlung dazu passen.

Wir bewerten:

  • setorientiertes SQL
  • BULK COLLECT
  • FORALL
  • geeignete Batch-Größen
  • Speicherbedarf der PGA
  • Fehlerbehandlung einzelner Datensätze
  • SAVE EXCEPTIONS
  • Parallelverarbeitung
  • Chunking großer Datenbestände
  • Fortschritts- und Statusführung
  • kontrollierte Commit-Punkte
  • Jobketten und Abhängigkeiten
  • Wiederanlauf nach Teilfehlern
  • Vermeidung doppelter Verarbeitung

Ein Batch gilt nicht allein deshalb als beherrschbar, weil er im fehlerfreien Fall schnell durchläuft. Er muss erkennen lassen, welche Daten verarbeitet wurden, welche fehlgeschlagen sind und wie ohne widersprüchliche Doppelverarbeitung fortgesetzt werden kann.

05 · Fehlerbehandlung und Beobachtbarkeit

Fehlerursache, betroffene Daten und Verarbeitungskontext erhalten

Eine Fehlerbehandlung, die jede Exception in eine allgemeine Meldung übersetzt, erschwert Analyse und Wiederanlauf. Ebenso problematisch ist das unkontrollierte Ignorieren einzelner Fehler, während der Gesamtprozess formal erfolgreich endet.

Wir unterscheiden:

  • fachliche Ablehnung
  • erwartete technische Ausnahme
  • Dateninkonsistenz
  • Ressourcen- oder Kapazitätsproblem
  • temporären Schnittstellenfehler
  • nicht behandelten Programmfehler

Für relevante Fehler halten wir fest:

  • Verarbeitungsschritt
  • fachlicher Vorgang
  • betroffene Identität
  • Zeitpunkt und Status
  • Oracle-Fehlercode und Fehlertext
  • Aufrufkette
  • bereits erfolgte Änderungen
  • Wiederholbarkeit
  • benötigte Korrektur oder Entscheidung

Protokollierung wird so gestaltet, dass sie die Verarbeitung erklärbar macht, ohne selbst zum Performance- oder Speicherproblem zu werden.