Datenbanken und betriebliche Datenmodelle – Datensicherung und Wiederherstellung testen
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
Offene Aufgaben
Leicht
- Datenmodell: Zeichne die beiden Tabellen des Ausbildungsfalls und kennzeichne Primär- und Fremdschlüssel.
- Relationale Datenbank: Erkläre anhand der Bestellungen 101 und 102, weshalb ein Kunde mehrere Bestellungen besitzen kann.
- Datensicherung: Gestalte eine Skizze mit Quelldatenbank, Backup und getrennter Rücksicherungsdatei.
- Datenintegrität: Formuliere drei Bedingungen, die eine brauchbare wiederhergestellte Bestelldatenbank erfüllen soll.
Standard
- SQLite: Führe den automatisierten Testlauf lokal aus und halte die Prüfergebnisse fest.
- Wiederherstellung: Führe Sicherung, Fehler und Restore mit dem interaktiven Menü durch.
- Fehleranalyse: Stelle einen fehlenden Sicherungsstand nach und begründe den Testabbruch.
- Recovery Point Objective: Berechne das mögliche Datenverlustfenster zwischen Backup um 09:00 Uhr und Störung um 09:20 Uhr.
Schwer
- Recovery Time Objective: Erstelle einen Testplan mit fiktivem RTO von 30 Minuten und getrennten Messwerten für Kopieren, Prüfen und Anwendungsstart.
- Notfallmanagement: Entwickle eine Checkliste für regelmäßige autorisierte und isolierte Rücksicherungstests.
- Informationssicherheit: Analysiere Risiken von Backup-Dateien mit zu weitreichenden Schreibrechten.
- Testautomatisierung: Ergänze ein weiteres fiktives Datenfeld und prüfe dessen Sollwert automatisch.


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
- Datenqualität: Erkläre, warum ein strukturell intaktes Restore mit falschem Bestellstatus nicht fachlich erfolgreich ist.
- Datensicherungskonzept: Beurteile tägliche Backups bei einem geforderten RPO von 30 Minuten und entwickle eine Verbesserung.
- Wiederanlauf: Die Datenbank ist nach fünf Minuten lesbar, die Anwendung braucht 25 weitere Minuten. Prüfe ein RTO von 20 Minuten.
- Datenmodellierung: Eine Bestellung verweist auf einen fehlenden Kunden. Erkläre die Auswirkung und geeignete Prüfungen.
- Teststrategie: Entwickle eine sichere Schrittfolge für Backup, simulierten Fehler, isolierten Restore, Prüfung und Freigabe.
- Risikobewertung: Vergleiche eine Sicherungsstrategie ohne Restore-Test mit regelmäßig geprüften Sicherungen und begründe Deine Bewertung.
Lernnachweis
- Datenmodell: Tabellen, Schlüssel und Beziehungen darstellen.
- Ausgangssituation: Fiktiven Bestellfehler und erwarteten Zustand beschreiben.
- Durchführung: Backup, Simulation, Restore und Prüfungen dokumentieren.
- Technischer Nachweis: Integritäts- und Fremdschlüsselprüfung erfassen.
- Fachlicher Nachweis: Bestellungen und Status mit Sollwerten abgleichen.
- Zeitliche Bewertung: Labormessung von RPO und RTO abgrenzen.
- Sicherheit: Isolation und Nutzung ausschließlich fiktiver Daten belegen.
- 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
- SQLite: Online Backup API – offizielle Beschreibung des Sicherungsverfahrens.
- Python: sqlite3 – Dokumentation der Python-Datenbankschnittstelle.
- SQLite: PRAGMA – Dokumentation der Integritäts- und Fremdschlüsselprüfungen.
- NIST SP 800-34 – Leitlinien für Notfallplanung und Wiederherstellungstests.
- 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-HauptseiteMediathek
Mediathek wird aus dem Wiki geladen ...
Keine passenden Inhalte gefunden. Bitte ändere Suche oder Filter.
NEWSLernweltNOAH fragen