Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
22700_62_OSBD_Lektsii.doc
Скачиваний:
61
Добавлен:
11.02.2015
Размер:
1.11 Mб
Скачать

Тема 6. Проектирование данных. Отношения Лекция №6. Отношения. Нормальные формы

В рамках данной лекции рассматриваются нижеследующие вопросы:

  • Логический уровень представления данных. Реляционная модель данных.

  • Понятие отношения.

  • Схема отношения. Атрибут. Домен. Кортеж.

  • Теоретико-множественные операции: декартово произведение, объединение, пересечение, разность (вычитание) множеств.

  • Операции реляционной алгебры выборка (SELECT), проекция (PROJECT), соединение (JOIN).

  • Соединения: -соединение; эквисоединение; естественное соединение; правое/левое соединение; внешнее соединение.

  • Функциональные зависимости. Нормализация. Нормальные формы.

  • Декомпозиция базы данных.

На логическом уровне представления данных в реляционных СУБД пользователь «видит» данные как двумерные таблицы. Формальную основу модели данных и действий над данными составляет теоретико-множественный подход. Реляционная модель данных предложена Е.Коддом в 1970г. В ней используются понятие «отношение» (relation). ОтношениеRопределяетсяна множествеатрибутовAi,i=1..n, причем каждый атрибут (attribute) aiимеет своюименованнуюобласть значенийdj,j=1..k, называемую «домен» (domain). Экземпляр отношения, в котором конкретно заданы значения атрибутов, называется «кортеж» (tuple).

Теоретико-множественный подход позволяет строить язык описания данных и манипулирования данными на основе операций над множествами (UNION,INTERSECT,EXCEPT) и операций реляционной алгебры (SELECT,PROJECT,JOIN).

«Теоретико-множественное» определениесхемы отношения

dа

dв

dс

dе

Отношение R

Атрибут А

Атрибут В

Атрибут С

Атрибут Е

Определение в СУБД:

Таблица «Студент»

Столбец/поле

Студ_ИД

Столбец/поле

Студ_ФИО

Столбец/поле

Студ_форма_обуч

Столбец/поле

Студ_рейтинг

«Теоретико-множественная» конкретизация схемы

dа

dв

dс

dе

Кортеж в R

а1

в1

с1

е1

Конкретизация на уровне таблиц в СУБД

Строка таблицы «Студент»

Студ_ИД

123456

Студ_ФИО

Плахов

Студ_форма_обуч

бюджет

Студ_рейтинг

38

Операциями реляционной алгебры являются: выборка(SELECT),проекция(PROJECT),соединение(JOIN). Разновидностями соединения являются:θ-соединение(тэта-соединение),эквисоединение,естественное соединение, правое/левое соединение, внешнее соединение.

Выборка(SELECT). Выборка кортежей отношения, т.е. множества кортежей, являющегося подмножеством исходного отношения.

Синтаксис: RисхWHEREC, гдеRисх- исходное отношение, С - некоторое условие выборки «по горизонтали». Результатом выборки является отношениеRрез, атрибуты которого совпадают с атрибутами исходного отношения, а кортежамиRрезявляются кортежиRисх, подстановка атрибутов которых в заданное условие даетистинноезначение.

Проекция (PROJECT). Выборка «по вертикали» атрибутов отношения. Синтаксис:Rисхover[W, X, Y, Z], гдеRисх- исходное отношение, над которым выполняется операция проекции. В квадратных скобках показан список атрибутов, на которых определенорезультирующееотношениеRрез. Перечень атрибутов отношенияRрезпредставляет собойподмножествоатрибутов, на которых определеноRисх, а кортежиRрезсоответствуют кортежам (w, x, y, z) исходного отношения,исключаякортежи-дубликаты.

Соединение (JOIN). В нем участвуют два отношения, например,R1(A,B,C) иR2(D,E), и условие соединения. WHERE Сondition. ОтношениеRрезопределено на множестве атрибутов обоих отношений, в данном случаеA,B,C,D,E. Кортежи вRрезвыбираются в соответствии с условием Сondition, которое задается логическим выражением.

θ-соединение (тэта-соединение). Частный случай общего соединения. Если в отношении R1имеется атрибут X, в отношенииR2атрибут Y, а условие c имеет вид X θ Y, где θ - один из операторов отношения (=, <>, >, >=, <, <= ), то результирующая операция называется тэта-соединением.

