Вариант решения к домашнему заданию 6.

Задача 1 (25 очков)

Используем знак ‘<’ для указания предшествования действий, La < Lb ознаяает, что La происходит раньше Lb.

Для краткости обозначим Lx = Log(X) и Wx = Write(X), где X=A, B,C, D.

Первое условие определяет порядок действий в протоколе Log :
<START>; La < Lb < Lc < Ld ; <COMMIT T>

второе, что Wa может быть в двух местах: между La и Lb, или между Lb и Lc, последнее условие - что Wb может быть в двух местах: между Lb и Lc и между Lc и Ld. Ясно, что Wd может стоять только между Ld и COMMIT, и Wc может быть между Lc и Ld или между Ld и COMMIT. В силу протокола-возврата все Ws должны быть раньше COMMIT.

Перечислим все последовательности, помещая их вначале в самое левое возможное место и меняя чаще место для Wc, затем - для Wb, и наконец - для Wa (всего 17 последовательностей):

<START>; La < Wa < Lb < Wb < Lc < Wc < Ld < Wd ; <COMMIT T>

<START>; La < Wa < Lb < Wb < Lc < Ld < Wc < Wd ; <COMMIT T>

<START>; La < Wa < Lb < Wb < Lc < Ld < Wd < Wc ; <COMMIT T>

<START>; La < Wa < Lb < Lc < Wc <Wb < Ld < Wd ; <COMMIT T>

<START>; La < Wa < Lb < Lc < Wb <Wc < Ld < Wd ; <COMMIT T>

<START>; La < Wa < Lb < Lc < Wb < Ld < Wc < Wd ; <COMMIT T>

<START>; La < Wa < Lb < Lc < Wb < Ld < Wd < Wc ; <COMMIT T>

НЕ нашли? Не то? Что вы ищете?

<START>; La < Lb < Wb < Wa < Lc < Wc < Ld < Wd ; <COMMIT T>

<START>; La < Lb < Wb < Wa < Lc < Ld < Wc < Wd ; <COMMIT T>

<START>; La < Lb < Wb < Wa < Lc < Ld < Wd < Wc; <COMMIT T>

<START>; La < Lb < Wa < Wb < Lc < Wc < Ld < Wd ; <COMMIT T>

<START>; La < Lb < Wa < Wb < Lc < Ld < Wc < Wd ; <COMMIT T>

<START>; La < Lb < Wa < Wb < Lc < Ld < Wd < Wc; <COMMIT T>

<START>; La < Lb < Wa < Lc < Wc < Wb < Ld < Wd ; <COMMIT T>

<START>; La < Lb < Wa < Lc < Wb < Wc < Ld < Wd ; <COMMIT T>

<START>; La < Lb < Wa < Lc < Wb < Ld < Wc < Wd ; <COMMIT T>

<START>; La < Lb < Wa < Lc < Wb < Ld < Wd < Wc ; <COMMIT T>

Задача 2 (30 очков)

a). Идем от коца протокола. Первая запись <START U>. Поскольку не было <COMMIT U>, это – незавершенная транзакция, мы должны записать <ABORT U> в протокол и обновить его на диске. Така как для этой транзакции не было изменения значений, для нее больше ничего не нужно. Затем мы встречаем запись <T, A, 10>. Така как не было записи <COMMIT T>, T – незавершенная транзакция. Мы должны изменить значение атрибута A на 10 в БД. Последняя запись для просмотра <START T>. Это незавершенная транзакция. Мы должны записать в протокол <ABORT T> и обновить его на диске.

b). Начинаем с записи <T, E, 50>. Поскольку не было <COMMIT T>, это – незавершенная транзакция. Мы должны изменить значение атрибута Е на 50 в БД. Следующая запись <COMMIT U>. U – завершенная транзакция, никаких действий не требуется. Следующая запись <U, D, 40>. U – завершенная транзакция, никаких действий не требуется. Следующая запись <T, C, 30>. T – незавершенная транзакция. Мы должны изменить значение атрибута С на 30 в БД. Следующая запись <U, B, 20>. U – завершенная транзакция, никаких действий не требуется, то же и для следующей записи <START U>. Следующая запись <T, A, 10>. T – незавершенная транзакция. Мы должны изменить значение атрибута А на 10 в БД. Последняя запись для просмотра <START T>. Это незавершенная транзакция. Мы должны записать в протокол <ABORT T> и обновить его на диске.

c). Первая запись <COMMIT T>. Т – завершенная транзакция, все другие записи для этой транзакции могут быть проигнорированы. Следующая запись <T, E, 50> - игнорируется. Следующая запись - <COMMIT U>. U – завершенная транзакция, все другие записи для этой транзакции могут быть проигнорированы. До начала протокола мы видим только записи для транзакций T и U, которые могут быть проигнорированы. Нет необходимости в изменениях БД.

Задача 3 (25 очков)

Используем те же обозначения, что и в задаче 1.

Первое условие определяет порядок действий в протоколе Log:

<START>; La < Lb < Lc < Ld ; <COMMIT T>

Второе условие требует, чтобы Wa было раньше Wc. Третье условие выполняется из-за первого. Пскольку используется протокол-повтора, все Ws должны быть позже COMMIT.

<START>; La < Lb < Lc < Ld ; <COMMIT T>; < Wa < Wc < Wb < Wd

