Zum Inhalt springen

Datenbanken und betriebliche Datenmodelle – Datensicherung und Wiederherstellung testen

Aus MOOCsWiki Staging
aiMOOC-Siegel aiMOOC

Datenbanken und betriebliche Datenmodelle – Datensicherung und Wiederherstellung testen

QR-Code


Datenbanken und betriebliche Datenmodelle – Datensicherung und Wiederherstellung testen

Interaktiver Ausbildungskurs: Rücksicherung in einer isolierten Umgebung

Zielgruppe Lernzeit Voraussetzungen Lernziel
IT-Ausbildung 90–120 Minuten Python 3.9+, SQL-Grundlagen Sichern, isoliert rücksichern, überprüfen und dokumentieren


Einleitung

Du arbeitest in der fiktiven LernLogistik GmbH. Eine Bestellung wurde versehentlich verändert. Du sollst mit einer lokalen SQLite-Datenbank nachweisen, dass eine Sicherung fachlich korrekt wiederhergestellt werden kann. Alle Daten sind frei erfunden. Verwende weder Kundendaten noch Produktivsysteme, fremde Netze oder Zugangsdaten. Externe Medien sind freiwillige Zusatzmaterialien; das Python-Labor braucht keine Internetverbindung.


Lernstation 1: Datenmodell verstehen

Dauer: 10 Minuten

Tabelle Felder Rolle
kunde id, name Fiktive Kunden
bestellung id, kunde_id, status Bestellungen mit Verweis auf einen Kunden
KUNDE                         BESTELLUNG
id (PK)  1 ------------ n    id (PK)
name                         kunde_id (FK)
                             status

Medienquelle: Wikimedia Commons; Chad250, CC BY-SA 4.0.

Medienquelle: Wikimedia Commons; TrutzX, CC BY-SA 4.0.

Bestellung Kunde Status vor dem Fehler
101 Ada offen
102 Ben versandt

Mini-Aufgabe: Erkläre die Beziehung von Primärschlüssel und Fremdschlüssel. Warum ist eine Bestellung ohne gültigen Kundenverweis fachlich problematisch?


Lernstation 2: Sicherung verstehen

Dauer: 10 Minuten

Ein Backup ist eine gesonderte Sicherung eines Datenstands. Ein Restore ist dessen Rücksicherung. Erst ein erfolgreicher Wiederherstellungstest bestätigt, dass sich die benötigten Daten tatsächlich nutzbar rekonstruieren lassen.

Medienquelle: Wikimedia Commons; Inowen, Bearbeitung Smasongarrison, CC BY-SA 4.0.

Medienquelle: Wikimedia Commons; Olaf Pichler, CC BY-SA 4.0.

Die 3-2-1-Regel steht für drei Exemplare der Daten, zwei unterschiedliche Speichermedientypen und eine Kopie außerhalb des primären Standorts. RAID ersetzt keine Datensicherung.

IBM Technology: Disaster Recovery vs. Backup. Externe Videoinhalte nur nach Zustimmung öffnen.

Mini-Aufgabe: Erkläre, warum ein RAID-Verbund versehentlich gelöschte Bestelldaten nicht zwangsläufig wiederherstellen kann.


Lernstation 3: Rücksicherung planen

Dauer: 10 Minuten

Begriff Bedeutung Beispiel
RPO Höchstens tolerierbarer zeitlicher Datenverlust 30 Minuten
RTO Höchstens tolerierte Dauer bis zum benötigten Wiederanlauf 60 Minuten
Datenintegrität Technische und fachliche Konsistenz Gültige Beziehungen und Bestellstatus
09:00 Backup --- 09:20 Störung --- 09:35 Wiederanlauf
        Datenverlustfenster: bis zu 20 Minuten
        Wiederanlaufdauer: 15 Minuten

Mini-Aufgabe: Kann ein sehr schneller Restore ungeeignet sein, obwohl die Datenbank technisch fehlerfrei ist? Begründe.


Lernstation 4: Das lokale SQLite-Labor

