Эта команда предназначена только для создания точек отката между операторами транзакций. Для отмены групп транзакций используется команда ROLLBACK. Команда SAVEPOINT позволяет упростить процесс управления транзакциями путем разделения больших групп транзакций на более мелкие и лучше управляемые группы.
Имя точки отката должно быть уникальным внутри соответствующей группы транзакций. Однако имя точки отката может совпадать с именем таблицы или другого объекта. По поводу информации об ограничениях на задаваемые имена обратитесь к документации по используемой вами реализации SQL
Команда возврата к точке отката имеет следующий синтаксис.
ROLLBACK TO ИМЯ_ТОЧКИ_ОТКАТА;
В следующем примере мы сначала удалим оставшиеся три. записи из таблицы, но перед каждым удалением создадим по точке отката, чтобы иметь возможность вернуться к любой из них и вернуть соответствующие данные в их прежнее состояние. SAVEPOINT SPl;
Точка отката создана.
DELETE FROM PRODUCTSJTMP WHERE PROD.ZD - '11235';
1 строка удалена.
SAVEPOINT SP2;
Точка отката создана.
DELETE FROM PRODUCTS_TMP WHERE PROD_ID - '90';
1 строка удалена.
SAVEPOINT SP3;
Точка отката создана.
DELETE FROM PRODUCTSJTMP WHERE PROD_ID - '2345';
1 строка удалена.
Теперь после выполнения всех удалений вы имеете возможность передумать и вернуться, например, к точке отката, которую вы назвали SP2. Поскольку SP2 была создана после выполнения первого удаления, возврат к ней означает отмену двух последних удалений.
ROLLBACK SP2;
Отмена выполнена.
При откате к точке SP2 оказывается выполненным только первое удаление. SELECT * FROM PRODUCTS_TMP;
PROD_ID PROD_DESC COST
90 ФОНАРИ 14.5 2345 ПОЛОЧКА ИЗ ДУБА 59.99
2 строки выбраны.
Помните, что сама по себе команда ROLLBACK возвращает к состоянию, сложившемуся после применения последнего из операторов COMMIT или ROLLBACK. В нашем случае операторы COMMIT не применялись, поэтому будут отменены все удаления:
ROLLBACK;
Отмена выполнена.
SELECT * FROM PRODUCTS_TMP;
PPOD_ID PROD_DESC COST
11235 КОСТЮМ ВЕДЬМЫ 29.99
90 ФОНАРИ 14.5
2345 ПОЛОЧКА ИЗ ДУБА 59.99
3 строки выбраны.
Команда RELEASE SAVEPOINT используется для удаления точек отката. После удаления точки отката у вас не будет возможности осуществить откат к этой точке с помощью КОМаНДЫ ROLLBACK.
RELEASE SAVEPOINT ИМЯ_ТОЧКИ_ОТКАТА;
Команда SET TRANSACTION используется для инициализации транзакций. Эта команда используется для задания характеристик транзакций, следующих после нее. Так, можно потребовать, чтобы транзакции выполняли только чтение данных либо осуществляли и чтение, и запись. Например,
SET TRANSACTION READ WRITE; SET TRANSACTION READ ONLY;
Транзакциям можно назначить и другие характеристики, но их рассмотрение выходит за рамки этой книги. Дополнительную информацию вы найдете в документации той реализации SQL, которую используете.
Недостаточный контроль за транзакциями может замедлить работу базы данных и даже совсем блокировать ее. Частое замедление работы базы данных может быть следствием недостаточного контроля за транзакциями при массовом вводе, обновлении или удалении данных. Эти процессы не только сами по себе требуют больших ресурсов процессора и памяти, но и вызывают заполнение области хранения временных данных, освобождающейся только в результате выполнения команд COMMIT И ROLLBACK.
В результате применения команды COMMIT результаты выполнения транзакций записываются в базу данных, а информация в области для временных данных, обеспечивающая возможность отмены, стирается. В случае использования команды
ROLLBACK, в базу данных изменения не вносятся, но информация в области для временных данных, обеспечивающая возможность отмены, стирается. Если команды COMMIT и ROLLBACK не использовать достаточно долго, то область для временных данных постепенно заполнится, что приведет к остановке всех процессов в базе данных до тех пор, пока пространство не будет освобождено.
На этом уроке вы ознакомились с основами управления транзакциями, осуществляемого с помощью команд COMMIT, ROLLBACK и SAVEPOINT. Команда COMMIT используется для сохранения результатов транзакции в базе данных, ROLLBACK используется для отмены транзакций, a SAVEPOINT - для разделения транзакций на группы, дающие возможность отката к заранее выбранным точкам в последовательности выполняемых транзакций.
Не забывайте достаточно часто использовать команды COMMIT и ROLLBACK при выполнении большого числа транзакций, чтобы не вызвать переполнения доступного базе данных пространства. Не забывайте также, что команды управления транзакциями используются только с командами DML (командами INSERT, UPDATE и DELETE).