Files
fotospiel-app/docs/ops/dr-tenant-event-restore.md
2025-11-20 12:31:21 +01:00

98 lines
5.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
title: DR-Playbook Tenant/Event versehentlich gelöscht
sidebar_label: DR Tenant/Event
---
Dieses Playbook beschreibt, wie du vorgehst, wenn ein Tenant oder Event versehentlich gelöscht oder stark beschädigt wurde. Es baut auf den allgemeinen Hinweisen aus `docs/ops/backup-restore.md` auf.
> Wichtig: Diese Schritte sollten zuerst in einer **Staging-Umgebung** geübt werden. In Produktion nur nach klarer Freigabe und mit sauberer Dokumentation anwenden.
## 1. Schadensbild erfassen
Bevor du irgendetwas wiederherstellst:
- **Was genau ist betroffen?**
- Nur ein Event (z.B. versehentlich im Admin archiviert/gelöscht)?
- Mehrere Events eines Tenants?
- Der komplette Tenant (inkl. Benutzer, Events, Pakete)?
- **Welche Daten fehlen/fehlerhaft?**
- Fehlen nur Metadaten (Events, Fotos, Pakete) oder auch MedienDateien?
- Gibt es noch Spuren im Admin/UI (z.B. leere Übersichten, aber Logs mit Fehlermeldungen)?
- **Zeitfenster eingrenzen**
- Wann wurde der Fehler bemerkt?
- Wann war der Zustand sicher noch korrekt (z.B. vor letztem Deploy / gestern Abend)?
Diese Informationen bestimmen, welches Backup verwendet werden sollte.
## 2. Logische vs. physische Schäden unterscheiden
- **Logischer Schaden**
- Falsche Flags (Status falsch, Event „archiviert“ statt „aktiv“).
- Inkompatible PaketZuweisungen, aber Daten sind noch vorhanden.
- Lösbare Fälle oft ohne Restore durch gezielte Updates / AdminUI.
- **Physischer Schaden**
- Reihen in KernTabellen gelöscht (z.B. `events`, `photos`, `event_media_assets`, `tenants`).
- MedienDateien im Storage gelöscht/überschrieben.
Nur bei physischen Schäden ist ein Restore aus Backup nötig. Logische Schäden sollten möglichst mit minimalinvasiven Korrekturen behoben werden.
## 3. Vorgehen bei einzelnen Events
### 3.1 Datenbank Event-Datensätze identifizieren
1. **Event-IDs ermitteln**
- Aus Logs, alten Links, Metriken oder Backups.
2. **Querverweise prüfen**
- `events` (Basisdaten), `photos`, `event_media_assets`, `event_packages`, ggf. `event_join_tokens`.
3. **Temporäre Restore-DB nutzen**
- Erzeuge eine temporäre Datenbank (z.B. `fotospiel_restore`) und spiele den relevanten BackupDump ein.
- Dort die betroffenen EventDatensätze suchen.
### 3.2 Selektiver Restore von Event-Daten
Empfohlenes Muster:
- In **Restore-DB**:
- Exportiere alle relevanten Zeilen für das Event (z.B. `events`, `photos`, `event_media_assets`) in SQL/CSV.
- In **Produktions-DB**:
- Prüfe, ob IDs kollidieren (z.B. neue Events seit dem Backup).
- Freie IDs und referentielle Integrität beachten; wenn IDs bereits vergeben sind, ist ein reiner Import meist nicht möglich → dann manuelle Rekonstruktion (neues Event + Medien erneut verknüpfen).
> Dieses Playbook beschreibt bewusst kein generisches „SQL-Skript“, weil die tatsächliche Struktur und IDs von der aktuellen Migration abhängen. Ziel ist, die **Vorgehensweise** zu standardisieren, nicht ein unüberlegtes MassenUpdate.
### 3.3 Medien-Dateien
1. In der RestoreUmgebung prüfen, welche Pfade `event_media_assets` für das Event referenzieren.
2. Im BackupStorage nach diesen Pfaden suchen (Hot und ggf. ArchivBucket).
3. Fehlende Dateien in das produktive StorageVolume/Bucket an den erwarteten Pfad kopieren.
Wenn die Medien physisch nicht mehr vorhanden sind, ist nur eine teilweise Rekonstruktion möglich (z.B. Thumbnails ohne Originale) das sollte mit dem Tenant klar kommuniziert werden.
## 4. Vorgehen bei Tenant-weiten Fehlern
Wenn ein kompletter Tenant versehentlich gelöscht wurde (inkl. Benutzer/Events):
1. **Einordnung**
- Handelt es sich um einen isolierten Tenant oder könnten mehrere betroffen sein (z.B. durch fehlerhaftes Skript)?
2. **Restore-Strategie wählen**
- _Variante A: Partial Restore_ nur die Tabellenzeilen zum Tenant aus der BackupDB in die ProduktionsDB zurückführen.
- _Variante B: Backup-Spiegel_ Tenant + zugehörige Medien in eine separate Umgebung wiederherstellen und dem Kunden dort einen temporären Zugang geben.
3. **Risikoabwägung**
- Partial Restore in eine laufende ProduktionsDB trägt höhere Risiken (Kollisionsgefahr mit neuen Daten).
- SpiegelVariante ist operativ aufwändiger, kann aber sicherer sein, wenn viele neue Daten seit dem Backup hinzugekommen sind.
> Welche Variante gewählt wird, sollte von PlatformOps + Produkt gemeinsam entschieden werden.
## 5. Kommunikation & Dokumentation
- **Mit dem betroffenen Tenant**
- Ehrlich kommunizieren, was passiert ist, was wiederherstellbar ist und welches Risiko ein Restore birgt.
- Zeitrahmen und mögliche Einschränkungen klar benennen.
- **Intern**
- Den gesamten Prozess in einem `docs/process/changes/*`Eintrag oder im Ticketing festhalten:
- Was, wann, warum schief ging.
- Welche RestoreSchritte durchgeführt wurden.
- Welche Verbesserungen künftig notwendig sind (z.B. bessere Schutzmechanismen, zusätzliche Bestätigungen beim Löschen).
Dieses Playbook ist bewusst höherlevelig gehalten; spezifische SQL oder ToolSnippets sollten ergänzend in einem internen Notizsystem oder als separate Anhänge gepflegt werden, sobald eure BackupPipelines stabil etabliert sind.