Dauer: 20–30 Minuten

Die SQLite-Backup-API erstellt eine konsistente Sicherung. Das Labor erzeugt drei getrennte Datenbankdateien in einem temporären lokalen Verzeichnis: live.db, backup.db und restore.db. Es verbindet sich mit keinem Netzwerk und verändert keine fremden Dateien. Die Übung demonstriert Dateitrennung; für einen betrieblichen Test ist zusätzlich eine autorisierte, technisch isolierte Umgebung erforderlich.

Phase live.db backup.db restore.db
Start 101: offen Fehlt Fehlt
Sicherung 101: offen 101: offen Fehlt
Fehler 101: storniert 101: offen Fehlt
Restore 101: storniert 101: offen 101: offen


Lokal ausführbarer Python-Code

Speichere die folgenden Zeilen als restore_lab.py. Benötigt wird ausschließlich Python 3.9 oder neuer mit Standardbibliothek.

import sqlite3
import sys
import tempfile
import time
from contextlib import closing
from pathlib import Path

SOLL = [(101, "Ada", "offen"), (102, "Ben", "versandt")]

def verbinden(datei):
    db = sqlite3.connect(datei)
    db.execute("PRAGMA foreign_keys = ON")
    return db

def startdaten(live):
    with closing(verbinden(live)) as db:
        db.executescript("""
            CREATE TABLE kunde (
                id INTEGER PRIMARY KEY, name TEXT NOT NULL);
            CREATE TABLE bestellung (
                id INTEGER PRIMARY KEY,
                kunde_id INTEGER NOT NULL REFERENCES kunde(id),
                status TEXT NOT NULL);
            INSERT INTO kunde VALUES (1, 'Ada'), (2, 'Ben');
            INSERT INTO bestellung VALUES
                (101, 1, 'offen'), (102, 2, 'versandt');
        """)
        db.commit()

def daten_pruefen(datei):
    if not datei.is_file():
        raise FileNotFoundError("Datenbankdatei fehlt")
    with closing(verbinden(datei)) as db:
        assert db.execute("PRAGMA integrity_check").fetchone()[0] == "ok"
        assert db.execute("PRAGMA foreign_key_check").fetchall() == []
        daten = db.execute("""
            SELECT b.id, k.name, b.status
            FROM bestellung b JOIN kunde k ON k.id = b.kunde_id
            ORDER BY b.id
        """).fetchall()
        assert len(daten) == 2, "Bestellungen fehlen"
        return daten

def sichern(live, backup):
    with closing(verbinden(live)) as quelle, closing(verbinden(backup)) as ziel:
        quelle.backup(ziel)
    print("Backup erstellt:", daten_pruefen(backup))

def fehler_simulieren(live):
    with closing(verbinden(live)) as db:
        db.execute("UPDATE bestellung SET status = ? WHERE id = ?",
                   ("storniert", 101))
        db.commit()
    print("Nur Testdaten veraendert:", daten_pruefen(live))

def ruecksichern(backup, restore):
    if not backup.is_file():
        raise FileNotFoundError("Kein Backup: Test nicht bestanden")
    beginn = time.perf_counter()
    with closing(verbinden(backup)) as quelle, closing(verbinden(restore)) as ziel:
        quelle.backup(ziel)
    daten = daten_pruefen(restore)
    dauer = time.perf_counter() - beginn
    print("Isoliertes Restore:", daten)
    print(f"Restore inkl. Pruefung: {dauer:.3f} Sekunden (nur Labor)")
    return daten

def automatischer_test(live, backup, restore):
    sichern(live, backup)
    fehler_simulieren(live)
    assert daten_pruefen(live) != SOLL
    assert ruecksichern(backup, restore) == SOLL
    assert daten_pruefen(live) != SOLL
    print("BESTANDEN: Datenmodell, Inhalt und Isolation geprueft")

