В начало
Лекция Транзакции. Понятие
целостности базы данных. Условия
целостности. Обработка транзакций. Свойства
транзакций. Модель ANSI/ISO. Назначение и
использование журнала транзакций. Откат и
восстановление Применение СУБД для работы с интегрированными БД выявило особую важность
проблемы целостности БД. Под целостностью БД понимают
правильность и непротиворечивость ее содержимого. Нарушение целостности может
быть вызвано, например, ошибками и сбоями, так как в этом случае система не в
состоянии обеспечить нормальную обработку или выдачу правильных данных. Выделяют два аспекта целостности – на уровне отдельных объектов и
операций и на уровне базы данных в целом (слайд 2). В первом случае целостность обеспечивается на уровне структур данных и отдельных
операторов языковых средств СУБД (вспомним ограничения целостности для столбцов
и таблиц в языке SQL). При нарушениях такой целостности (например, ввод значения
больше 11 в столбец Семестр таблицы «Учебный_план» БД «Сессия») соответствующий
оператор отвергается. Некоторые ограничения целостности не нужно выражать в явном
виде, поскольку они встроены в структуры данных. Например, в СУБД,
поддерживающей структуры, составленные из записей, каждый экземпляр записи в БД
должен отображать спецификацию типа записи. Это означает, что все поля,
специфицированные в описании типа, должны быть представлены в каждом экземпляре
записи, а значение, заносимое в отдельное поле, должно иметь соответствующий
описанию тип данных. Часто же база данных может иметь такие ограничения целостности, которые
требуют обязательного выполнения не одной, а нескольких операций. Для иллюстрации
примеров этой главы расширим функциональные возможности учебной БД «Сессия»,
добавив в таблицу «Кадровый_состав» столбец Нагрузка для решения
дополнительной задачи – расчета общей годовой нагрузки преподавателей (в часах
учебной работы). Тогда любая операция по внесению изменений или по добавлению
данных в столбец ID_Преподаватель таблицы «Учебный_план» должна сопровождаться
соответствующими изменениями данных в столбце Нагрузка. Если после
внесения изменений в столбец ID_Преподаватель произойдет сбой, то БД окажется в
нецелостном состоянии. Для обеспечения целостности в случае ограничений на базу данных, а не на
какие-либо отдельные операции, служит аппарат транзакций. Транзакция – неделимая с точки
зрения воздействия на БД последовательность операторов манипулирования данными
(чтения, удаления, вставки, модификации) такая, что: 1) либо результаты всех операторов, входящих в транзакцию, отображаются в БД; 2) либо воздействие всех этих операторов полностью отсутствует. При этом для поддержания ограничений целостности на уровне БД допускается
их нарушение внутри транзакции так, чтобы к моменту завершения транзакции
условия целостности были соблюдены. Для обеспечения контроля целостности каждая транзакция должна начинаться
при целостном состоянии БД и должна сохранить это состояние целостным после
своего завершения. Если операторы, объединенные в транзакцию, выполняются, то
происходит нормальное завершение транзакции, и БД переходит в обновленное
(целостное) состояние (ситуация COMMIT на слайде 4). Если же происходит сбой
при выполнении транзакции, то происходит так называемый откат к исходному
состоянию БД (ситуация ROLLBACK на слайде 4). 25.1. Модели транзакций Рассмотрим две модели транзакций, используемые в большинстве коммерческих СУБД: модель автоматического выполнения транзакций и модель управляемого выполнения транзакций, обе основанные на инструкциях языка SQL – COMMIT и ROLLBACK. Автоматическое выполнение транзакций
В стандарте ANSI/ISO зафиксировано, что
транзакция автоматически начинается с выполнения пользователем или программой
первой инструкции SQL. Далее происходит последовательное
выполнение инструкций до тех пор, пока транзакция не завершается одним из двух
способов (слайд 6): ·
инструкцией COMMIT, которая выполняет завершение транзакции: изменения,
внесенные в БД, становятся постоянными, а новая транзакция начинается сразу
после инструкции COMMIT; ·
инструкцией
ROLLBACK, которая
отменяет выполнение текущей транзакции и возвращает БД к состоянию начала
транзакции, новая транзакция начинается сразу после инструкции ROLLBACK. Такая модель создана на основе модели, принятой в СУБД DB2. Управляемое выполнение транзакций
Отличная от модели ANSI/ISO модель транзакций
используется в СУБД Sybase, где применяется диалект Transact-SQL, в котором для обработки транзакций служат
четыре инструкции (слайд 7): ·
инструкция BEGIN TRANSACTION сообщает о начале транзакции, т.е.
начало транзакции задается явно; ·
инструкция COMMIT TRANSACTION сообщает об успешном выполнении
транзакции, но при этом новая транзакция не начинается автоматически; ·
инструкция SAVE TRANSACTION позволяет создать внутри транзакции точку
сохранения и присвоить сохраненному состоянию имя точки сохранения,
указанное в инструкции; ·
инструкция
ROLLBACK отменяет
выполнение текущей транзакции и возвращает БД к состоянию, где была выполнена
инструкция SAVE TRANSACTION (если в инструкции указана точка сохранения – ROLLBACK ТО имя_точки_сохранения) или
к состоянию начала транзакции. 25.2. Журнал транзакций (слайд 8) Возможность восстановления состояния базы данных после сбоев обеспечивается
с помощью журнала транзакций. Журнализация изменений, т.е. сохранение во
внешней памяти информации обо всех модификациях БД, тесно связана с управлением
транзакциями. Основным принципом согласованной политики записи изменений в журнал и непосредственно
в базу данных является то, что запись об изменении объекта базы данных должна
попадать во внешнюю память журнала раньше, чем измененный объект оказывается во
внешней памяти базы данных. Соответствующий протокол журнализации (и управления
буферизацией) называется Write Ahead Log (WAL) – «пиши сначала в журнал», и
состоит в том, что если требуется сохранить во внешней памяти измененный объект
базы данных, то перед этим нужно гарантировать сохранение во внешней памяти
журнала записи о его изменении. Другими словами, если во внешней памяти базы данных находится некоторый
объект базы данных, по отношению к которому выполнена операция модификации, то
во внешней памяти журнала обязательно находится запись, соответствующая этой
операции. Каждая успешно завершившаяся транзакция должна быть реально
зафиксирована во внешней памяти. Какой бы сбой не произошел, система должна
иметь все данные для восстановления состояния базы данных, содержащие
результаты всех зафиксированных к моменту сбоя транзакций. Минимальным
требованием, гарантирующим возможность восстановления последнего согласованного
состояния базы данных, является сохранение во внешней памяти журнала всех
записей об изменении базы данных этой транзакцией. При этом последней записью в
журнал, производимой от имени данной транзакции, является специальная запись о
конце транзакции. Иногда для восстановления последнего согласованного состояния базы данных
после сбоя журнала изменений базы данных явно недостаточно. Основой восстановления
в этом случае являются журнал и архивная копия базы данных. Восстановление начинается с
обратного копирования базы данных из архивной копии. Затем для всех
закончившихся транзакций в прямом смысле повторно выполняются все операции.
Более точно происходит следующее: по журналу в прямом направлении выполняются
все операции; для транзакций, которые не закончились к моменту сбоя, выполняется
откат. Хотя к ведению журнала предъявляются особые требования по части
надежности, реально возможна и его утрата. Тогда единственным способом
восстановления базы данных является возврат к архивной копии. Конечно, в этом
случае не удастся получить последнее согласованное состояние базы данных. Рассмотрим способы производства архивных копий базы данных. Самый простой
способ - архивировать базу данных при переполнении журнала. В этом случае образование
новых транзакций временно блокируется. Когда все транзакции закончатся, и,
следовательно, база данных придет в согласованное состояние, можно выполнять ее
архивацию, после чего начинать заполнять журнал заново. Можно выполнять архивацию базы данных реже, чем переполняется журнал. При
переполнении журнала и окончании всех начатых транзакций можно архивировать сам
журнал. Поскольку такой архивированный журнал, по сути дела, требуется только
для воссоздания архивной копии базы данных, журнальная информация при архивации
может быть существенно сжата. В заключении сформулируем общие требования к системе
восстановления данных в составе СУБД (слайд 9). 3) Пользователь не должен осуществлять рестарт транзакций или повторный ввод данных. Восстановление должно проходить на базе транзакции с помощью отмены или изменения отдельных транзакций. 4) Быстрое восстановление данных обеспечивается генерацией данных, используемых для восстановления. 5) При выполнении процедур автоматизированного восстановления пользователь не должен анализировать состав данных и выбирать сами процедуры. Для восстановления базы данных СУБД имеют в своем составе
сервисные программные средства (слайд 10): 6) Программы ведения системного журнала регистрируют операции над БД: описание соответствующей транзакции, код пользователя, текст входного сообщения, тип изменения БД, адреса изменяемых данных вместе с их значениями до и после изменения. 7) Программы архивации используются для регулярного получения копий БД для последующего ее восстановления. 8) Программы восстановления применяются для возврата БД или некоторых ее частей в состояние, предшествующее возникновению отказа. При этом используют архивную копию БД и системный журнал. 9) Программы отката ликвидируют последствия выполнения определенной транзакции в БД. 10) Программы записи контрольных точек и повторного исполнения позволяют ускорить восстановление. Таким образом, можно резюмировать, что транзакция – это законченный блок
обращений к базе данных и некоторых действий над ней, для которого
гарантируется выполнение четырех условий, так называемых свойств ACID (Atomicity,
Consistency, Isolation, Durability) (слайд 11). -
Атомарность – операции транзакции образуют
неразделимый атомарный блок с определенным началом и концом. Этот блок либо
выполняется от начала до конца, либо не выполняется вообще. Если в процессе
выполнения транзакции произошел сбой, происходит откат к исходному состоянию. -
Согласованность – по завершении транзакции все
задействованные объекты находятся в согласованном состоянии. -
Изолированность – одновременный доступ транзакций
различных приложений к разделяемым объектам координируется таким образом, чтобы
эти транзакции не влияли друг на друга. -
Долговременность – все изменения данных,
осуществленные в процессе выполнения транзакции, не могут быть потеряны. |
| |