Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпоры по субд Крупская.doc
Скачиваний:
54
Добавлен:
15.06.2014
Размер:
1.95 Mб
Скачать

54 Операторы управления транзакциями в Oracle (commit, rollback, savepoint, set transaction, lock table).

Операторы управления транзакциями обеспечивают согласованность данных. SQL-операторы объединяются в логические транзакции, которые выполняются либо успешно, либо неуспешно как единое целое.

Логика работы транзакции. Операторы управления транзакциями. Особенности выполнения транзакции. Об этом данная статья. В ORACLE нет явного оператора, чтобыначать транзакцию, но инет автоматического завершениятранзакции. Транзакция автоматически начинается с первого оператора, который начал изменения, то есть установил блокировку TX . Заканчивается явным оператором окончания транзакции.

Приведу немного подробностей по каждому оператору.

  • COMMIT.Оператор COMMIT завершает транзакцию и делает любые выполненные в ней изменения постоянными. Освобождаются блокировки.

  • ROLLBACK.Оператор отката завершает транзакцию и отменяет все выполненные в ней и незафиксированные изменения. Для этого он читает информацию из сегментов отката и восстанавливает блоки данных в состояние, в котором они находились до начала транзакции. Освобождаются блокировки.

По завершении транзакции необходимо явно указывать одну из команд завершения транзакции иначе за вас это сделает среда, в которой вы работаете (а среда не всегда это делает так, как вы предполагаете).

  • SAVEPOINT.Позволяет создать в транзакции точку сохранения. В одной транзакции можно выполнять оператор SAVEPOINT несколько раз, устанавливая несколько точек сохранения. Точки сохранения позволяют устанавливать маркеры внутри транзакции таким образом, чтобы была возможность отмены только части работы, проделанной в транзакции. Оправдано использование точек сохранения в продолжительных и сложных транзакциях. ORACLE освобождает блокировки, которые были установлены отменённым оператором.

  • SET TRANSACTION. Этот оператор позволяет устанавливать атрибуты транзакции, такие как уровень изолированности и то, будет ли она использоваться только для чтения данных или для чтения и записи. Этот оператор также позволяет привязать транзакцию к определенному сегменту отката.

Использование LOCK TABLE

Предложение LOCK TABLE позволяет вам заблокировать одну или несколько таблиц в указанном режиме, так что вы можете регулировать одновременный доступ к таблицам, поддерживая их целостность. Например, предложение, приведенное ниже, блокирует таблицу emp в режиме row share. Такой режим разрешает одновременный доступ к таблице, но запрещает другим пользователям блокировать всю таблицу для монопольного использования. Блокировка таблицы освобождается, когда ваша транзакция выдает COMMIT или ROLLBACK.

LOCK TABLE emp IN ROW SHARE MODE NOWAIT;

Режим блокировки определяет, какие другие блокировки могут быть применены к таблице. Например, несколько пользователей могут одновременно затребовать блокировки row share для одной и той же таблицы, но лишь один пользователь за раз может затребовать МОНОПОЛЬНУЮ (exclusive) блокировку. Пока один пользователь имеет монопольную блокировку таблицы, другие пользователи не могут изменять (INSERT, UPDATE или DELETE) строк этой таблице.

Необязательное ключевое слово NOWAIT указывает, что, если запрос LOCK TABLE не может быть удовлетворен (возможно, потому, что таблица уже заблокирована другим пользователем), то LOCK TABLE вернет управление пользователю, вместо того, чтобы ждать удовлетворения запроса. Если вы опустите ключевое слово NOWAIT, то ORACLE будет ждать освобождения таблицы; это ожидание не имеет устанавливаемого предела.