def menue(live, backup, restore):
    while True:
        print("\n1=Live ansehen 2=Backup 3=Fehler 4=Restore 5=Restore pruefen 0=Ende")
        wahl = input("Auswahl: ").strip()
        try:
            if wahl == "1":
                print(daten_pruefen(live))
            elif wahl == "2":
                sichern(live, backup)
            elif wahl == "3":
                fehler_simulieren(live)
            elif wahl == "4":
                ruecksichern(backup, restore)
            elif wahl == "5":
                print("Pruefung:", daten_pruefen(restore))
                print("Abgleich mit Soll:", daten_pruefen(restore) == SOLL)
            elif wahl == "0":
                return
            else:
                print("Bitte 0 bis 5 waehlen.")
        except (AssertionError, FileNotFoundError, sqlite3.DatabaseError) as fehler:
            print("TEST NICHT BESTANDEN:", fehler)

def main():
    with tempfile.TemporaryDirectory(prefix="aimooc_restore_") as ordner:
        pfad = Path(ordner)
        live = pfad / "live.db"
        backup = pfad / "backup.db"
        restore = pfad / "restore.db"
        startdaten(live)
        print("Nur lokale Uebungsdateien in:", pfad)
        if len(sys.argv) > 1 and sys.argv[1] == "--test":
            automatischer_test(live, backup, restore)
        else:
            menue(live, backup, restore)
        print("Testdateien werden beim Beenden geloescht.")

if __name__ == "__main__":
    main()


Test durchführen

Starte lokal python3 restore_lab.py (unter Windows ggf. py restore_lab.py). Bearbeite die Menüoptionen in der Reihenfolge 1, 2, 3, 4, 5. Für einen automatischen Testlauf verwende python3 restore_lab.py --test. Erwartete Abschlussmeldung: BESTANDEN: Datenmodell, Inhalt und Isolation geprueft.

Lokaler Versuch Menüfolge Erwartetes Ergebnis
Erfolgreiche Rücksicherung 2, 3, 4, 5 Restore entspricht dem ursprünglichen Sollzustand
Fehlende Sicherung Neues Labor, sofort 4 Aussagekräftige Fehlermeldung
Fehlende Restore-Datei Neues Labor, sofort 5 Prüfung erkennt fehlende Datei
Bereits veränderter Sicherungsstand 3, 2, 4, 5 Fachlicher Sollvergleich negativ trotz lesbarer Datenbank

Hinweis: Die angezeigte lokale Laufzeit ist kein vollständiger betrieblicher RTO-Nachweis; Anwendungsstart und Freigabezeiten fehlen.


Gestufte Hilfen

Hilfe 1: Suche im Code sichern, ruecksichern und daten_pruefen.

Hilfe 2: quelle.backup(ziel) schreibt eine konsistente Kopie; die SQL-Abfrage mit JOIN kontrolliert den erwarteten Kundenbezug.

Hilfe 3: Führe python3 restore_lab.py --test aus. Die Erfolgsnachricht setzt wiederhergestellte Sollwerte, konsistente Beziehungen und eine unveränderte Live-Testdatei voraus.


Lernstation 5: Restore-Qualität bewerten

Dauer: 10 Minuten

Kontrolle Technik Was wird geprüft?
Datei vorhanden Existenzprüfung Datei existiert
Interne Struktur PRAGMA integrity_check SQLite-interne Konsistenz
Beziehungen PRAGMA foreign_key_check Fremdschlüsselverletzungen
Geschäftslogik SQL-Sollabgleich Erwartete Bestellung und Status
Isolation Vergleich von Live und Restore Keine Überschreibung der Live-Datei

Merke: Eine formal intakte Datenbank kann fachlich veraltete oder falsche Bestellungen enthalten.


Lernstation 6: Testprotokoll

Dauer: 10 Minuten

Prüffeld Was dokumentierst Du?
Datenart Fiktive Bestellungen
Quelle Temporäre lokale live.db
Sicherung Lokale backup.db
Rücksicherung Getrennte restore.db
Integrität Ergebnis von integrity_check
Beziehungen Ergebnis von foreign_key_check
Fachliche Prüfung Bestellung 101 offen und 102 versandt
Zeit Eigener Labormesswert; kein vollständiges RTO
Freigabe Bestanden / nicht bestanden mit Begründung


