Главная Программы Учебное пособие Практикум Дополнительно
    Введение
  Глава 1
  Глава 2
  Глава 3
  Глава 4
  Глава 5
  Глава 6
  Глава 7
  Глава 8
  Задания
  Литература
  Приложение 1
  Приложение 2
  Приложение 3

Практикум

Глава 7. Управление транзакциями

Совокупность команд SQL, результаты действия которых для базы данных представляет собой единое целое, называется транзакцией или логической единицей работы.  В упрощенном представлении, транзакции содержат либо команды DML, выполняющие единое согласованное изменение данных, либо одну команду DDL или DCL.

Транзакции начинаются с выполнения первой исполняемой команды SQL и заканчиваются либо фиксацией изменений в базе данных, либо отказом от фиксации (откатом). Окончанием транзакции может служить одно из следующих событий:

  • выполнение команды COMMIT или ROLLBACK;
  • выполнение команды DDL или DCL (автоматическая фиксация);
  • ошибка, завершение сеанса работы или аварийный останов системы (автоматический откат).

При выполнении команд SQL COMMIT или ROLLBACK происходит явная обработка транзакции. При этом обеспечивается согласованность данных; появляется возможность проверить изменения в данных прежде, чем сделать их постоянными; взаимосвязанные операции логически группируются.

Неявная обработка транзакций приводит к автоматической фиксации изменений или автоматическому откату.

Автоматическая фиксация изменений (COMMIT) происходит в следующих случаях:

  • выполнение команды DDL (например, CREATE);
  • выполнение команды DCL (например, GRANT);
  • нормальный выход из SQL*Plus без явной посылки команды COMMIT или ROLLBACK.

Автоматический откат (ROLLBACK) выполняется в случае аварийного прекращения сеанса работы в SQL*Plus или отказа системы.

 

Рисунок 10. Пример полного отката

 

Рисунок 11. Пример отката до точки A

 

Рисунок 12. Пример отката до точки B

 

7.1. Состояние данных до и после завершения транзакции

Состояние данных перед выполнением команд COMMIT или ROLLBACK:

  • Предыдущее состояние данных может быть восстановлено, т.к. изменения производятся в буфере базы данных.
  • Текущий пользователь может просмотреть результаты своих операций DML с помощью команды SELECT.
  • Другие пользователи не могут видеть результаты команд DML, выполняемых текущим пользователем.
  • Измененяемые строки блокируются, и другие пользователи не могут обновлять их содержимое.

Состояние данных после выполнения команды COMMIT:

  • Измененные данные записываются в базу данных.
  • Предшествующее состояние данных теряется.
  • Все пользователи могут видеть результаты.
  • Измененные строки разблокируются, и другие пользователи получают доступ к ним для обработки данных.
  • Все точки сохранения стираются.

Состояние данных после выполнения команды ROLLBACK:

  • Все незавершенные изменения отменяются.
  • Данные возвращаются в прежнее состояние.
  • Блокировка строк, над которыми выполнялись операции, отменяется.

 

7.2. Фиксация изменений в данных

Синтаксис:

COMMIT;

 

Примеры.  Создание нового отдела обучения и добавление данных, по крайней мере, об одном служащем.  Фиксация изменений.

 

7.3. Откат результатов

Синтаксис:

ROLLBACK [TO метка];

где

метка

Имя маркера, определяющего точку сохранения

 

Пример.  Во время удаления записи из таблицы TEST случайно стерты все данные этой таблицы. Ошибка исправляется, посылается правильная команда, и изменения фиксируются.

 

 

Откат до маркера

С помощью команды SAVEPOINT можно создать в текущей транзакции маркеры для отката.  Откат до такого маркера выполняется с помощью команды ROLLBACK TO.

 

 

Откат на уровне команды

Если ошибка возникла при выполнении одной конкретной команды DML, отменяются только результаты этой команды.  Для этого Oracle использует неявную точку сохранения.

При откате на уровне команды все прочие изменения сохраняются и пользователь должен завершить транзакцию явно командой COMMIT или ROLLBACK.

 

Для закрепления материала рекомендуется выполнить Практическое занятие 9.