Basis van databases

Welke beschrijving van een dirty read, een van de problemen die optreden als transacties gelijktijdig lopen, is juist?

  1. AEen transactie leest een wijziging die een andere transactie nog niet heeft gecommit, en omdat die transactie daarna een rollback uitvoert, gebruikt ze uiteindelijk een waarde die nooit heeft bestaan
  2. BWordt binnen één transactie dezelfde rij twee keer gelezen, dan geeft dat een andere waarde, omdat een andere transactie de rij tussendoor heeft gewijzigd en gecommit
  3. CWordt een zoekopdracht met dezelfde voorwaarde twee keer uitgevoerd, dan geeft dat een ander aantal rijen, omdat een andere transactie tussendoor een rij heeft toegevoegd en gecommit
Antwoord en toelichting tonen

Antwoord: A. Een transactie leest een wijziging die een andere transactie nog niet heeft gecommit, en omdat die transactie daarna een rollback uitvoert, gebruikt ze uiteindelijk een waarde die nooit heeft bestaan

Een dirty read is het probleem dat niet-gecommitte (nog niet definitieve) gegevens worden gelezen. Als de transactie die de wijziging heeft gemaakt later een rollback uitvoert, is de gelezen waarde nooit definitief geworden, en elke verwerking die erop is gebaseerd, is fout. Merken dat dezelfde rij bij twee keer lezen een andere waarde heeft, is een non-repeatable read, en merken dat het aantal rijen dat aan een zoekvoorwaarde voldoet is toe- of afgenomen, is een phantom read. Deze problemen ontstaan als de isolatie van transacties onvoldoende is, en in SQL kies je door het isolatieniveau in te stellen hoeveel ervan worden voorkomen. Bij isolatieniveaus vanaf READ COMMITTED treden dirty reads niet op.

Dit onderwerp oefenen Naar de onderwerppagina

Meer vragen over Basis van databases

  1. Transactie T1 voerde SELECT COUNT(*) FROM Bestelling WHERE Bedrag >= 1000 uit en kreeg 8. Direct daarna voegde T2 met INSERT een rij toe voor een bestelling met een bedrag van 2000 en voerde een commit uit. Toen T1 hetzelfde SELECT-statement opnieuw uitvoerde, kreeg het 9. Welk verschijnsel is dit?
  2. Welk antwoord noemt van de isolatieniveaus die de SQL-standaard definieert juist de verschijnselen die bij READ COMMITTED kunnen optreden?
  3. Transactie T1 heeft een gedeelde lock op een rij en leest die. T2 vraagt een gedeelde lock en T3 een exclusieve lock op dezelfde rij aan. Wat is juist voor de periode tot T1 zijn lock vrijgeeft?
  4. Welke beschrijving van tweefasenvergrendeling (two-phase locking, 2PL), die voor het gelijktijdigheidsbeheer van transacties wordt gebruikt, is juist?
  5. Transactie T1 nam een exclusieve lock op rij A en vroeg daarna een lock op rij B aan, terwijl T2 een exclusieve lock op rij B nam en daarna een lock op rij A aanvroeg, zodat geen van beide verder kan. Wat doet een DBMS doorgaans wanneer het deze situatie detecteert?