<START>; La < Lb < Lc < Ld ; <COMMIT T>; < Wa < Wc < Wd < Wb

<START>; La < Lb < Lc < Ld ; <COMMIT T>; < Wa < Wb < Wc < Wd

<START>; La < Lb < Lc < Ld ; <COMMIT T>; < Wa < Wd < Wc < Wb

<START>; La < Lb < Lc < Ld ; <COMMIT T>; < Wa < Wb < Wd < Wc

<START>; La < Lb < Lc < Ld ; <COMMIT T>; < Wa < Wd < Wb < Wb

<START>; La < Lb < Lc < Ld ; <COMMIT T>; < Wb < Wa < Wc < Wd

<START>; La < Lb < Lc < Ld ; <COMMIT T>; < Wd < Wa < Wc < Wb

<START>; La < Lb < Lc < Ld ; <COMMIT T>; < Wb < Wa < Wd < Wc

<START>; La < Lb < Lc < Ld ; <COMMIT T>; < Wd < Wa < Wb < Wc

<START>; La < Lb < Lc < Ld ; <COMMIT T>; < Wb < Wd < Wa < Wc

<START>; La < Lb < Lc < Ld ; <COMMIT T>; < Wd < Wb < Wa < Wc

Задача 4 (20 очков)

a). T1 – завершенная транзакция, мы должны повторить ее, записав новые значения в следующей последовательности A=50(соответствует записи 2), B=130(запись 4) и A=70(запись 5) на диск.

T2 - незавершенная транзакция, мы должны отменить ее, записав старые значения в следующей последовательности D=10(запись 7), C=10 (запись 6) на диск, мы также должны записать <ABORT T2> в протокол и обновить его на диске.

T3 - незавершенная транзакция. Так как нет записей обновления, мы только должны записать <ABORT T3> в протокол и обновить его на диске.

b). Поскольку контрольная точка не завершена, мыдолжны просмотреть протокол перед <START CKPT (T2,T3)>.

T1 – завершенная транзакция, мы должны повторить ее, записав новые значения в следующей последовательности A=50(соответствует записи 2), B=130(запись 4) и A=70(запись 5) на диск.

T2 – завершенная транзакция, мы должны повторить ее, записав новые значения в следующей последовательности C=20(запись 6), D=30(запись 7), D=40(запись 11), C=70 (запись 13) на диск.

T3 - незавершенная транзакция, мы должны отменить ее, записав старое значение E=10(запись 10). Мы также должны записать <ABORT T3> в протокол и обновить его на диске.

c). То же, что в b) плюс

T4 - незавершенная транзакция. Так как нет записей обновления, мы только должны записать <ABORT T4> в протокол и обновить его на диске.

d). Поскольку контрольная точка не завершена, мы должны просмотреть протокол перед <START CKPT (T2,T3)>.

T1 – завершенная транзакция, мы должны повторить ее, записав новые значения в следующей последовательности A=50(соответствует записи 2), B=130(запись 4) и A=70(запись 5) на диск.

T2 – завершенная транзакция, мы должны повторить ее, записав новые значения в следующей последовательности C=20(запись 6), D=30(запись 7), D=40(запись 11), C=70 (запись 13) на диск.

Т3 - завершенная транзакция, мы должны повторить ее, записав новое значение E=60 (запись 10).

T4 - незавершенная транзакция, мы должны отменить ее, записав старые значения в следующей последовательности G=10 (запись 17), F=10 (запись 16). Мы также должны записать <ABORT T4> в протокол и обновить его на диске.

e). Поскольку контрольная точка завершена, и T1 была завершена перед ее началом, мы не должны ничего делать с T1. Мы должны повторить T2 и T3 но не должны просматривать протокол перед <START CKPT (T2,T3)> для T2 поскольку все обновления T2 перед началом контрольной точки были помещены на диск до ее окончания (контр. точки).

T2 завершенная транзакция, мы должны повторить ее, записав новые значения в следующей последовательности D=40(запись 11), C=70 (запись 13) на диск.

Т3 - завершенная транзакция, мы должны повторить ее, записав новое значение E=60 (запись 10).

T4 незавершенная транзакция, мы должны отменить ее, записав старые значения в следующей последовательности F=150 (запись 21), F=100 (запись 19), G=10 (запись 17), F=10 запись 16). Мы также должны записать <ABORT T4> в протокол и обновить его на диске.

f). Поскольку контрольная точка завершена, и T1 была завершена перед ее началом, мы не должны ничего делать с T1. Мы должны повторить T2,Т3 и T4 но не должны просматривать протокол перед <START CKPT (T2,T3)> для T2 поскольку все обновления T2 перед началом контрольной точки были помещены на диск до окончания контр. точки.

T2 - завершенная транзакция, мы должны повторить ее, записав новые значения в следующей последовательности D=40(запись 11), C=70 (запись 13) на диск.

Т3 - завершенная транзакция, мы должны повторить ее, записав новое значение E=60 (запись 10).

T4 - завершенная транзакция, мы должны повторить ее, записав новые значения в следующей последовательности F=100 (запись 16), G=110 (запись 17), F=150 (запись 19), F=140 (запись 21).

Результаты могут быть сведены в таблицу

A B C D E F G

a 10 10

b 10 10

c 10 10

d 10 10

e 10 10

f