Wie sichert die Datenbank ihre Daten?
-
Hi,
was tun Datenbankmanagement-Systeme, damit gemachte Änderungen nicht verloren gehen? Sie jedes Mal gleich auf die Festplatte zu schreiben wäre ja bestimmt zu aufwendig. Wenn die Änderungen also erst mal nur im RAM stattfinden und plötzlich der Strom ausfällt, sind die Daten weg. Stimmt das? Wie sichert sich die Datenbank gegen sowas ab? Wann schreibt sie ihre Änderungen auf die Festplatte?
-
Datenbanker schrieb:
Hi,
was tun Datenbankmanagement-Systeme, damit gemachte Änderungen nicht verloren gehen? Sie jedes Mal gleich auf die Festplatte zu schreiben wäre ja bestimmt zu aufwendig. Wenn die Änderungen also erst mal nur im RAM stattfinden und plötzlich der Strom ausfällt, sind die Daten weg. Stimmt das? Wie sichert sich die Datenbank gegen sowas ab? Wann schreibt sie ihre Änderungen auf die Festplatte?
Deine Frage ist viel zu generell um sie sauber und gleichzeitig kurz zu beantworten. Viel hängt hier von der jeweiligen Konfiguration des DBMS ab.
Stichworte zur Eigenrecherche:
- Transaktion
- Log-Datei und Log-(Ring)puffer
- Datenbasis und Datenbankpuffer
- Pufferverdrängungsstrategien
- WAL-Prinzip (write ahead log)
- Fehlerrecovery
(alles im Kontext von Datenbanken)Wenn eine Transaktion comitted wurde, dann darfst du davon ausgehen, dass das DBMS die modifizierten Daten (durch die Transaktion) rekonstruieren kann.
Wenn eine Transaktion nicht comitted wurde, dann kannst du davon ausgehen, dass diese nicht die Daten der DB verschmutzt hat (nach Durchführung von Recoveryvorgang).
-
Datenbanker schrieb:
was tun Datenbankmanagement-Systeme, damit gemachte Änderungen nicht verloren gehen? Sie jedes Mal gleich auf die Festplatte zu schreiben wäre ja bestimmt zu aufwendig.
Nein, wäre es nicht, denn genau das wird gemacht.
Wenn die Änderungen also erst mal nur im RAM stattfinden und plötzlich der Strom ausfällt, sind die Daten weg. Stimmt das? Wie sichert sich die Datenbank gegen sowas ab? Wann schreibt sie ihre Änderungen auf die Festplatte?
Ja, wenn. Ist aber nicht so. Siehe oben, die Daten werden "sofort" auf der Festplatte (bzw. allgemein: nicht flüchtiger Speicher, kann auch ne SSD/... sein) gespeichert.
Und "sofort" heisst: sobald die Transaktion committed wird.Falls die der Begriff Transaktion nichts sagt: damit kannst du im Prinzip einfach mehrere Änderungen zu einem grösseren Änderungs-Block zusammenfassen. Wenn du z.B. 10 Änderungen machst, die nur zusammen Sinn machen, dann machst du diese 10 Änderungen eben in einer Transaktion. Einerseits stellt die DB dann sicher dass entweder alle Änderungen zusammen oder gar keine Änderung übernommen wird. Und andrerseits muss die DB so nicht 10x ne Änderung speichern, sondern nur 1x alle 10 Änderungen gemeinsam. Das hilft auch HDD Zugriffe zu sparen.
Wenn keine Transaktionen verwendet werden, machen Datenbank-Server normalerweise pro Statement eine eigene implizite Transaktion. D.h. die Änderungen werden dann wirklich sofort gespeichert.
@Zebald
Wieso sollte die Frage zu generell gestellt sein? Ich finde die lässt sich ganz einfach beantworten.