Эквисоединение. Частный случай тэта-соединения. Эквисоединение - это тэта-соединение, в котором оператором отношения является равенство. Эквисоединение рассматривается как особая разновидность соединения, поскольку на практике применяется особенно часто. Обозначается эквисоединение так:R1[X=Y]R2.

Выражение WHERE <атрибут 1> = <атрибут 2> соответствует внутреннему(INNER) эквисоединению.

Нормализация данных

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

Процесс нормализации сводится к последовательному приведению структуры данных к нормальным формам - формализованным требованиям к организации данных. Известны шесть нормальных форм:

  • первая нормальная форма (1NF);

  • вторая нормальная форма (2NF);

  • третья нормальная форма (3NF);

  • нормальная форма Бойса - Кодда (усиленная 3NF);

  • четвертая нормальная форма (4NF);

  • пятая нормальная форма (5NF).

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

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

Функциональная зависимостьатрибутов означает, что по значениюодного атрибута(детерминанта) можно однозначно определить значениедругого атрибута(зависимой части). Но базы данных отличаются от математических зависимостей вида y=f(x) тем, что значение «y» зависимой может быть различным в различных состояниях БД.

Атрибуты отношения (таблицы) могут быть разбиты на три группы:

  • используемые строго для идентификации;

  • используемые строго для информационных целей;

  • используемые и для идентификации, и для информационных целей.

Отношение Книга:

ISBN

Название

ИздатID

ИздатНазв

1-1111-1111-1

C++

1

Бином

0-91-335678-7

Java

1

Бином

1-011-22222-0

C++

2

Высшая школа

Атрибут Название не является избыточным, зависит полностью от ключа,ИздатНазвизбыточный атрибут.

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

Пример нарушения 1NF:

ISBN

Название

Автор

0-55-123456-9

12 стульев

Ильф, Петров

Функциональные зависимости и потенциальные ключи в отношении

Издательство {ИздатID,ИздатНазв,ИздатТелефон,ИздатГодОснования}:

ИздатID --> ИздатНазв (ключ)

{ИздатНазв,ИздатТелефон} --> {ИздатID} (ключ)

Суперключ- набор атрибутов, который уникально определяет кортеж отношения (строку таблицы). Другими словами: суперключ - набор атрибутов, от которых все другие атрибуты отношения (таблицы)функционально зависят.

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

Отношение Книга:

{Название,ИздатID,АвторID,Цена,АвторАдрес}

{Название, ИздатID, АвторID} – ключ, но {АвторID} --> АвторАдрес (нарушение 2NF)

Третья нормальная форма: неключевые атрибуты не зависят от других неключевых атрибутов, а зависят только от первичного ключа.

ОтношениеЗаказ

{ЗаказID, ТоварID, Количество единиц, Цена за единицу, Сумма за товар} - Сумма за товар - нарушение 3NF.

ОтношениеКнига {Название,ИздатID,КолСтр,Цена} – соответствует3NF.

{Название,ИздатID} –потенциальный ключ.

Нет зависимостей:

{Название} --> {КолСтр}

{Название} --> {Цена}

{ИздатID} --> {КолСтр}

{ИздатID} --> {Цена}

Но может быть: { ИздатID,КолСтр} --> {Цена}. Например:

Название

ИздатID

КолСтр

Цена

С++

1

600

750

Java

2

600

900

С++

2

600

900

4NF Бойса-Кодда (Boyce-Codd ), или BCNF усиливает 3NF и не разрешаетзависимость атрибута от чего–либо, кромесуперключа.

Преимуществами нормализацииявляются:

  • более быстрая сортировка и создание индексов;

  • большее количество кластеризованных индексов;

  • более узкиеи компактные индексы;

  • меньшее количество индексов в таблице (повышает производительность INSERT, UPDATE и DELETE);

  • меньшее количество NULL-значений и меньшая вероятность несогласованности.

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

Основная литература

Учебник / Учебное пособие

Раздел

Страницы

1. Карпова Т.С. Базы данных: модели, разработка, реализация. - СПб.: Питер, 2001.- 304 с.; ил.

Главы 3,4

31-65

2. Хомоненко А.Д, Цыганков В.М., Мальцев М.Г. Базы данных: Учебник для высших учебных заведений / под ред. проф. Хомоненко А.Д., 6-ое изд. – М.:Бином-Пресс; СПб.:Корона-Век, 2007.-736с.

Гл.2, 3