Interaktive Aufgaben


Quiz: Teste Dein Wissen

In welche Umgebung gehört eine Rücksicherungsübung mit betrieblichen Daten? (In eine ausdrücklich freigegebene isolierte Testumgebung) (!In das laufende Produktivsystem) (!In einen fremden Server) (!In eine unbekannte öffentliche Datenbank)



Welche Beziehung besteht zwischen Kunde und Bestellung im Ausbildungsfall? (Ein Kunde kann mehrere Bestellungen besitzen) (!Jede Bestellung besitzt mehrere Kunden) (!Es gibt keine Beziehung) (!Jeder Kunde muss genau zwei Bestellungen besitzen)



Welche Python-Methode verwendet das Labor für SQLite-Sicherungen? (Connection.backup) (!Connection.drop) (!Connection.format) (!Connection.transfer_network)



Warum genügt die bloße Existenz einer Sicherungsdatei nicht? (Sie beweist noch keine erfolgreiche Wiederherstellbarkeit) (!Sie garantiert immer alle Daten) (!Sie ersetzt jeden Funktionstest) (!Sie belegt automatisch die Einhaltung des RTO)



Welche SQLite-Anweisung kontrolliert interne Strukturfehler? (PRAGMA integrity_check) (!PRAGMA delete_database) (!PRAGMA network_scan) (!PRAGMA reset_users)



Welche SQLite-Anweisung überprüft Fremdschlüsselverletzungen? (PRAGMA foreign_key_check) (!PRAGMA cache_size) (!PRAGMA page_size) (!PRAGMA encoding)



Was beschreibt das RPO? (Maximal tolerierbaren zeitlichen Datenverlust) (!Anzahl der Datenbanktabellen) (!Geschwindigkeit der SQL-Abfrage) (!Maximal zulässige Benutzerzahl)



Was beschreibt das RTO? (Maximal tolerierte Wiederherstellungsdauer) (!Anzahl der Sicherungsdateien) (!Größe des Datenmodells) (!Anzahl der Fremdschlüssel)



Warum kann ein technisch intaktes Backup fachlich ungeeignet sein? (Es kann bereits unerwünschte Datenänderungen enthalten) (!Integritätsprüfungen ändern alle Bestellungen) (!Jedes Backup ist automatisch aktuell) (!Ein Restore löscht immer alle Fremdschlüssel)



Welche Aussage über RAID und Backups ist korrekt? (RAID allein ersetzt keine unabhängige Datensicherung) (!RAID verhindert jedes versehentliche Löschen) (!RAID macht Restore-Tests unnötig) (!RAID garantiert dauerhaft unveränderliche Daten)




Memory

Sicherungskopie Gespeicherter Datenstand zur Wiederherstellung
Rücksicherung Wiederherstellung aus gesicherten Daten
Primärschlüssel Eindeutiger Bezeichner eines Datensatzes
Fremdschlüssel Verweis auf einen Datensatz einer anderen Tabelle
Integritätsprüfung Kontrolle interner Datenbankstrukturen
RPO Maximal zulässiger zeitlicher Datenverlust
RTO Maximal tolerierte Wiederherstellungsdauer
Testprotokoll Dokumentierter Nachweis der Prüfung




Drag and Drop

Ordne die richtigen Begriffe zu. Aufgabe
Sicherung Konsistentes Datenbankabbild erstellen
Störung Fehlerhafte Datenänderung simulieren
Restore Gesicherten Datenstand in Testdatei wiederherstellen
Technikprüfung Datenbankstruktur und Beziehungen kontrollieren
Fachprüfung Geschäftsdaten mit dem erwarteten Zustand vergleichen




Kreuzworträtsel

