SQL-Brücke / Wrapper
HTTP-API auf 127.0.0.1, offene Datenbanksitzung, Login-Cookie, Platzhalterprüfung. Nicht neu erfinden.
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.
Inhalte und Reihenfolge sind bindend. Pixelgenaue Positionen nicht. Labor ohne Kundendaten, ohne echte IP, ohne Passwort.
HTTP-API auf 127.0.0.1, offene Datenbanksitzung, Login-Cookie, Platzhalterprüfung. Nicht neu erfinden.
HTML-IDs, CSS-Zustände opt-a/opt-b, JavaScript für Dry Run und Purge, Package mit Planfunktion.
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 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.
| Schicht | Tut | Gibt zurück |
|---|---|---|
| GET /api/session | Sitzung prüfen | connected, expires_in_s, user, schema — ohne Session keine Personendaten |
| POST /api/connect | Host, Port, Dienst, User, Passwort | ok, Instanz, Connect-ms, Cookie HttpOnly |
| POST /api/run | SQL plus params | ok, results[].rows, status, runtime |
| GET /api/script/… | Datei aus sql/ oder sql_local | ok, sql, source |
| FN_PURGE_PLAN | einzige Entscheidungsquelle | part_name, gate1_ok, gate2_ok, in_trash, eligible, aktion |
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.
| Karte | Absicht | Erwartung |
|---|---|---|
| Bestand identisch | O_ aus S_ füllen | IDENTISCH grün, Purge erlaubt |
| ODS hat mehr | Extra-Zeilen in O_ | IDENTISCH rot, ODS_MEHR grün |
| ODS hat weniger | Zeilen in O_ löschen | IDENTISCH rot, ODS_WENIGER grün |
| Hash abweichend | Payload in O_ ändern | IDENTISCH blockiert trotz gleicher Zählung |
| Stage leer | S_ leeren | Gate 1 ohne fällige Zeilen |
| Trash voll | gleicher Tag schon im Trash | Option B überspringt Exchange |
| Reset | S_, O_, TRASH_, LOG_ leeren | Grafik auf null |
Weglassen darf man die zweite Kachel-UI, Spielereien auf den Kanten und das Speichern des Dashboard-Zustands. Das Konzept bleibt.
Dasselbe Denken steckt in unseren Werkzeugen für Cognos und DataStage: sichtbar machen, prüfen, dann erst ändern. Kurztermin in Bonn oder remote.