29- 34, 49-107

Дополнительная литература

Учебник / Учебное пособие

Раздел

Страницы

1. Коннолли Т., Бегг К., Страчан А. Базы данных: проектирование, реализация и сопровождение. Теория и практика, 2-е изд.: Пер. с англ. - М.: Издательский дом “Вильямс”,. 2001. – 1120 с.: ил.

3.2 - 3.4,

108-136

2. Дейт К. Дж. Введение в системы баз данных, 6-е издание: Пер. с англ. – К.;М.; СПб.: Издательский дом “Вильямс”,. 1999. – 848 с.: ил. (7-е и 8-е издание).

4.2 - 4.6

84-100

Раздел 2. Основы разработки, реализации и организации функционирования ОС и СУБД

Тема 1. Синхронизация процессов и доступа к ресурсам. Транзакции в ОС и СУБД

Лекция №1. Синхронизация процессов и доступа к ресурсам

В рамках данной лекции рассматриваются нижеследующие вопросы:

  • Конкуренция процессов за ресурсы.

  • Механизмы синхронизации. Семафоры. Мьютексы.

  • Взаимное исключение. Критические секции. Блокировки. Взаимоблокировки. Запрет прерываний.

  • Тупики

  • Понятие транзакции

  • Атомарность, согласованность, изолированность, долговечность транзакции.

  • Последовательное и параллельное исполнение транзакций.

  • Сериализуемость транзакций.

  • Синхронизация доступа к разделяемым данным.

  • Блокировки. Блокировки Exclusive (X), Shared (S);

  • Изолирование транзакций. Проблемы «потери обновления», «грязного чтения», «неповторяемого чтение», «фантомы»;

  • Журнализация.

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

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

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

Пусть есть 2 процесса Р1, Р2 , которые используют общий «ресурс» х. Пусть Р1 умножает содержимое х на 100, Р2 делит содержимое х на 2. Обобщенно каждый процесс должен выполнить считывание (R) значения х в свою локальную переменную (в своем адресном пространстве), произвести действие и записать (W) новое значение из локальной переменной в х. Как это может выполняться при параллельном исполнении процессов. Предположим, начальным содержимым х является 10.

Вариант 1

х=10

10

10

10

10

1000

5

P1

R

*100

1000

W

P2

R

/2

5

W

Вариант 2

х=10

10

10

10

5

5

1000

P1

R

10

10

10

*100

W

P2

R

/2

W

Вариант 3

х=10

10

10

1000

1000

1000

500

Р1

R

*100

W

R

/

W

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

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

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

Пусть имеются наборы входных и выходных переменных программы. Для каждой атомарной операции наборы входных и выходных переменных - это наборы переменных, которые атомарная операция считывает и записывает. Пусть набор входных переменных программы R(P) представляет объединение наборов входных переменных для всех ее неделимых действий, а набор выходных переменных программы W(P) представляет объединение наборов выходных переменных.

Условия Бернстайна задаются следующим образом:

Если для двух активностей Z и Q:

  • пересечение W(Z) и W(Q) пусто,

  • пересечение W(Z) с R(Q) пусто,

  • пересечение R(Z) и W(Q) пусто,

тогда выполнение Z и Q является детерминированным.

Если эти условия не соблюдены, возможно, что параллельное исполнение Z и Q детерминировано, но возможно, что и нет.

Условия Бернстайна являются жесткими: они требуют практически невзаимодействующих процессов.

Необходим способ и средство взаимного исключения (mutual exclusion), то есть, обеспечивающие правило, при котором если общие данные или файл используются одним процессом, возможность их использования всеми другими процессами исключается. В рамках ОС определен специальный синхронизирующий объект мьютекс(mutex) для организации межпроцессного взаимодействия.

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

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

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

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

Механизмом синхронизации более высокого уровня является семафор. Семафор представляет собой целую переменную, принимающую неотрицательные значения, доступ любого процесса к которой, за исключением момента ее инициализации, может осуществляться только через две атомарные операции: P (от датского слова proberen - проверять) и V (от verhogen - увеличивать). Классическое определение этих операций выглядит следующим образом:

P(S):

пока S == 0 процесс блокируется; S = S – 1;

V(S):

S = S + 1;

Операционная система обеспечивает атомарность операций P и V, используя, например, метод запрета прерываний на время выполнения соответствующих системных вызовов. Если при выполнении операции P заблокированными оказались несколько процессов, то порядок их разблокирования может быть произвольным, например, FIFO.