Backup Wie heißt eine Sicherungskopie auf Englisch?
Restore Wie heißt die Rücksicherung auf Englisch?
Kunde Auf welche betriebliche Entität verweist eine Bestellung im Übungsmodell?
Fremdschluessel Welcher Schlüssel stellt eine Beziehung zwischen Tabellen her?
Isolation Welches Prinzip trennt die Übungsumgebung von produktiven Systemen?
Protokoll Wie nennt man die schriftliche Dokumentation eines Testergebnisses?




LearningApps

Externe Übungen nur nach Zustimmung öffnen; keine Kunden- oder Zugangsdaten eingeben.


Lückentext

Vervollständige den Text.
Eine strukturierte Sammlung zusammengehöriger Informationen wird als

bezeichnet.
Der eindeutige Bezeichner eines Datensatzes heißt

.
Die Verbindung einer Bestellung zum zugehörigen Kunden erfolgt über einen

.
Eine zusätzliche Kopie eines Datenstands wird als

bezeichnet.
Die Wiederherstellung gesicherter Daten nennt man

.
Im Python-Labor wird die eingebaute Bibliothek

verwendet.
Die technische Strukturkontrolle erfolgt mit PRAGMA

.
Die Kontrolle auf verletzte Beziehungen erfolgt mit PRAGMA

.
Der maximal tolerierbare zeitliche Datenverlust wird durch das

beschrieben.
Die maximal tolerierte Wiederherstellungsdauer bezeichnet man als

.
Die Rücksicherung muss in einer

Testumgebung erfolgen.
Ein dokumentiertes Ergebnis gehört in ein

.



Offene Aufgaben


Leicht

  1. Datenmodell: Zeichne die beiden Tabellen des Ausbildungsfalls und kennzeichne Primär- und Fremdschlüssel.
  2. Relationale Datenbank: Erkläre anhand der Bestellungen 101 und 102, weshalb ein Kunde mehrere Bestellungen besitzen kann.
  3. Datensicherung: Gestalte eine Skizze mit Quelldatenbank, Backup und getrennter Rücksicherungsdatei.
  4. Datenintegrität: Formuliere drei Bedingungen, die eine brauchbare wiederhergestellte Bestelldatenbank erfüllen soll.


Standard

  1. SQLite: Führe den automatisierten Testlauf lokal aus und halte die Prüfergebnisse fest.
  2. Wiederherstellung: Führe Sicherung, Fehler und Restore mit dem interaktiven Menü durch.
  3. Fehleranalyse: Stelle einen fehlenden Sicherungsstand nach und begründe den Testabbruch.
  4. Recovery Point Objective: Berechne das mögliche Datenverlustfenster zwischen Backup um 09:00 Uhr und Störung um 09:20 Uhr.


Schwer

  1. Recovery Time Objective: Erstelle einen Testplan mit fiktivem RTO von 30 Minuten und getrennten Messwerten für Kopieren, Prüfen und Anwendungsstart.
  2. Notfallmanagement: Entwickle eine Checkliste für regelmäßige autorisierte und isolierte Rücksicherungstests.
  3. Informationssicherheit: Analysiere Risiken von Backup-Dateien mit zu weitreichenden Schreibrechten.
  4. Testautomatisierung: Ergänze ein weiteres fiktives Datenfeld und prüfe dessen Sollwert automatisch.




Text bearbeiten Bild einfügen Video einbetten Interaktive Aufgaben erstellen



Begründetes Feedback

Niveau Nachweis Rückmeldung
Basis Datenmodell und getrennte Sicherungsdateien korrekt erklärt Wichtig, weil ohne erwartete Beziehungen keine fachliche Prüfung möglich ist.
Anwendung Restore und SQL-Sollvergleich nachgewiesen Aussagekräftig, weil die bloße Existenz einer Datei kein Wiederherstellungstest ist.
Transfer Risiken, Zeitziele und Freigabeanforderungen begründet Erforderlich, weil ein Labor-Restore nicht automatisch den vollständigen betrieblichen Wiederanlauf belegt.

