Pipeline-Labor: Stage leeren, nachdem ODS geliefert hat

Offene Bastelanleitung. Die SQL-Brücke (Wrapper, Interface) gilt als vorhanden. Nachgebaut werden Maske und Queries. Der Webserver lauscht nur auf Localhost, also 127.0.0.1 — nicht im Netz.

Kafka, also der Nachrichtenstrom, landet in der Stage, also der S_-Tabelle. Der ODS, also Operational Data Store, die O_-Tabelle, hält die gelieferten Daten. Eine VIEW liest den ODS und speichert nichts. Erst wenn Gates, also Prüfschranken, grün sind, darf Stage geleert werden.

Option A löscht die fällige Partition sofort. Option B tauscht sie per Exchange Partition, also EXCHANGE PARTITION, Partitionstausch, in den Trash und erlaubt Restore, also Rückholen, in der Karenz, also der Wartezeit. Tabellennamen auf den Grafiken sind Platzhalter. Die Felder bleiben.

Zuerst die Oberfläche, als SVG nachgezeichnet

Inhalte und Reihenfolge sind bindend. Pixelgenaue Positionen nicht. Labor ohne Kundendaten, ohne echte IP, ohne Passwort.

Prozessgrafik: Kafka, Stage, ODS, VIEW, Scheduler, Gate-Kette, Option A, Trash, Karenz, DROP. Option B aktiv.
Abbildung 1. Statusleiste und Prozessgrafik. Option B ist aktiv, Option A ist abgeblendet.
Bedienleiste: Gates, Setup-Karten, Test-Szenarien, Dry Run, Purge, Partitionen, Status, Log, Tidy.
Abbildung 2. Gates, Schritte 1–4, Testkarten, Dry Run, ein Purge-Schritt pro Klick, Tabellen und Ausgabe.
Vorhanden

SQL-Brücke / Wrapper

HTTP-API auf 127.0.0.1, offene Datenbanksitzung, Login-Cookie, Platzhalterprüfung. Nicht neu erfinden.

Nachbauen

Maske + Queries

HTML-IDs, CSS-Zustände opt-a/opt-b, JavaScript für Dry Run und Purge, Package mit Planfunktion.

Sicherheit

Nur Localhost

Bind 127.0.0.1, kein 0.0.0.0, kein CORS-Stern, kein Passwort im Code. Die Datenbank darf eine andere Maschine sein.

HTML, CSS, JavaScript und SQL

HTML nennt IDs. CSS malt Zustände (Option A/B, Gate-Ampel, fällige Zeile). JavaScript liest Retention und Modus, füllt Platzhalter der Form ${Name: Default} und ruft die Brücke. SQL entscheidet fachlich. Der Browser erfindet keine Purge-Regel, die das Package nicht kennt.

SchichtTutGibt zurück
GET /api/sessionSitzung prüfenconnected, expires_in_s, user, schema — ohne Session keine Personendaten
POST /api/connectHost, Port, Dienst, User, Passwortok, Instanz, Connect-ms, Cookie HttpOnly
POST /api/runSQL plus paramsok, results[].rows, status, runtime
GET /api/script/…Datei aus sql/ oder sql_localok, sql, source
FN_PURGE_PLANeinzige Entscheidungsquellepart_name, gate1_ok, gate2_ok, in_trash, eligible, aktion

Hinweg und Rückweg über SWAP

Zwei partitionierte Tabellen tauschen nicht direkt. Dazwischen liegt SWAP: unpartitioniert, strukturgleich, danach wieder leer.

Hinweg: Stage mit SWAP tauschen, dann Trash mit SWAP tauschen. Stage-Partition ist leer, Trash-Partition voll, SWAP leer. Log-Schritt PURGE_B_ENDE. Rückweg: dieselbe Reihenfolge rückwärts. Stage-Partition muss leer sein, sonst kein Restore. Option A braucht keinen SWAP: DROP, TRUNCATE oder DELETE, kein Restore.

ORA-14097 bedeutet abweichende Spalten (Generated versus gespeichert, andere Reihenfolge). Interval-Tabellen behalten die Ankerpartition P_ANCHOR, sonst ORA-14758.

Sieben Karten, die Annahmen knacken

KarteAbsichtErwartung
Bestand identischO_ aus S_ füllenIDENTISCH grün, Purge erlaubt
ODS hat mehrExtra-Zeilen in O_IDENTISCH rot, ODS_MEHR grün
ODS hat wenigerZeilen in O_ löschenIDENTISCH rot, ODS_WENIGER grün
Hash abweichendPayload in O_ ändernIDENTISCH blockiert trotz gleicher Zählung
Stage leerS_ leerenGate 1 ohne fällige Zeilen
Trash vollgleicher Tag schon im TrashOption B überspringt Exchange
ResetS_, O_, TRASH_, LOG_ leerenGrafik auf null

Damit die bekannten Fehler nicht wiederkommen

  • HTML als Datei öffnen (file://) statt http://127.0.0.1 — die Brücke antwortet nicht.
  • Localhost der Brücke mit der Datenbank-IP verwechseln. Nur die Brücke ist 127.0.0.1.
  • Exchange direkt zwischen zwei partitionierten Tabellen. Immer SWAP dazwischen.
  • Gate 2 über die ganze Tabelle statt über den Kalendertag der Partition.
  • Dry Run und Job mit verschiedenem Code. Eine Planfunktion, Parameter p_dry_run nur für die Ausgabe.
  • Datenbankfelder ungeescapet in innerHTML. XSS. Immer escapen.
  • System-Query cutoff fehlt, wenn die Ansicht vor dem Laden der Query-Datei aktualisiert wird.

Bastelreihenfolge

  1. Brücke starten, Bind 127.0.0.1 prüfen.
  2. Objektnamen mappen. Spalten nicht umbenennen.
  3. Maske mit den Zonen aus Abbildung 1 und 2. CSS für opt-a und opt-b.
  4. JavaScript: api, System-SQL parsen, Overview, Gates, Dry Run, Purge, Restore, esc.
  5. Package: Plan, Purge A/B mit SWAP, Restore rückwärts, Clear Trash nach Karenz.
  6. Sieben Testkarten. Abnahme: Dry Run und Job zeigen dieselbe nächste Partition.

Weglassen darf man die zweite Kachel-UI, Spielereien auf den Kanten und das Speichern des Dashboard-Zustands. Das Konzept bleibt.

Labor gesehen — Migration im Bestand?

Dasselbe Denken steckt in unseren Werkzeugen für Cognos und DataStage: sichtbar machen, prüfen, dann erst ändern. Kurztermin in Bonn oder remote.