ВУЗ:
Составители:
Рубрика:
38
Лекция 4. Функция восстановления
Функции восстановления и параллелизма во многом взаимодействуют и являются
аспектами более общей проблемы, называемой процессом транзакции. Однако из
педагогических соображений желательно изучать их отдельно. В настоящей лекции
остановимся на функции восстановления, однако время от времени ссылки на функцию
параллелизма будут неизбежны.
Восстановление в системе управления базами данных означает в первую
очередь восстановление самой базы данных, т.е. возвращение базы данных в пра-
вильное состояние, если какой-либо сбой сделал текущее состояние неправильным
или подозрительным.
Основной принцип, на котором строится такое восстановление, достаточно прост -
это избыточность. Но эта избыточность организуется на физическом уровне. Конечно,
такая избыточность будет скрыта от пользователя, а следовательно, не видна на
логическом уровне. Другими словами, если любая часть информации, содержащаяся в
базе данных, может быть реконструирована из другой хранимой в системе избыточной
информации, значит, база данных восстанавливаема.
Перед тем как идти дальше, необходимо уяснить, что принцип восстановления и
процесс транзакции в целом не зависят от того, является ли базовая система реляционной
или какой-либо еще. Нужно также отметить, что это весьма обширный предмет
обсуждения, и мы познакомимся только с наиболее важными и базовыми принципами.
Транзакции
Транзакция - это логическая единица работы. Рассмотрим пример. Предположим
сначала, что отношение Р (отношение деталей) включает дополнительный атрибут
ТОТQТY, представляющий собой общий объем поставок для каждой детали. Значение
ТОТQТY для любой определенной детали предполагается равным сумме всех значений
QTY для всех поставок данной детали. На рис. 4.1 показано добавление в базу данных
новой поставки со значением 1000 для поставщика S
5
и детали Р
1
(INSERT добавляет
новую поставку к отношению SР, а UPDATE обновляет значение ТОТQТY для детали Р
1
).
Рис. 4.1. Пример транзакции (псевдокод)
В приведенном примере предполагается, что речь идет об одиночной, атомарной
операции. На самом деле добавление новой поставки - это выполнение двух обновлений в
базе данных (под обновлениями здесь, конечно, понимаются операции INSERT, DELETE,
а также сами по себе операции UPDATE). Более того, в базе данных между этими двумя
обновлениями временно нарушается требование, что значение ТОТQТY для детали Р
1
равно сумме всех значений QTY для этой детали. Таким образом, логическая единица
работы (т.е. транзакция) - не просто одиночная операция системы баз данных, а скорее
BEGIN TRANSACTION;
INSERT ( { S# : ′ S5 ′, P# : ′ P1 ′ , QTY : 1000 } ) INTO SP ;
IF возникла ошибка THEN GO TO UNDO ;
UPDATE P WHERE P# = ′ P1′ TOTQTY : = TOTQTY + 1000 ;
IF возникла ошибка THEN GO TO UNDO ;
COMMIT TRANSACTION;
GO TO FINISH ;
UNDO :
ROLLBACK TRANSACTION;
FINISH:
RETURN ;
Лекция 4. Функция восстановления
Функции восстановления и параллелизма во многом взаимодействуют и являются
аспектами более общей проблемы, называемой процессом транзакции. Однако из
педагогических соображений желательно изучать их отдельно. В настоящей лекции
остановимся на функции восстановления, однако время от времени ссылки на функцию
параллелизма будут неизбежны.
Восстановление в системе управления базами данных означает в первую
очередь восстановление самой базы данных, т.е. возвращение базы данных в пра-
вильное состояние, если какой-либо сбой сделал текущее состояние неправильным
или подозрительным.
Основной принцип, на котором строится такое восстановление, достаточно прост -
это избыточность. Но эта избыточность организуется на физическом уровне. Конечно,
такая избыточность будет скрыта от пользователя, а следовательно, не видна на
логическом уровне. Другими словами, если любая часть информации, содержащаяся в
базе данных, может быть реконструирована из другой хранимой в системе избыточной
информации, значит, база данных восстанавливаема.
Перед тем как идти дальше, необходимо уяснить, что принцип восстановления и
процесс транзакции в целом не зависят от того, является ли базовая система реляционной
или какой-либо еще. Нужно также отметить, что это весьма обширный предмет
обсуждения, и мы познакомимся только с наиболее важными и базовыми принципами.
Транзакции
Транзакция - это логическая единица работы. Рассмотрим пример. Предположим
сначала, что отношение Р (отношение деталей) включает дополнительный атрибут
ТОТQТY, представляющий собой общий объем поставок для каждой детали. Значение
ТОТQТY для любой определенной детали предполагается равным сумме всех значений
QTY для всех поставок данной детали. На рис. 4.1 показано добавление в базу данных
новой поставки со значением 1000 для поставщика S5 и детали Р1 (INSERT добавляет
новую поставку к отношению SР, а UPDATE обновляет значение ТОТQТY для детали Р1).
BEGIN TRANSACTION;
INSERT ( { S# : ′ S5 ′, P# : ′ P1 ′ , QTY : 1000 } ) INTO SP ;
IF возникла ошибка THEN GO TO UNDO ;
UPDATE P WHERE P# = ′ P1′ TOTQTY : = TOTQTY + 1000 ;
IF возникла ошибка THEN GO TO UNDO ;
COMMIT TRANSACTION;
GO TO FINISH ;
UNDO :
ROLLBACK TRANSACTION;
FINISH:
RETURN ;
Рис. 4.1. Пример транзакции (псевдокод)
В приведенном примере предполагается, что речь идет об одиночной, атомарной
операции. На самом деле добавление новой поставки - это выполнение двух обновлений в
базе данных (под обновлениями здесь, конечно, понимаются операции INSERT, DELETE,
а также сами по себе операции UPDATE). Более того, в базе данных между этими двумя
обновлениями временно нарушается требование, что значение ТОТQТY для детали Р1
равно сумме всех значений QTY для этой детали. Таким образом, логическая единица
работы (т.е. транзакция) - не просто одиночная операция системы баз данных, а скорее
38
Страницы
- « первая
- ‹ предыдущая
- …
- 36
- 37
- 38
- 39
- 40
- …
- следующая ›
- последняя »
