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

4 Свойства транзакций:

Атомарность. Транзакции атомарны (выполняется все или ничего).

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

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

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

Восстановление

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

Существует два вида глобальных нарушений.

  • Отказы системы (поражают все выполняющиеся в данный момент транзакции, но физически не нарушают базу данных в целом) – аварийным отказом программного обеспечения.

  • Отказы носителей (поломка головок дискового накопителя) – аварийный отказ аппаратуры.

Следствие содержимого ОЗУ. Поскольку точное состояние выполняющейся транзакции неизвестно, то транзакция может не завершиться успешно и будет отменена при перезагрузке. Может потребоваться повторное выполнение транзакции, если нет физических обновлений этой транзакции.

В некотором предписанном интервале (когда в журнале накапливается определенное число записей) система автоматически принимает контрольную точку. Принятие контрольной точки включает физическую запись содержимого рабочих буферов базы данных непосредственно в базу данных и специальную физическую запись контрольной точки (список всех осуществляемых в данный момент транзакций).

Очевидно, что до перезагрузки системы Т3 и Т5 должны быть отменены. А Т2 и Т4 выполнены повторно. Т1 не включается в момент перезагрузки, т.к была выполнена до tc. Так же не включаются транзакции неудачные и отменённые перед tf. Во время перезагрузки система идентифицирует все транзакции от Т2 до Т5.

Шаги восстановления:

  • Создается два списка транзакций: UNDO и REDO. В список UNDO заносятся все транзакции, предоставленные из записи контрольной точки, т.е. все транзакции, выполняющиеся в момент времени tc. Список REDO остается пустым;

  • Осуществляется поиск в файле регистрации (журнале), начиная с записи контрольной точки;

  • Если в файле регистрации обнаружена запись BEGIN TRANSACTION о начале транзакции, то эта транзакция также добавляется в список UNDO;

  • Если в файле регистрации обнаружена запись COMMIT об окончании транзакции, то эта транзакция добавляется в список REDO;

  • Когда достигается конец файла регистрации, списки UNDO и REDO анализируются для идентификации транзакций типа Т2 и Т4, появившихся в списке REDO, и транзакций типа ТЗ и Т5, оставшихся в списке UNDO;

  • Транзакции в REDO удаляются из списка UNDO.

  • После этого система просматривает назад файл регистрации, отменяя транзакции из UNDO, а затем просматривает снова вперед, повторно выполняя транзакции из REDO.

Обратное восстановление – восстановление базы данных в правильное состояние путем отмены выполненных операций.

Прямое восстановление – восстановление ее в правильное состояние повторным выполнением.

Параллелизм.

Параллелизм означает возможность одновременной обработки СУБД нескольких транзакций с доступом к одним и тем же данным в один и тот же момент времени.

В этом случае при обработке правильно составленных транзакций может возникнуть ситуации, которые могут привести к неправильным результатам из-за взаимных помех.

Основные проблемы при параллельной обработке транзакции:

Проблема результатов обновления транзакции

Транзакция A извлекает некий кортеж P в момент времени t1. Транзакция B извлекает некий кортеж P в момент времени t2.

Транзакция A обновляет некий кортеж P (на основе значений полученных в момент времени t1) в момент времени t3. Транзакция B обновляет тот же кортеж P (на основе значений полученных в момент времени t2) в момент времени t4.

Результат операции обновления A будет утерян, поскольку в момент времени t4, она не будет учтена, и потому будет отменена операцией обновления выполнения транзакции B.

Проблема незафиксированной зависимости

Эта проблема появляется, если с транзакцией B осуществляется извлечение (a) или что еще хуже обновление (b) некоторого кортежа, который в данный момент обрабатывает A, но это обновление еще не закончено.

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

Рис. a. Транзакция B в t2 встречается с невыполненным обновлением кортежа P, предположим, что это обновление меняется в момент времени t3. В результате B выполняется на основании фальшивого предположения, что кортеж P имеет значение в t2, хотя на самом деле значение в t1. В итоге выполнения транзакции B был получен неверный результат.

Рис. b. Транзакция B выполняет невыполнимое изменение, и результат обновления утрачивается в момент времени t3, поскольку результат отмены A в t3 приводит восстановление P к исходному значению в момент t1.

Проблема несовместимого анализа

Транзакции A и B выполняются для кортежей N1, N2, N3. Транзакция A вычисляет итоговый баланс, транзакция B производит перевод суммы, равной 10, со счета N3 на счет N1.

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

Блокировка.

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

Основная идея блокировки: Случай, когда для выполнения некоторой транзакции необходимо чтобы некоторый объект (обычно это кортеж БД) не изменялся непредсказуемо и без ведомо этой транзакции, такой объект блокируется.

Алгоритм блокировки:

  1. Предположим, что в системе поддерживается два типа блокировок

  2. Блокировка без взаимного доступа (монопольная или X - блокировка)

  3. Блокировка с взаимным доступом (S - блокировка)

  4. Если транзакция A блокирует кортеж P X – блокировкой, то запрос другой транзакции B с блокировкой кортежа будет отменен.

  5. Если транзакция A блокирует кортеж P S – блокировкой, то:

  6. Запрос транзакции B на X – блокировку будет отвергнут

  7. Запрос транзакции B на S – блокировку будет принят

Протокол доступа к данным.

Введем протокол доступа к данным, который позволит избежать указанных ранее проблем параллелизма.

Транзакция, предназначенная для извлечения кортежа, прежде всего, должна наложить S – блокировку на этот кортеж.

Транзакция, предназначенная для обновления кортежа должна наложить X – блокировку на этот кортеж.

При этом если для этого кортежа задана S – блокировка, ее необходимо заменить X – блокировкой.

Если запрашиваемая блокировка, со стороны транзакции B, отвергается из-за конфликта с другой блокировкой со стороны A, то транзакция B переходит в состояние ожидания, и будет находиться в нем пока не будет снята блокировка со стороны A.

В системе должны быть предусмотрены способы бесконечно долгого ожидания.

Все блокировки сохраняются вплоть до конца выполнения транзакции (COMMIT, ROUBACK)

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