Еще более высокий уровень представляют предложенные Хоаром (Hoare) в 1974 году мониторы. Монитор напоминает объект ООП: он обладает своими собственными переменными, определяющими его состояние. Значения этих переменных извне монитора могут быть изменены только с помощью вызова функций-методов, принадлежащих монитору. В свою очередь, эти функции-методы могут использовать в своей работе только данные, находящиеся внутри монитора и свои параметры. Особенностью мониторов является то, что в любой момент времени только один процесс может быть активен, т.е. находиться в состоянии готовность или исполнение, внутри данного монитора

В общем случае последовательностью действий для использования ресурса является:

  • запросить (request) ресурс,

  • использовать (use) ресурс,

  • освободить (release) ресурс.

Если запросы и освобождения ресурса осуществляются некорректно, то возникают ситуации, называемые «тупиками». Эти ситуации означают «зависание программы».

Определение

Множество процессов находится в тупиковой ситуации, если каждый процесс из множества ожидает события, которое может вызвать только другой процесс данного множества. Поскольку все процессы ожидают, то ни один из них не сможет инициировать событие, которое разбудило (wake up) бы другой из множества и, следовательно, все процессы будут спать (sleep). Обычно событие, которого ждет процесс в тупиковой ситуации - освобождение ресурса

В 1971 г. Коффман, Элфик и Шошани сформулировали следующие четыре условия для возникновения тупиков.

1. Условие взаимоисключения (Mutual exclusion). Каждый ресурс выделен в точности одному процессу или доступен. Процессы требуют предоставления им монопольного управления ресурсами, которые им выделяются.

2. Условие ожидания ресурсов (Hold and wait). Процессы удерживают за собой ресурсы, уже выделенные им, ожидая в то же время выделения дополнительных ресурсов (которые при этом обычно удерживаются другими процессами).

3. Условие неперераспределяемости (No preemtion). Ресурс, выделенный ранее, не может быть принудительно забран у процесса. Освобождаться он может только процессом, который его удерживает.

 4. Условие кругового ожидания (Circular wait). Существует кольцевая цепь процессов, в которой каждый процесс удерживает за собой один или более ресурсов, требующихся другим процессам в цепи.

Восстановление после тупиков

1. Восстановление при помощи перераспределения ресурсов

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

2. Восстановление через откат назад

Рестарт с контрольной точки (сохранения состояния системы).

Транзакции

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

Транзакция исполняется «как целое» и при успешном завершении изменения «фиксируются» в БД.

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

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

Введение механизма транзакций потребовало для его реализации наличия в СУБД журнала транзакций и расширения языка баз данных для работы с транзакциями

ACID-свойства транзакций

Требования к свойствам транзакций описываются в терминах «атомарность, согласованность, изолированность, долговечность», или АСИД, что означает «atomicity, consistency, isolation, durability», или ACID.

Атомарностьозначает, что транзакция должна быть выполнена как целое или не выполнена вовсе («все или ничего»).

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

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

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

Последовательное исполнение транзакций означает исполнение транзакций одна за другой.

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

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

Управлением параллелизмом

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

Имеются два способа осуществления управления параллелизмом.

Пессимистическое управление параллелизмом

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

Оптимистическое управление параллелизмом

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

Блокировки

Блокировкой является ограничение доступа к ресурсу в многопользовательской среде Обобщенно:

• транзакция, действием которой на строку данных в таблице является чтение, обязана наложитьблокировку чтенияна эту строку;

• транзакция, предназначенная для модификациистроки данных, накладывает на нееблокировку записи;

• если запрашиваемая блокировка на строку отвергается из-за уже имеющейся блокировки, то транзакция переводится в режим ожиданиядо тех пор, пока блокировка не будет снята;

блокировка записисохраняется до конца выполнения транзакции.

Проблемы доступа при параллельном исполнении транзакций

Если транзакции исполняются параллельно и осуществляют доступ к совместно используемым объектам базы данных, то при невысоком уровне изолирования транзакций могут возникать следующие ситуации:

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

• проблема "грязного" чтения возможнапри чтении незафиксированных данныхв том случае, если пользователь выполняет совокупность операций обработки данных, требующих неоднократного изменения данных для получения окончательного значения. Если в ходе этих изменений другой пользователь выполнит считывание данных, то может оказаться, что он считал еще не являющиеся окончательными, т.е. неверные значения;

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

