W bazach danych poziom izolacji określa, jakie skutki współbieżnej pracy transakcji są dopuszczalne. Typowe anomalie to: brudne odczyty (odczyt niezatwierdzonych danych), niepowtarzalne odczyty (ten sam wiersz czytany dwa razy daje różne wartości) oraz odczyty widm (powtórzenie zapytania zwraca inny zestaw wierszy, bo pojawiły się nowe/ubyły wiersze spełniające warunek).
Izolacja Repeatable Read jest "silniejsza" niż Read Committed, ponieważ dąży do tego, aby dane raz odczytane w ramach transakcji nie zmieniły się przed jej zakończeniem. W praktyce (w modelu blokad) oznacza to utrzymanie blokad współdzielonych na odczytanych wierszach do końca transakcji, co:
- eliminuje brudne odczyty – nie da się czytać niezatwierdzonych zmian,
- eliminuje niepowtarzalne odczyty – odczytany wiersz nie może zostać w międzyczasie zmieniony przez inną transakcję w sposób, który zmieniłby wynik kolejnego odczytu tego samego wiersza.
Jednocześnie Repeatable Read nie musi blokować całych przedziałów (zakresów) spełniających warunki zapytania. To kluczowa różnica: nawet jeśli "stare" wiersze są stabilne, inna transakcja może wstawić nowy wiersz, który zacznie spełniać warunek wyszukiwania. Gdy pierwsza transakcja powtórzy zapytanie, zobaczy dodatkowy wiersz – to właśnie odczyt widma.
Dlatego odpowiedź "odczytów widm" jest trafna. Pozostałe propozycje są nietrafne, bo odnoszą się do zjawisk typowo blokowanych na tym poziomie (brudne i niepowtarzalne odczyty) albo do innego typu problemu (utrata aktualizacji), który zależy od wzorca zapisu i kontroli współbieżności, a nie jest standardowo utożsamiany jako "charakterystyczna" anomalia Repeatable Read.
Wskazówka egzaminacyjna: zapamiętaj różnicę między stabilnością wiersza (Repeatable Read) a stabilnością zakresu (Serializable). Widma wynikają właśnie z braku pełnej ochrony zakresu.