ВУЗ:
Составители:
Рубрика:
40
состояние (например, если выполнена только часть необходимых действий). Другими
словами, если произошла ошибка во время работы такого оператора, база данных должна
остаться полностью неизмененной. Более того, это должно быть справедливо даже в том
случае, когда действия оператора являются причиной дополнительной, например
каскадной, операции.
Восстановление транзакции
Транзакция начинается с успешного выполнения оператора BEGIN TRANSACTION
(для краткости BEGIN) и заканчивается успешным выполнением либо оператора
COMMIT, либо ROLLBACK. Оператор COMMIT устанавливает так называемую точку
фиксации (которая в коммерческих продуктах также называется точкой синхронизации
(syncpoint)). Точка фиксации соответствует концу логической единицы работы и,
следовательно, точке, в которой база данных находится (или будет находиться) в
состоянии согласованности. В данном случае термин "база данных" означает доступную
для транзакции часть базы данных. Другие транзакции могут выполняться параллельно
этой транзакции и создавать изменения в собственных частях базы данных. Таким
образом, вся база данных может и не быть в состоянии согласованности в данный момент.
Однако в нашем обсуждении игнорируется возможность конкуренции между
транзакциями (поскольку такое упрощение существенно не влияет на рассматриваемый
вопрос). Выполнение оператора ROLLBACK вновь возвращает базу данных в состояние, в
котором она была во время операции BEGIN TRANSACTION, т.е. в предыдущую точку
фиксации. Понятие "предыдущая точка фиксации" достаточно корректно даже в случае
первой транзакции в программе при условии, что первый оператор BEGIN по умолчанию
устанавливает в программе первичную точку фиксации. Ниже перечислены случаи
установки точки фиксации:
1. Все обновления, совершенные программой с тех пор, как установлена предыду-
щая точка фиксации, выполнены, т.е. стали постоянными. Во время
выполнения все такие обновления могут расцениваться только как пробные (в
том смысле, что они могут быть не выполнены, например прокручены назад).
Гарантируется, что однажды зафиксированное обновление так и останется
зафиксированным (это и есть определение понятия "зафиксировано").
2. Все позиционирование базы данных утеряно, и все блокировки кортежей реализо-
ваны. Позиционирование базы данных здесь означает, что в любое конкретное
время программа обычно адресована определенным кортежам. Эта адресуемость
в точке фиксации теряется.
Пункт 2, исключая возможность сохранения некоторой адресуемости и, следова-
тельно, соответствующей блокировки кортежей, также применим, когда транзакция
завершена оператором ROLLBACK, а не COMMIT. К пункту 1 это, конечно, не относится.
Обратите внимание, что COMMIT и ROLLBACK завершают транзакцию, а не программу.
В общем, выполнение программы будет состоять из согласования нескольких транзакций,
запущенных одна за другой, как показано на рис. 4.2.
А сейчас давайте вернемся к примеру предыдущего раздела (см. рис. 4.1). Здесь
используется явный тест для определения ошибки и выполняется ROLLBACK, если обна-
ружена любая ошибка. Однако на самом деле программы не всегда могут использовать
явные тесты для всех возможных ошибок. Следовательно, система будет выполнять
ROLLBACK неявно для любой программы, которая по какой-либо причине не достигла
запланированного завершения операций (на рис. 4.1. "запланированное завершение"
означает операцию RETURN, которая завершает программу и передает управление назад
в систему).
состояние (например, если выполнена только часть необходимых действий). Другими
словами, если произошла ошибка во время работы такого оператора, база данных должна
остаться полностью неизмененной. Более того, это должно быть справедливо даже в том
случае, когда действия оператора являются причиной дополнительной, например
каскадной, операции.
Восстановление транзакции
Транзакция начинается с успешного выполнения оператора BEGIN TRANSACTION
(для краткости BEGIN) и заканчивается успешным выполнением либо оператора
COMMIT, либо ROLLBACK. Оператор COMMIT устанавливает так называемую точку
фиксации (которая в коммерческих продуктах также называется точкой синхронизации
(syncpoint)). Точка фиксации соответствует концу логической единицы работы и,
следовательно, точке, в которой база данных находится (или будет находиться) в
состоянии согласованности. В данном случае термин "база данных" означает доступную
для транзакции часть базы данных. Другие транзакции могут выполняться параллельно
этой транзакции и создавать изменения в собственных частях базы данных. Таким
образом, вся база данных может и не быть в состоянии согласованности в данный момент.
Однако в нашем обсуждении игнорируется возможность конкуренции между
транзакциями (поскольку такое упрощение существенно не влияет на рассматриваемый
вопрос). Выполнение оператора ROLLBACK вновь возвращает базу данных в состояние, в
котором она была во время операции BEGIN TRANSACTION, т.е. в предыдущую точку
фиксации. Понятие "предыдущая точка фиксации" достаточно корректно даже в случае
первой транзакции в программе при условии, что первый оператор BEGIN по умолчанию
устанавливает в программе первичную точку фиксации. Ниже перечислены случаи
установки точки фиксации:
1. Все обновления, совершенные программой с тех пор, как установлена предыду-
щая точка фиксации, выполнены, т.е. стали постоянными. Во время
выполнения все такие обновления могут расцениваться только как пробные (в
том смысле, что они могут быть не выполнены, например прокручены назад).
Гарантируется, что однажды зафиксированное обновление так и останется
зафиксированным (это и есть определение понятия "зафиксировано").
2. Все позиционирование базы данных утеряно, и все блокировки кортежей реализо-
ваны. Позиционирование базы данных здесь означает, что в любое конкретное
время программа обычно адресована определенным кортежам. Эта адресуемость
в точке фиксации теряется.
Пункт 2, исключая возможность сохранения некоторой адресуемости и, следова-
тельно, соответствующей блокировки кортежей, также применим, когда транзакция
завершена оператором ROLLBACK, а не COMMIT. К пункту 1 это, конечно, не относится.
Обратите внимание, что COMMIT и ROLLBACK завершают транзакцию, а не программу.
В общем, выполнение программы будет состоять из согласования нескольких транзакций,
запущенных одна за другой, как показано на рис. 4.2.
А сейчас давайте вернемся к примеру предыдущего раздела (см. рис. 4.1). Здесь
используется явный тест для определения ошибки и выполняется ROLLBACK, если обна-
ружена любая ошибка. Однако на самом деле программы не всегда могут использовать
явные тесты для всех возможных ошибок. Следовательно, система будет выполнять
ROLLBACK неявно для любой программы, которая по какой-либо причине не достигла
запланированного завершения операций (на рис. 4.1. "запланированное завершение"
означает операцию RETURN, которая завершает программу и передает управление назад
в систему).
40
Страницы
- « первая
- ‹ предыдущая
- …
- 38
- 39
- 40
- 41
- 42
- …
- следующая ›
- последняя »
