Funnybluejeans : другие произведения.

34

Самиздат: [Регистрация] [Найти] [Рейтинги] [Обсуждения] [Новинки] [Обзоры] [Помощь|Техвопросы]
Ссылки:


 Ваша оценка:

  Транзакция - логическая единица работы в базе данных а так же единица восстановления информации при сбое СУБД.
  Особенности реализации транзакций:
  - Неявные транзакции. Транзакция автоматически начитается или с начала сеанса или с момента окончания предыдущей транзакции.
  - Типы транзакций - Read Write, Read Only. Транзакция Read Only эквивалентна при чтении уровню изолированности SERIALIZABLE. Такая транзакция видит только изменения, зафиксированные на момент ее начала, но в этом режиме не разрешена вставка, изменение и удаление данных (другие сеансы могут изменять данные, но транзакция только для чтения - нет).
  - Уровни изолированности - Read Committed, Serializable.
  - Механизм многоверсионности. Основные характеристики: 1. Согласованность по чтению для запросов (Запросы выдают согласованные результаты на момент начала их выполнения. Изменяемые данные помещаются в область сегмента отката). 2. Неблокируемые запросы (Запросы, изменяющие данные, не блокируют запросы, читающие данные, и читающие запросы не блокируют изменяющие, как это бывает в других СУБД).
  - Операторы управления транзакциями: SET TRANSACTION, COMMIT, ROLLBACK, SAVEPOINT.
  Оператор COMMIT завершает транзакцию и делает любые выполненные в ней изменения постоянными.
  ROLLBACK. Простой оператор отката завершает транзакцию и отменяет все выполненные в ней и незафиксированные изменения.
  Оператор SAVEPOINT позволяет создать в транзакции "метку", или точку сохранения.
  SET TRANSACTION. Позволяет устанавливать атрибуты транзакции, такие как уровень изолированности и то, будет ли она использоваться только для чтения данных или для чтения и записи.
  Автономные транзакции позволяют создать "транзакцию внутри транзакции", которая зафиксирует или выполнит откат изменений, независимо от родительской транзакции.
  Автономные транзакции предоставляют новый метод управления транзакциями в PL/SQL и могут быть использованы в следующих конструкциях:
  - Анонимные блоки верхнего уровня.
  - Локальные (процедура в процедуре).
  - Методы объектных типов.
  - Триггеры баз данных.
  Пример.
  tkyte@TKYTE816> create table t (msg varchar2(25));
  Table created.
  tkyte@TKYTE816> create or replace procedure Autonomous_Insert
  2 as
  3 pragma autonomous_transaction;
  4 begin
  5 insert into t values ('Autonomous Insert');
  6 commit;
  7 end;
  8 /
  Procedure created.
  tkyte@TKYTE816> create or replace procedure NonAutonomous_Insert
  2 as
  3 begin
  4 insert into t values ('NonAutonomous Insert');
  5 commit;
  6 end;
  7 /
  Procedure created.
  Процедуры вставляют свои имена в таблицу сообщений и фиксируют результат. PRAGMA AUTONOMOUS_TRANSACTION - указывает, что процедура выполнятся как новая автономная транзакция, независимо от родительской. Рассмотрим поведение обычной транзакции в анонимном блоке PL/SQL:
  tkyte@TKYTE816> begin
  2 insert into t values ('Anonymous Block');
  3 NonAutonomous_Insert;
  4 rollback;
  5 end;
  6 /
  PL/SQL procedure successfully completed.
  tkyte@TKYTE816> select * from t;
  MSG
  Anonymous Block
  NonAutonomous Insert
  Изменения, выполненные анонимным блоком (вставка строки), были зафиксированы процедурой NonAutonomous_Insert. Зафиксированы обе строки данных, и оператору rollback оказалось нечего откатывать. Сравним это с поведением хп, оформленной как автономная транзакция:
  tkyte@TKYTE816> delete from t;
  2 rows deleted.
  tkyte@TKYTE816> commit;
  Commit complete.
  tkyte@TKYTE816> begin
  2 insert into t values ('Anonymous Block');
  3 Autonomous_Insert;
  4 rollback;
  5 end;
  6 /
  PL/SQL procedure successfully completed.
  tkyte@TKYTE816> select * from t;
  MSG
  Autonomous Insert Остаются только изменения, выполненные и зафиксированные в автономной транзакции. Оператор INSERT, выполненный в анонимном блоке, откатывается оператором ROLLBACK в строке 4. Оператор COMMIT в процедуре - автономной транзакции не влияет на родительскую транзакцию, начатую в анонимном блоке. Этот простой пример показывает суть автономных транзакций.
 Ваша оценка:

Связаться с программистом сайта.

Новые книги авторов СИ, вышедшие из печати:
О.Болдырева "Крадуш. Чужие души" М.Николаев "Вторжение на Землю"

Как попасть в этoт список

Кожевенное мастерство | Сайт "Художники" | Доска об'явлений "Книги"