Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Otvety_BD_2013-1.doc
Скачиваний:
139
Добавлен:
28.03.2015
Размер:
954.88 Кб
Скачать

56.Работа транзакций при использовании механизма блокировок. Предотвращение аномалий при использовании блокировок.

57.Понятие протокола. Двухфазный протокол.

Использование в транзакциях блокировок само по себе не гарантирует упорядоченного плана транзакций.

Например

T1

T2

begin tran

begin tran

writeLock X

read X

X=X+100

write X

unlock X

writeLock X

read X

X=X=1.1

write X

unlock X

writeLock Y

read Y

Y=Y*1.1

write Y

unlock Y

commit

writeLock Y

read Y

Y=Y+100

write Y

Commit

То есть план остался таким же неупорядоченным, как и при отсутствии блокировки. /*При последовательном выполнении транзакций значения элементов были бы другими. */

Проблема неупорядоченности осталась, из-за того, что первая транзакция сняла блокировку с элемента, а затем установила блокировку на другой элемент. Это сделано вроде бы для повышения производительности, но результат – некорректная работа плана.

Для обеспечения упорядоченности планов используют протоколы, устанавливающие правила на установку и снятие блокировок. Самый известный из таких протоколов – протокол двухфазной блокировки.

Транзакция следует этому протоколу, если в ней все операции блокирования предшествуют первой операции разблокирования.

Таким образом, транзакция делится на две фазы. 1 Фаза нарастания, в которой выполняются все необходимые блокировки, не освобождая ни одного элемента. 2 Фаза сжатия, в которой освобождаются элементы и не устанавливается ни одна блокировка. Однако, нет никакой потребности в том, чтобы все требуемые блокировки устанавливались одновременно.

Если бы транзакции T1 и T2 в предыдущем примере следовали двухфазному протоколу, то Т1 не снимала бы блокировку с элемента X до тех пор, пока заблокировала элемент Y. А Т2 находилась бы в состоянии ожидания, пока T1 не разблокирует X. Таким образом, устраняется неупорядоченность.

58.Проблема каскадного отката в параллельных транзакциях. Строгий двухфазный протокол.

При параллельном выполнении транзакций может возникнуть следующая проблема.

Транзакция 1 заблокировала некоторые данные и работает с ними, а T2, T3 находятся в состоянии ожидания. Затем Т1 освободила элементы, и они были заняты Т2. Аналогично для Т3. Все транзакции следуют двухфазному протоколу и не устанавливают новых блокировок. Если в момент работы Т3 транзакция Т1 завершилась откатом (rollback), то транзакции Т2 и Т3 также должны быть отменены. Такая ситуация называется каскадным откатом. БД осталась в корректном состоянии, но в результате каскадного отката могут быть потеряны большие массивы введенных данных.

Для устранения проблемы каскадного отката транзакции должны следовать строгому двухфазному протоколу, который гласит:

1 Транзакция не должна записывать данные в БД, до тех пор, пока она не достигла точки завершения. 2 Транзакция не должна снимать блокировки, пока не осуществит запись в БД. Таким образом, запись элементов и снятие с них блокировок должны следовать за операцией commit.

Пример транзакции, следующей этому протоколу.Lock A; read A; A:=A+1; commit; write A; Unlock A.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]