Halloween-Problem
Das Halloween-Problem bezeichnet ein Phänomen, das bei einem Datenbankzugriff auftreten kann, bei dem eine Aktualisierung durch eine angeknüpfte Bedingung von dem, was es ändert, abhängt. Entdeckt wurde es von Datenbankentwicklern bei IBM in den 1970er-Jahren. Der Name leitet sich vom Tag der Entdeckung her, dem 31. Oktober, an dem das Fest Halloween gefeiert wird.
Beispiele für das Halloween-Problem
Ein Halloween-Problem tritt beispielsweise bei den folgenden Anwendungen auf:
- In jeder Zeile, in der der Wert der Spalte A einem Kriterium K gerecht wird, soll der Wert der Spalte A geändert werden.
- Die ursprüngliche Form des Halloween-Problems. Im konkreten Fall sollte allen Mitarbeitern eines Betriebes eine Gehaltserhöhung gegeben werden, wenn diese nicht bereits mehr als $25.000 verdienten. Ein Statement mit der Intention „Gib jedem Mitarbeiter, der weniger als $25.000 verdient, eine Gehaltserhöhung von 10 %“ führte dazu, dass die glücklichen Mitarbeiter alle mindestens $25.000 verdienten, da das System das Gehalt so lange erhöhte, bis die Bedingung des Update-Statements nicht mehr griff.
- Für jede Zeile in einer Tabelle soll eine weitere Zeile hinzugefügt werden.
- Ein konkretes Beispiel für diese Inkarnation des Halloween-Problems ist eine Tabelle, in der jeder Datensatz dupliziert werden soll. Wenn das Halloween-Problem hierbei auftritt, äußert es sich so, dass die Ergebnisse der Verdopplung ihrerseits ebenfalls verdoppelt werden.
Vermeidung
Der SQL-Standard sieht vor, dass vor der Anwendung von Triggern alle Datensätze in eine temporäre Tabelle kopiert werden müssen. Änderungen wirken sich dann nicht mehr auf Trigger aus. Um ein Halloween-Problem bei anderen Aufgabenstellungen zu vermeiden, können solche temporäre Tabellen manuell für die Laufzeit einer Datenbankabfrage angelegt werden. Das bedeutet, dass beispielsweise eine Gehaltserhöhung für alle Mitarbeiter mit einer Bezahlung unterhalb eines Mindestgehalts so durchgeführt werden kann, dass in einem ersten Arbeitsschritt alle Mitarbeiter mit entsprechend geringem Gehalt ermittelt und in einer temporären Tabelle abgelegt werden. Anschließend wird allen Mitarbeitern, die in der temporären Tabelle enthalten sind, einmalig das Gehalt erhöht.
Technische Details zur Entstehung
Ein möglicher Grund für das Auftreten eines Halloween-Problems ist, dass der Speicherort einer Zeile durch eine Aktualisierung geändert wird. So kann beispielsweise eine Aktualisierung eine Verlegung der Daten einer Zeile ans Ende oder an eine andere freie Stelle einer Datenbank erfordern. Geht das Datenbanksystem bei der Abarbeitung des Update-Statements dann einfach alle Datensätze der Reihe nach durch, kann es geschehen, dass diese verschobenen Datensätze ein weiteres Mal bearbeitet werden.