Лабораторные работы по курсу «Базы данных»



Pdf көрінісі
бет23/46
Дата12.05.2023
өлшемі0,79 Mb.
#92097
түріПрактикум
1   ...   19   20   21   22   23   24   25   26   ...   46
Байланысты:
2-3 лаб

2. Управление транзакциями 
Транзакция – это 
последовательность 
операций 
над 
БД, 
рассматриваемых СУБД как единое целое. Либо транзакция успешно 
выполняется, и СУБД фиксирует (COMMIT) изменения БД, произведенные 
этой транзакцией, во внешней памяти, либо ни одно из этих изменений никак 
не отражается на состоянии БД (ROLLBACK). Более подробно механизм 
транзакций будет рассмотрен в следующих лабораторных работах. 
3. Управление данными во внешней памяти. 
4. Управление буферами оперативной памяти. 
5. Обеспечение целостности и безопасности базы данных. 
Целостность базы данных – свойство базы данных, при наличии, 
которого база данных содержит полную и непротиворечивую информацию, 
необходимую и достаточную для корректного функционирования 
приложений. Поддержание целостности базы данных включает проверку 
целостности и ее восстановление в случае обнаружения противоречий в базе 
данных. Целостное состояние базы данных описывается с помощью 
ограничений целостности в виде условий, которым должны удовлетворять 
хранимые в базе данные. Примером таких условий может служить 
ограничение диапазонов возможных значений атрибутов объектов, сведения 
о которых хранятся в базе данных, или отсутствие повторяющихся записей в 
таблицах реляционных баз данных. 
6. Журнализация 
Одним из основных требований к СУБД является надежность хранения 
данных во внешней памяти. Под надежностью хранения понимается то, что 
СУБД должна быть в состоянии восстановить последнее согласованное 
состояние БД после любого аппаратного или программного сбоя. Обычно 


рассматриваются два возможных вида аппаратных сбоев: так называемые 
мягкие сбои, которые можно трактовать как внезапную остановку работы 
компьютера (например, аварийное выключение питания), и жесткие сбои, 
характеризуемые потерей информации на носителях внешней памяти. 
Примерами программных сбоев могут быть: аварийное завершение работы 
СУБД (по причине ошибки в программе или в результате некоторого 
аппаратного сбоя) или аварийное завершение пользовательской программы, в 
результате чего некоторая транзакция остается незавершенной. Первую 
ситуацию можно рассматривать как особый вид мягкого аппаратного сбоя; 
при возникновении последней требуется ликвидировать последствия только 
одной транзакции. 
Понятно, что в любом случае для восстановления БД нужно располагать 
некоторой дополнительной информацией. Другими словами, поддержание 
надежности хранения данных в БД требует избыточности хранения данных. 
Наиболее распространенным методом поддержания такой избыточной 
информации является ведение журнала изменений БД. 
Журнал – это особая часть БД, недоступная пользователям СУБД, в 
которую поступают записи обо всех изменениях основной части БД. В 
разных СУБД изменения БД журнализуются на разных уровнях: иногда 
запись в журнале соответствует некоторой логической операции изменения 
БД (например, операции удаления строки из таблицы реляционной БД), 
иногда - минимальной внутренней операции модификации страницы 
внешней памяти; в некоторых системах одновременно используются оба 
подхода. 
Во всех случаях придерживаются стратегии "упреждающей" записи в 
журнал (так называемого протокола Write Ahead Log - WAL). Грубо говоря, 
эта стратегия заключается в том, что запись об изменении любого объекта БД 
должна попасть во внешнюю память журнала раньше, чем измененный 
объект попадет во внешнюю память основной части БД. Известно, что если в 
СУБД корректно соблюдается протокол WAL, то с помощью журнала можно 
решить все проблемы восстановления БД после любого сбоя. 
Самая простая ситуация восстановления - индивидуальный откат 
транзакции. Строго говоря, для этого не требуется общесистемный журнал 
изменений БД. Достаточно для каждой транзакции поддерживать локальный 
журнал операций модификации БД, выполненных в этой транзакции, и 
производить откат транзакции путем выполнения обратных операций, следуя 
от конца локального журнала. В некоторых СУБД так и делают, но в 
большинстве 
систем 
локальные 
журналы 
не 
поддерживают, 
а 
индивидуальный откат транзакции выполняют по общесистемному журналу, 
для чего все записи от одной транзакции связывают обратным списком (от 
конца к началу).
При мягком сбое во внешней памяти основной части БД могут 
находиться объекты, модифицированные транзакциями, не закончившимися 
к моменту сбоя, и могут отсутствовать объекты, модифицированные 
транзакциями, которые к моменту сбоя успешно завершились (по причине 


использования буферов оперативной памяти, содержимое которых при 
мягком сбое пропадает). При соблюдении протокола WAL во внешней 
памяти журнала должны гарантированно находиться записи, относящиеся к 
операциям модификации обоих видов объектов. Целью процесса 
восстановления после мягкого сбоя является состояние внешней памяти 
основной части БД, которое возникло бы при фиксации во внешней памяти 
изменений всех завершившихся транзакций и которое не содержало бы 
никаких следов незаконченных транзакций. Для того чтобы этого добиться, 
сначала производят откат незавершенных транзакций (undo), а потом 
повторно воспроизводят (redo) те операции завершенных транзакций, 
результаты которых не отображены во внешней памяти. 
Для восстановления БД после жесткого сбоя используют журнал и 
архивную копию БД. Грубо говоря, архивная копия - это полная копия БД к 
моменту начала заполнения журнала (имеется много вариантов более гибкой 
трактовки смысла архивной копии). Конечно, для нормального 
восстановления БД после жесткого сбоя необходимо, чтобы журнал не 
пропал. 


Достарыңызбен бөлісу:
1   ...   19   20   21   22   23   24   25   26   ...   46




©emirsaba.org 2024
әкімшілігінің қараңыз

    Басты бет