• проблема фантомоввозникает, еслипервая транзакция считывает данные из таблицы, а другая транзакция вставляет или удаляет строки в диапазоне, считанном до этого первой транзакцией, до завершения и фиксации первой транзакции.

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

• уровень 0 – запрещение "загрязнения" данных. Этот уровень требует, чтобы изменять данные могла только одна транзакция. Если другой транзакции необходимо изменить те же данные, она должна ожидать завершения первой транзакции;

• уровень 1 – запрещение "грязного" чтения. Если транзакция начала изменение данных, то никакая другая транзакция не сможет прочитать их до завершения первой;

• уровень 2 – запрещение неповторяемого чтения. Если транзакциясчитывает данные, то никакая другая транзакцияне сможетих изменить. Таким образом, при повторном чтении данные будут находиться в первоначальном состоянии;

• уровень 3 – запрещение фантомов. Если транзакция обращается к данным, то никакая другая транзакция не сможетдобавитьновые илиудалить имеющиеся строки, которые могут быть считаны при выполнении транзакции. Реализация этого уровня блокирования выполняется путем использования блокировок диапазона ключей. Подобная блокировка накладывается на строки, удовлетворяющие определенному логическому условию.

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

Разделяемые блокировки(Sharedlock,S). Их называют также блокировками без монополизации. Они накладываются при выполнении операций чтения данных (например, SELECT). Если сервер установил на ресурс разделяемую блокировку, то изменять эти данные нельзя, а читать можно.

Блокировка обновления(Update,U). Используется для ресурсов, который могут быть обновлены. Препятствует «взаимоблокировке» при множественных чтениях, блокировании и возможно обновлении ресурсов далее. Если на ресурс установлена разделяемая блокировка и для этого ресурса устанавливается блокировка обновления, то никакая транзакция не сможет наложить разделяемую блокировку или блокировку обновления.

Монопольная блокировка (Exclusive, X). Этот тип блокировок используется для операций модификации данных INSERT, UPDATE, DELETE. Когда сервер устанавливает монопольную блокировку на ресурс, то никакая другая транзакция не может прочитать или изменить заблокированные данные в данный момент. Монопольнаяблокировка не совместима ни с какими другими блокировками, и ни одна блокировка, включая монопольную, не может быть наложена на ресурс.

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

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

Взаимоблокировкавозникает, например, в случае если:

  1. Транзакция А создает разделяемую блокировку строки 1.

  2. Транзакция B создает разделяемую блокировку строки 2.

  3. Транзакция А запрашивает монопольную блокировку строки 2 и блокируется до того, как транзакция B завершится и освободит разделяемую блокировку строки 2.

  4. Транзакция B запрашивает монопольную блокировку строки 1 и блокируется до того, как транзакция A завершится и освободит разделяемую блокировку строки 1.

  5. Транзакция А не может завершиться пока не завершится транзакция B, а транзакция B заблокирована транзакцией А. Такое условие также называется круговой зависимостью: транзакция А зависит от транзакции B, а транзакция B зависит от транзакции А. Транзакции находятся в состоянии бесконечного ожидания.

Существует два других типа блокировок: блокировка диапазона ключей и блокировка схемы (метаданных, описывающих структуру объекта).

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

Основная литература

Учебник / Учебное пособие

Раздел

Страницы

1. Таненбаум Э. Современные операционные системы. 3-е изд. - СПб.: Питер, 2010. - 1120 е.: ил.

2.3.8, 6.7.2

176-180, 534-536

2. Карпова Т.С. Базы данных: модели, разработка, реализация. - СПб.: Питер, 2001.- 304 с.; ил.

Глава 11

216-247

Дополнительная литература

Учебник / Учебное пособие

Раздел

Страницы

1. Дейт К. Дж. Введение в системы баз данных, 6-е издание: Пер. с англ. – К.;М.; СПб.: Издательский дом “Вильямс”,. 1999. – 848 с.: ил. (7-е и 8-е издание).

13.2 – 13.7, 14.2 – 14.9

376-384, 393-409

2. Коннолли Т., Бегг К., Страчан А. Базы данных: проектирование, реализация и сопровождение. Теория и практика, 2-е изд.: Пер. с англ. - М.: Издательский дом “Вильямс”,. 2001. – 1120 с.: ил.

17.1 – 17.4

595-636

Соседние файлы в предмете Операционные системы