13.
16.
19.
22.
23.
24.
25.
-
Такая установка конца контрольной точки будет корректна, если до этого момента будут записаны на диск все изменения, сделанные транзакциями, завершенными до начала контрольной точки. В нашем случае это транзакция Т2. Таким образом, до момента появления в протоколе записи требуется, чтобы на диск были записаны значения элементов a=30, c=3.
Приведем примеры прохождения процесса восстановления.
а) Пусть сбой произошел во время выполнения контрольной точки, например, сразу после появления на диске записи протокола . Сканируем протокол с конца для определения множеств завершенных и незавершенных транзакций и момента начала прямого сканирования. При обратном сканировании сначала встретим запись . Это означает, что изменения завершенных транзакций до контрольной точки, возможно, еще не были зафиксированы. Следовательно, сканировать надо до начала протокола (в общем случае до предыдущей контрольной точки). При таком сканировании определится, что завершенной транзакцией является только транзакция T2, незавершенными транзакциями - Т1, Т3, Т4. Для всех незавершенных транзакций записываем в протокол записи , и .
Проводим прямое сканирование для повтора завершенной транзакции T2.
-
- игнорируем
-
- игнорируем
-
- игнорируем, так как Т4 - незавершенная транзакция
-
<Т2, a, 30> - записываем новое значение элемента a=30.
-
- записываем новое значение элемента с=3
-
- завершение процесса прямого сканирования, так как все завершенные транзакции просмотрены.
б) Пусть сбой произошел после записи протокола . Начинаем обратное сканирование. Первой встретится запись . Это значит, что обратное сканирование можно прекратить по достижении записи протокола , поскольку можно быть уверенными, что все изменения завершенных до этого момента транзакций были зафиксированы на диске. После обратного сканирования получим, что незавершенной транзакцией является Т1, для нее в протокол записывается . Завершенными транзакциями являются транзакции Т3 и Т4. Далее начинаем прямое сканирование, начиная с записи (ее место можно определить, просканировав протокол еще немного назад), для повтора транзакций Т3 и Т4.
-
- игнорируем
-
- повторяем действие, т.е. записываем b=4
-
<Т2, a, 30> - игнорируем как действие завершенной до контрольной точки транзакции
-
- игнорируем
-
- игнорируем
-
- игнорируем
-
- игнорируем как действие незавершенной транзакции
-
- игнорируем
-
- повторяем действие, т.е. записываем c=10.
-
- игнорируем
-
- повторяем действие, т.е. записываем d=1.
-
- завершаем процесс сканирования.
Задача 3.
Сформируем протокол возврата-повтора для данной последовательности действий. Пусть контрольная точка стартует сразу после действия 12, как и в протоколе повтора.
-
-
7.
8. <Т2, a, 3, 30>
11.
12.
13.
16.
19.
22.
23.
24.
25.
-
Такая установка конца контрольной точки будет корректна, если до этого момента будут записаны на диск все изменения, сделанные транзакциями, причем как завершенными, так и незавершенными, до начала контрольной точки. В нашем случае до момента появления в протоколе записи требуется, чтобы изменения, сделанные действиями, которые соответствуют записям протокола , <Т2, a, 3, 30>, были зафиксированы, т.е. произошла запись элементов b=4, a=30, c=3.
Приведем примеры прохождения процесса восстановления.
а) Пусть сбой произошел во время выполнения контрольной точки, например, сразу после появления на диске записи протокола . Сканируем протокол с конца для определения момента начала прямого сканирования, множества завершенных транзакций и отмены незавершенных транзакций.
-
- транзакция Т1 незавершенна, поскольку для нее не было встречена запись , следовательно, отменяем действие, записывая старое значении элемента a=30.
-
- записываем в протокол запись об отмене .
-
- так как эта контрольная точка не была завершена, мы не можем быть уверены, что изменения, соответствующие выполненным до контрольной точки действиям, были зафиксированы на диск. Следовательно, требуется сканировать до начала протокола.
-
- заносим транзакцию Т2 в множество завершенных транзакций для последующего повтора.
-
- игнорируем как действие завершенной транзакции.
-
<Т2, a, 3, 30> - игнорируем по той же причине.
-
- так как Т4 – незавершенная транзакция, отменяем действие, записывая старое значение b=5.
-
- записываем в протокол запись об отмене .
-
- окончание обратного сканирования.
Далее проводим прямое сканирование с целью повтора завершенных транзакций, т.е. транзакции Т2. Укажем только действия транзакции Т2.
-
<Т2, a, 3, 30> - повторяем действие, записывая новое значение a=30.
-
- повторяем действие, записывая новое значение c=3.
-
- окончание процесса прямого сканирования, так как действия всех завершенных транзакций были повторены.
б) Пусть сбой произошел после окончания контрольной точки. Пусть последней записью протокола на диске является . Начинаем обратное сканирования протокола, определяя множество завершенных транзакций и отменяя незавершенный транзакции.
-
- отменяем действие, так как транзакция Т4 является незавершенной, т.е. записываем старое значение d=4.
-
- эта запись гарантирует, что все изменения, сделанные транзакциями до начала контрольной точки были записаны на диск, т.е. прямое сканирование можно начать с записи, следующей за .
-
- фиксируем транзакцию Т3 как завершенную.
-
- игнорируем как действие завершенной транзакции.
-
- игнорируем.
-
- транзакция Т1 незавершенна, следовательно, отменяем действие, записывая старое значении элемента a=30.
-
- записываем в протокол запись об отмене .
-
- так как эта контрольная точка завершена, изменения завершенных до нее транзакций уже на диске, но транзакция Т4 требует отмены, поскольку является незавершенной. Следовательно, обратное сканирование можно прекратить по достижении записи , при этом игнорируя все записи других транзакций.
-
- игнорируем.
-
- игнорируем.
-
<Т2, a, 3, 30> - игнорируем.
-
- так как Т4 – незавершенная транзакция, отменяем действие, записывая старое значение b=5.
-
- записываем в протокол запись об отмене , окончание обратного сканирования.
Далее начинаем процесс прямого сканирования с записи, следующей за , с целью повтора завершенных транзакций, а именно транзакции Т3. Укажем только действия, подлежащие повтору.
-
- записываем новое значение c=10.
-
- окончание процесса прямого сканирования, так как действия всех завершенных транзакций были повторены.