Fehlende Sicherung: Nicht bestanden, weil kein Datenstand zur Rücksicherung vorliegt. Sicherung nach der fehlerhaften Änderung: Technisch möglicherweise intakt, fachlich nicht bestanden, weil der Sollzustand fehlt. Korrekte isolierte Rücksicherung: Bestanden, wenn technische Integrität, Beziehungen, Sollwerte und Dateitrennung nachweisbar stimmen.


Lernkontrolle

  1. Datenqualität: Erkläre, warum ein strukturell intaktes Restore mit falschem Bestellstatus nicht fachlich erfolgreich ist.
  2. Datensicherungskonzept: Beurteile tägliche Backups bei einem geforderten RPO von 30 Minuten und entwickle eine Verbesserung.
  3. Wiederanlauf: Die Datenbank ist nach fünf Minuten lesbar, die Anwendung braucht 25 weitere Minuten. Prüfe ein RTO von 20 Minuten.
  4. Datenmodellierung: Eine Bestellung verweist auf einen fehlenden Kunden. Erkläre die Auswirkung und geeignete Prüfungen.
  5. Teststrategie: Entwickle eine sichere Schrittfolge für Backup, simulierten Fehler, isolierten Restore, Prüfung und Freigabe.
  6. Risikobewertung: Vergleiche eine Sicherungsstrategie ohne Restore-Test mit regelmäßig geprüften Sicherungen und begründe Deine Bewertung.


Lernnachweis

  1. Datenmodell: Tabellen, Schlüssel und Beziehungen darstellen.
  2. Ausgangssituation: Fiktiven Bestellfehler und erwarteten Zustand beschreiben.
  3. Durchführung: Backup, Simulation, Restore und Prüfungen dokumentieren.
  4. Technischer Nachweis: Integritäts- und Fremdschlüsselprüfung erfassen.
  5. Fachlicher Nachweis: Bestellungen und Status mit Sollwerten abgleichen.
  6. Zeitliche Bewertung: Labormessung von RPO und RTO abgrenzen.
  7. Sicherheit: Isolation und Nutzung ausschließlich fiktiver Daten belegen.
  8. Reflexion: Eine Verbesserung begründet vorschlagen.

Bestanden, wenn der Restore reproduzierbar gelingt, ein negativer Testfall erklärt werden kann und die Grenzen des lokalen Labors verstanden wurden.


OERs zum Thema

  1. SQLite: Online Backup API – offizielle Beschreibung des Sicherungsverfahrens.
  2. Python: sqlite3 – Dokumentation der Python-Datenbankschnittstelle.
  3. SQLite: PRAGMA – Dokumentation der Integritäts- und Fremdschlüsselprüfungen.
  4. NIST SP 800-34 – Leitlinien für Notfallplanung und Wiederherstellungstests.
  5. Wikipedia: Datensicherung – ergänzende Grundlagen.


Medienrechte und Datenschutz

Die eingebundenen Commons-Bilder sind über die Dateibeschreibungsseiten prüfbar. Beachte vor erneuter Nutzung insbesondere Namensnennung und ShareAlike-Bedingungen: Entity Relationship Diagram Examples, Entity Relation Modell Beispiel Tabellen, Backup diagram und 3-2-1 backup. Die Einbettung externer Videos ist keine Lizenz zur Weiterverbreitung oder Bearbeitung des Videomaterials. Beim Öffnen externer Medien können Verbindungsdaten an deren Betreiber fließen; verwende dafür keine echten Betriebsinformationen.


Verknüpfte Lernbereiche


aiMOOC-Projekte



Schulfach+




aiMOOCs



aiMOOC Projekte









MOOCwiki · Deutsch

Nach dem Lernen ist vor dem Lernen

Entdecke direkt den nächsten Lernkurs. Weitere Inhalte erscheinen, wenn Du weiter nach unten scrollst.

Zur MOOCwiki-Hauptseite

Mediathek

Inhalte werden geladen ...

Mediathek wird aus dem Wiki geladen ...