Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Теория СУБД Часть 1 Копачев Алексей Геннадьевич, БГУИР (Мет пособие).pdf
Скачиваний:
63
Добавлен:
15.06.2014
Размер:
583 Кб
Скачать
☆

14

- снятие блокировкики

В

 

 

 

А

 

В

 

 

 

 

 

1-я

2-я

 

A

фаза

фаза

В

В

А

1-я фаза характеризуется блокировкой объектов и их обработкой. Вторая фаза– снятие блокировок, но возможна обработка.

Реализация изолированности транзакций средствами языка SQL

Язык SQL не предусматривает изоляции транзакций. Существуют 4-е уровня изоляций:

READ UNCOMMITED

(незавершённое считывание)

READ COMMITED

(завершённое считывание)

REPEATABLE READ

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

SERI AUZABLE

(способность к упорядочиванию)

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

В SQL выделяется 3 проблемы:

1)неаккуратное считывание

2)неповторное считывание

3)фантомы

Потери результатов обновления в SQL нет.

Транзакции и восстановление данных

Единственный способ достигнуть приемлемой скорости работы – буферизация данных. Буферизация – данные попадают на внешнюю память не сразу, а через некоторое время. Данные должны хранятся с избыточностью – чтобы их восстановить. Избыточность для нас реализует механизм журнал транзакций. Он содержит детали всех операций модификации данных в базе.

Виды восстановления данных

Выделяют 3 основных случая, когда необходимо восстановление БД: 1) Индивидуальный откат транзакций

15

2)Мягкий сбой системы (аварийный откат ПО) – утрата содержимого оперативной памяти системы

3)Жесткий сбой (отказ аппаратуры)

Различают буфер данных и буфер журнала транзакций. Страница, содержание которой в буфере отличается от содержимого на диске, называется “грязной”. Pushing – процесс выталкивания грязных страниц в ОП. Он должен соответствовать 2-м требованиям:

1)Обеспечивать максимальную скорость выполнения транзакций

2)Гарантия того, что в случае возникновения сбоя, данные завершенных транзакций можно было восстановить, а данные незавершенных транзакций – бесследно удалить из системы.

Основным принципом выталкивания страниц во внешнюю память является то, что запись об изменении БД должна сначала попасть во внешнюю память журнала, а потом – соответственно в БД.

Существует протокол журнализации: Write – запись

Aheat – сначала

Log - лог

3-е условие выталкивания страниц – ограниченность самих буферов, в которых они находятся. Обычно при наступлении события, такого как количество грязных страниц превысило порог, свободных – меньше допустимого, система принимает контрольную точку. Ее принятие означает выталкивание во внешнюю память буферов БД и запись контрольной точки, которая представляет собой список всех выполняемых в данный момент транзакций.

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

Индивидуальный откат транзакций

Все записи в журнале связываются в обратный список. Началом списка является либо последняя запись об изменении ( для незавершившихся ), либо запись с завершением (для завершившихся). Индивидуальный откат выполняется следующим образом:

1.Просматриваются все записи в журнале, от последнего к первому изменению.

2.Выбирается запись из журнала, и выполняется операция, обратная той, которая записана в журнале.

3.Все эти обратные операции тоже журнализируются.

4.В случае успешного отката – фиксируется успешное выполнение транзакции.

Восстановление после мягкого сбоя

16

Не все грязные страницы выталкиваются во внешнюю память. Выделяют 5 вариантов состояния транзакций по отношению к последней контрольной точке и моменту сбоя.

Tc – время контрольной точки Tf – время сбоя

Транзакция Т1 началась и закончилась до контрольной точки. Все вытолкнуто во внешнюю память. Для Т1 восстановление не требуется. Транзакция Т2 началась до контрольной точки, успешно завершена после контрольной точки, но до наступления сбоя. Страницы данных только частично вытолкнуты во внешнюю память. Необходимо повторить все операции после контрольной точки. Транзакция Т3 началась да контрольной точки, и не завершена до сбоя. Ее необходимо откатить. Транзакция Т4 началась после контрольной точки и завершена до сбоя. Все данные об изменении в БД отсутствуют, данные были сохранены в журнале. Эту транзакцию необходимо повторить. Транзакция Т5 началась после контрольной точки и не завершена до сбоя, следовательно ее нет нигде, с ней не надо ничего делать.

При перегрузке система выполнит следующие действия:

1.Создается 2-ва списка – undo и redo. В список undo заносятся все

транзакции, выполнявшиеся во время записи контрольных точек UNDO = {T2,T3}

2.Начиная с контрольной точки, просматриваем журнал транзакций вперед. Если в журнале обнаруживается запись о начале транзакций, она попадает в список UNDO.

UNDO = {T2,T3,T4} REDO = {}

3.Если в журнале обнаруживается запись COMMIT, то эти транзакции попадают в список REDO:

REDO = {T2,T4}

4.Эти два списка Xor-ся, из списка UNDO удаляются все транзакции, которые отсутствуют в REDO:

UNDO = {T3} REDO = {T2,T4}