Проблема с грязным чтением - обновление в базе данных после транзакции, выполняющей грязное чтение

Предположим, у нас есть 2 транзакции, такие как T1, T2, где T2 выполняет грязное чтение данных, измененных T1, и фиксируется до T1. Теперь предположим, что T1 дает сбой и выполняется откат. Мой вопрос: поскольку T2 зафиксирован, изменения, сделанные T2, переносятся из общего буфера в исходную базу данных или нет (поскольку я читал, что изменения, сделанные транзакцией, становятся постоянными в исходной базе данных после фиксации транзакции)? И если они будут перенесены в исходную базу данных, то как T1 откатится и получит предыдущее значение элемента данных (которое было грязно прочитано T2)? По своему буферу или исходной базе данных?


person AMAN GUPTA    schedule 13.02.2019    source источник


Ответы (1)


Если вы специально не вызываете грязное чтение, устанавливая уровень изоляции, то такая проблема просто не может возникнуть. В этом вся суть сделки. T2 будет заблокирован из строки, если T1 обновил ее. Если вы разрешаете грязное чтение, устанавливая set transaction isolation level read uncommitted, тогда обработка данных зависит от вас, обычно с использованием версии строки, которая проверяется вашим T2, не изменилась до ее фиксации.

person TomC    schedule 13.02.2019