Пиши Дома Нужные Работы

Обратная связь

Требования целостности и транзакции

Транзакции

Транзакции — одно из свойств, отличающих базу данных от файловой системы. В файловой системе, если сбой ОС происходит во время записи файла, он, скорее всего, окажется поврежденным. Существуют различные "журнализируемые" файловые системы, которые позволяют восстановить файл на определенный момент времени. Однако, если необходима синхронизация двух файлов, это не поможет: когда при изменении одного файла сбой происходит до того как завершится изменение второго, файлы окажутся рассинхронизированными.

Основное назначение транзакций в базе данных — переводить ее из одного согласованного состояния в другое. При фиксации изменений в базе данных гарантируется сохранение либо всех изменений, либо ни одного. Более того, выполняются все правила и проверки, обеспечивающие целостность данных.

Транзакции базы данных обладают свойствами, сокращенно называемыми ACID(Atomicity, Consistency, Isolation, Durability). Вот что означают эти свойства:

• Неделимость(Atomicity). Транзакция либо выполняется полностью, либо не выполняется.

Согласованность(Consistency). Транзакция переводит базу данных из одного согласованного состояния в другое.

Изолированность(Isolation). Результаты транзакции становятся доступны для других транзакций только после ее фиксации.

Продолжительность(Durability). После фиксации транзакции изменения становятся постоянными.

Транзакции в Oracle обладают всеми перечисленными выше характеристиками. Операторы управления транзакцией, такие как COMMIT, SAVEPOINTи ROLLBACK,

Операторы управления транзакцией

В СУБД Oracle нет оператора "начать транзакцию". Транзакция неявно начинается с первого же оператора, изменяющего данные (установившего блокировку ТХ). Операторы COMMITили ROLLBACKявно завершают транзакции. Всегда завершайте транзакции явно с помощью оператора COMMITили ROLLBACK,иначе решение о том, фиксировать или откатывать, автоматически примет используемое инструментальное средство или среда. При обычном выходе из сеанса SQL*Plus без фиксации или отката эта утилита предполагает, что нужна фиксация, и автоматически ее выполняет. При завершении же программы на языке Pro*Cпо умолчанию выполняется откат.



Транзакции в Oracle неделимы: либо фиксируется (делается постоянным) результат выполнения каждого из операторов, составляющих транзакцию, либо результаты выполнения всех операторов откатываются. Эта защита распространяется и на отдельные операторы. Оператор либо завершается полностью успешно, либо полностью откатывается. Сбой в одном операторе не вызывает автоматического отката ранее выполненных операторов. Их результаты сохраняются и должны быть зафиксированы или отменены пользователем. Прежде чем разбираться детально, что означает свойство "неделимости" для оператора и транзакции, рассмотрим операторы управления транзакциями.

COMMIT.В простейшем случае достаточно ввести просто COMMIT.Можно выполнить COMMIT WORK,но обе формы эквивалентны. Оператор COMMITзавершает транзакцию и делает любые выполненные в ней изменения постоянными (продолжительными). В распределенных транзакциях используются расширения оператора COMMIT.Эти расширения позволяют пометить оператор COMMIT(точнее, пометить транзакцию), задав для него комментарий, а также принудительно зафиксировать сомнительную распределенную транзакцию.

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

SAVEPOINT. Оператор SAVEPOINT позволяет создать в транзакции "метку", или точку сохранения. В одной транзакции можно выполнять оператор SAVEPOINT несколько раз, устанавливая несколько точек сохранения.

ROLLBACK TO <точка сохранения>. Этот оператор используется совместно с представленным выше оператором SAVEPOINT.Транзакцию можно откатить до указанной точки сохранения, не отменяя все сделанные до нее изменения. Таким образом, можно выполнить два оператора UPDATE,затем — оператор SAVEPOINT,а после него — два оператора DELETE.При возникновении ошибки или исключительной ситуации в ходе выполнения операторов DELETEтранзакция будет откатываться до указанной оператором SAVEPOINTточки сохранения; при этом будут отменяться операторы DELETE,но не операторы UPDATE.

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

 

