Функционирование БД

Рассматривая процесс функционирования БД, обеспечиваемый, как правило, СУБД, следует сказать о синхронизации работы отдельных блоков, безопасности (целостности и защите) данных, восстановлении данных БД после сбоя.

Синхронизация имеет место как при однопользовательском, так и при многопользовательском режимах. Первоначально поговорим об однопользовательском режиме, обеспечиваемом транзакциями.

Под транзакцией понимается:

• входное сообщение, передаваемое в систему и отражающее некоторое реальное событие в компьютере (БД);

• процесс изменения в БД, вызванный передачей одного входного сообщения.

К транзакции предъявляются следующие основные требования:

• она выполняется полностью или не выполняется совсем;

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

• транзакция должна быть воспроизводима: при воспроизводстве блокировку необходимо осуществлять до момента просмотра всех объектов.

Возможна двухфазная и трехфазная схема транзакции. Последняя более сложная и применяется в ограниченном объеме (например, в системе управления распределенной БД SDD-1). Поговорим о широко применяемой двухфазной схеме транзакции.

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

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

Рис. 4.10. Действие транзакции

Возврат (восстановление) может быть оперативным, промежуточным, длительным. Для двух первых устанавливается предыдущее состояние (точки фиксации), для последнего – контрольные точки. Контрольные точки предназначены для процедуры восстановления БД после серьезного сбоя и устанавливаются периодически (например, с интервалом 2–3 секунды). Интервал определяется при настройке БД или компьютера.

Перейдем к многопользовательскому режиму (рис. 4.11). Здесь задача синхронизации процессов усложняется за счет взаимодействия нескольких пользователей.

Рис. 4.11. Многопользовательский режим

Для любой транзакции ТР возможны две группы действий:

• изменение состояния (запись) – W;

• считывание (чтение) состояния – R.

Для двух взаимодействующих транзакций ТР1 и ТР2 возможны следующие случаи.

1. Одновременное изменение ТР1 и ТР2, при этом возможны наложение данных (потеря обновления) или ошибка в первой транзакции (взаимозависимость восстановления).

2. Изменение R1 и считывание W2 с двумя возможными последствиями:

а) изменение с помощью ТР1 значения, считываемого ТР2 (воспроизводимость считывания);

б) откат перед окончанием работы ТР, (поскольку нет изменений в ТР2) и возврат ТР, в прежнее состояние.

3. Чтение ТР, и изменение ТР1 (нет гарантии воспроизводимости).

Для устранения этих нежелательных явлений возможны такие способы управления:

• блокировка монопольная или согласованная;

• отложенные изменения;

• привязка по меткам времени работы компьютера (временная привязка).

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

Блокировка выполняется только для одной транзакции и одного объекта.

При последовательном (во времени) выполнении транзакций нарушений целостности нет, но такое выполнение требует много времени. В связи с этим используют так называемый параллельный режим (параллелизм). Вводится понятие "правильно оформленная транзакция" [4].

1. Перед обработкой объекта должна быть выполнена его блокировка.

2. После обработки объект должен быть разблокирован.

3. Перед разблокировкой не должна выполняться повторная блокировка.

4. Неблокированный объект не должен освобождаться.

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

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

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

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

б) откат и рестарт, если время ожидания больше установленного порогового значения;

в) рестарты с приоритетом по времени.

При использовании согласованных блокировок возможно:

• предупреждение о блокировке для всей области;

• блокировка части области, связанной с данной транзакцией.

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

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

Ограничения целостности. Выделяют две группы ограничений.

Рис. 4.12. Монопольная блокировка (тупик)

I. В процессе проектирования: 1) при получении достоверных данных из источников; 2) при построении структуры; 3) при заполнении БД данными (в том числе ссылочная целостность).

II. При эксплуатации: 1) машинные сбои; 2) ошибки оператора.

Поскольку ограничения группы II характеризуют больше СУБД, чем БД, они рассмотрены в гл. 5.

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

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

Защита. Управление доступом противодействует несанкционированному доступу в цепочке "субъект – данные – процедуры".

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

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

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