Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ответы на СУБД.docx
Скачиваний:
6
Добавлен:
30.08.2019
Размер:
146.57 Кб
Скачать

12. Проблема незафиксированной зависимости (чтение "грязных" данных)

Транзакция B изменяет данные в строке. После этого транзакция A считывает измененные данные и работает с ними. Транзакция B откатывается и восстанавливает старые данные.

Время

Транзакция A

Транзакция B

---

Чтение

---

Запись

Чтение

---

Работа с прочитанными данными

---

---

Rollback tran

COMMIT

---

 

Работа с "грязными" данными

 

Результат. Транзакция A в своей работе использовала данные, которых фактически не было в БД. Так как после отката транзакции B, восстановит данные, как если бы она вообще никогда не выполнялась. Таким образом, результаты работы транзакции A некорректны, т.к. она работала с данными, отсутствовавшими в БД.

13. 3.1. Неповторяемое считывание

Транзакция A дважды читает одну и ту же строку. Между этими чтениями вклинивается транзакция B, которая изменяет значения в строке.

Время

Транзакция A

Транзакция B

Чтение

---

---

Чтение

---

Запись

---

COMMIT

Повторное чтение

---

COMMIT

---

 

Неповторяемое считывание

 

Результат. Транзакция A не знает о существовании транзакции B, и, т.к. сама не меняет значение в строке, то ожидает, что после повторного чтения значение будет тем же самым. Транзакция A работает с данными, которые, с точки зрения транзакции A, самопроизвольно изменяются.

14. Фиктивные элементы (фантомы)

Транзакция A дважды выполняет выборку строк с одним и тем же условием. Между выборками вклинивается транзакция B, которая добавляет новую строку, удовлетворяющую условию отбора.

Время

Транзакция A

Транзакция B

S-блокировка строк, удовлетворяющих условию . (Заблокировано n строк)

---

Выборка строк, удовлетворяющих условию . (Отобрано n строк)

---

---

Вставка новой строки, удовлетворяющей условию .

---

COMMIT

S-блокировка строк, удовлетворяющих условию . (Заблокировано n+1 строка)

---

Выборка строк, удовлетворяющих условию . (Отобрано n+1 строк)

---

COMMIT

---

 

Появились строки, которых раньше не было

 

Результат. Блокировка на уровне строк не решила проблему появления фиктивных элементов.