![]() |
|
|||
WebMoney: WMZ Z294115950220 WMR R409981405661 WME E134003968233 |
Visa 4274 3200 2453 6495 |
SAVEPOINT это метод создания транзакций, подобных
BEGIN и
COMMIT,
за исключением того, что команды SAVEPOINT и RELEASE
именованы и можно вкладывать. SAVEPOINT начинает новую транзакцию с именем.
Операционные имена не должны быть уникальными.
SAVEPOINT может быть начата в или за пределами
BEGIN...
COMMIT.
Когда SAVEPOINT наиболее удаленная точка сохранения, и это не в
BEGIN...
COMMIT,
поведение совпадает с BEGIN DEFERRED TRANSACTION. ROLLBACK TO возвращает состояние базы данных назад к тому,
чем это было сразу после соответствующей SAVEPOINT.
Обратите внимание на то, что в отличие от простой
ROLLBACK (без TO), ROLLBACK TO
не отменяет транзакцию. Вместо того, чтобы отменить транзакцию, ROLLBACK TO
перезапускает ее снова. Все прошедшие SAVEPOINT отменяются, как бы
то ни было. Команда RELEASE подобна COMMIT для
SAVEPOINT. RELEASE заставляет все точки сохранения вернуться,
включая новую точку сохранения с соответствующим именем, и удалиться из
операционного стека. RELEASE внутренней транзакции
не заставляет изменения быть написанными в файл базы данных.
Это просто удаляет точки сохранения из операционного стека, таким образом,
что больше невозможно ROLLBACK TO для тех точек сохранения.
Если команда RELEASE выпускает наиболее удаленную точку сохранения, чтобы
операционный стек стала пустым, то RELEASE совпадает с
COMMIT.
COMMIT
может использоваться, чтобы выпустить все точки сохранения и передать
транзакцию, даже если она была первоначально начата командой SAVEPOINT вместо
команды BEGIN. Если имя точки сохранения в команде RELEASE в настоящее время не
соответствует никакой точке сохранения в операционном стеке, то никакие точки
сохранения не выпущены, база данных неизменна, а
команда RELEASE возвращает ошибку. Обратите внимание на то, что внутренняя транзакция
могла бы передать (использованием команды RELEASE), но тогда позже отменить
ее работу ROLLBACK во внешней транзакции. Перебой в питании или катастрофа
программы вызовут отмену наиболее удаленной транзакции, отменяя все
изменения, которые произошли в той внешней транзакции, даже изменения,
которые были, предположительно, "переданы" командой RELEASE.
Содержание на самом деле не передается на диск, пока наиболее удаленная
транзакция не передается. Есть несколько способов мышления о команде RELEASE: Некоторые люди рассматривают RELEASE как эквивалент COMMIT для
SAVEPOINT. Это приемлемая точка зрения, пока каждый помнит, что изменения,
переданные внутренней транзакцией, могли бы позже быть
отменены во внешней. Другое представление о RELEASE: это сливает названную транзакцию
в свою родительскую транзакцию, чтобы названная транзакция
и ее родитель стали той же самой транзакцией. После RELEASE названная
транзакция и ее родитель передадутся или отменятся вместе. Можно также думать о точках сохранения как об "отметках" в
операционной временной шкале. В этом представлении команда SAVEPOINT создает
новую отметку, команда ROLLBACK TO
перематывает временную шкалу назад к пункту сразу после названной отметки,
команда RELEASE стирает отметки с временной шкалы,
на самом деле не внося изменений в базу данных. Начатая последняя транзакция будет первой, переданной или отмененной. BEGIN работает только
если операционный стек пуст или другими словами при отсутствии отложенных
транзакций. Если операционный стек не пуст,
BEGIN терпит неудачу с ошибкой. COMMIT передает все транзакции
и оставляет операционный стек пустым. RELEASE начинается с нового дополнения к операционному стеку
и выпускает точки сохранения назад, пока это не выпустит точку сохранения с
соответствующим именем точки сохранения. Предшествующие точки сохранения,
даже точки сохранения с соответствием именам точки сохранения, неизменны.
Если команда RELEASE заставляет операционный стек
стать пустым (если команда RELEASE выпускает наиболее удаленную
транзакцию из стека), транзакция передается. ROLLBACK без TO
отменяет все транзакции, оставляя стек пустым. ROLLBACK TO отменяет до прежнего уровня транзакции по времени
предшествующие новому SAVEPOINT с соответствующим именем.
SAVEPOINT с соответствующим именем остается в операционном стеке, но все
изменения базы данных, которые произошли после того, как SAVEPOINT
был создан, отменены. Если имя точки сохранения в ROLLBACK TO
не соответствует никакому SAVEPOINT в стеке, то ROLLBACK
терпит неудачу с ошибкой и оставляет статус базы данных без изменений.
Choose any three.
1. Синтаксис
2. Savepoints
3.
Операционные правила вложения