Чаще всего используются операторы COMMITи ROLLBACK.Оператор SAVEPOINTимеет несколько специфическое назначение. Сервер Oracle часто использует его по ходу работы, но определенную пользу от него можно получить и в приложениях.

Теперь можно приступить к изучению последствий неделимости оператора и транзакции. Рассмотрим следующий оператор:

Insert into t values (1);

Кажется вполне очевидным, что строка вставлена не будет, если из-за нарушения требования уникальности этот оператор не выполнится.

Рассмотрим, однако, следующий пример, где при вставке или удалении строки в таблице Т срабатывает триггер, изменяющий значение столбца cnt в таблице Т2:

Если ошибка происходит после срабатывания триггера, должны ли остаться в силе изменения, сделанные триггером? То есть, если триггер сработал, изменив таблицу Т2, а строка не вставлена в таблицу Т, каким должен быть результат? Естественно, не хотелось бы, чтобы значение в столбце cnt таблицы Т2 было увеличено, если строка в таблицу Т не вставлена. К счастью, в Oracle переданный клиентом оператор (INSERT INTO T в данном случае) либо выполняется успешно полностью, либо не выполняется вообще. Это — неделимый оператор.

 

В Oracle неделимость операторов распространяется на любую необходимую глубину. В рассмотренном выше примере оператор INSERT INTOT вызвал срабатывание триггера, изменившего другую таблицу, а для этой таблицы есть триггер, удаляющий строки из еще одной таблицы, и так далее, но в любом случае либо всеизменения выполняются успешно, либо ни одно.Для этого не надо применять специальные приемы кодирования — все работает именно так.

.

Требования целостности и транзакции

По умолчанию требования целостности проверяются после выполнения всего SQL-оператора. Обратите внимание: "SQL-оператора", а не просто "оператора". Если в хранимой процедуре PL/SQL есть несколько операторов SQL, проверка требований целостности каждого оператора выполняется сразу же по завершении его выполнения, а не по завершении выполнения всей хранимой процедуры. Проверка требований целостности может быть программно отложена до завершения транзакции или до момента, когда разработчик сочтет необходимым их проверить.

Итак, почему же требования проверяются после выполнения SQL-оператора, а не при выполнении? А потому, что одному оператору "позволено" кратковременно делать отдельные строки таблицы несогласованными. Попытка получить частичные результаты выполнения оператора приведет к отмене этих результатов сервером Oracle, даже если конечные результаты вполне допустимы.

Версии, начиная с Oracle 8.0, позволяют отложитьпроверку требований. Эта возможность может оказаться крайне полезной при выполнении различных операций. Например, в случае каскадного распространения изменения первичного ключа на внешние ключи. Многие скажут, что этого никогда не придется делать, что первичные ключи должны быть неизменны (и я тоже так скажу), но часто пользователи настаивают на возможности каскадного изменения. Отложенная проверка изменений позволяет это сделать.






ТОП 5 статей:
Экономическая сущность инвестиций - Экономическая сущность инвестиций – долгосрочные вложения экономических ресурсов сроком более 1 года для получения прибыли путем...
Тема: Федеральный закон от 26.07.2006 N 135-ФЗ - На основании изучения ФЗ № 135, дайте максимально короткое определение следующих понятий с указанием статей и пунктов закона...
Сущность, функции и виды управления в телекоммуникациях - Цели достигаются с помощью различных принципов, функций и методов социально-экономического менеджмента...
Схема построения базисных индексов - Индекс (лат. INDEX – указатель, показатель) - относительная величина, показывающая, во сколько раз уровень изучаемого явления...
Тема 11. Международное космическое право - Правовой режим космического пространства и небесных тел. Принципы деятельности государств по исследованию...



©2015- 2020 pdnr.ru Все права принадлежат авторам размещенных материалов.