При откате к точке 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
Команда RELEASE SAVEPOINT используется для удаления точек отката. После удаления точки отката у вас не будет возможности осуществить откат к этой точке с помощью КОМаНДЫ ROLLBACK.
RELEASE SAVEPOINT ИМЯ_ТОЧКИ_ОТКАТА;
Команда SET TRANSACTION
Команда 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).
Вопросы и ответы
Обязательно ли подтверждение после каждого использования командыINSERT?
Нет, не обязательно. Если вам требуется ввести в таблицу несколько сотен тысяч строк, то команду COMMIT рекомендуется использовать после ввода каждых 5000-10000 строк, в зависимости от размера области, предназначенной для хранения временных данных. Помните, что база данных не может работать, когда эта область переполнена.
Каким образом командаROLLBACK отменяет изменения, сделанные в результате транзакции?
Команда ROLLBACK удаляет информацию о сделанных изменениях из области с временными данными.
Допустим, при выполнении транзакции 99 % ее операторов завершились успешно, а 1 % вернули ошибки, имеется ли возможность отменить только эти ошибочные операторы?
Нет, транзакция должна быть полностью успешной - иначе возникает угроза нарушения целостности данных.
КомандаCOMMIT делает транзакцию перманентной. Можно ли после этого изменить данные?
В данном случае перманентность означает внесение изменений в базу данных. У вас всегда имеется возможность внесения новых изменений в базу данных с помощью оператора UPDATE.
Практикум
Задания практических занятий разделены на тесты и упражнения. Тесты предназначены для проверки общего уровня понимания рассмотренного материала. Упражнения дают возможность применить на практике идеи, обсуждавшиеся в ходе теку-
Читать дальше