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

55 Многоверсионная модель согласованности Oracle.

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

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

  • Транзакции read-only – могут содержать только запросы и не могут содержать никаких предложений DML (языка манипулирования данными). В течение транзакции её доступны данные, которые были подтверждены к моменту её начала.

  • Монопольные блокировки таблиц и строк. Если повторяемость чтений необходимо обеспечить в транзакциях, содержащих предложения DML, транзакция может явно запросить разделяемые блокировки по таблицам или монопольные блокировки по тем строкам, которые будут считываться неоднократно.

Где:

DDL – Data Definition Language – язык содержащий набор операторов для определения данных.

DML – Data Modifying Language – язык содержащий набор операторов для модификации данных.

По умолчанию Oracle автоматически блокирует строки, на которые воздействуют операторы INSERT, UPDATE или DELETE; причём блокируются только те строки, на которые фактически оказано воздействие, а не вся таблица или весь блок данных.

Назначение блокировок данных (блокировок DML) - защитить данные таблицы, гарантируя их целостность при одновременном доступе к данным нескольких пользователей. Блокировки данных предотвращают деструктивное взаимодействие одновременных конфликтующих операций DML и операций DDL. Операции DML могут получать блокировки на двух различных уровнях: для конкретных строк и для целых таблиц.

56 Автономные транзакции. Понятие прагмы.

До Огас1е8 не существовало способа, с помощью которого можно было бы завершить некоторые операции SQL в транзакции независимо от остальных операций. OracleSz позволяет делать это посредством авто-

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

Прагма AUTONOMOUSJTRANSACTION

Автономную транзакцию можно выполнить только внутри блока PL/SQL. Блок помечается как автономный с помощью прагмы в разделе объявлений. Прагма указывает компилятору PL/SQL на то, что блок должен обрабатываться как автономный.

Расположение прагмы. ПрагмаAUTONOMOUSJTRANSACTIONдолжна находиться в разделе объявлений блока, причем только одна прагма допускается в блоке. Она может указываться в любом месте раздела объявлений, но хорошим стилем программирования является размещение ее в начале.

Типы автономных блоков. Не все блоки можно пометить как автономные.Это допустимо только для:

• Анонимных блоков верхнего уровня

• Локальных, независимых и модульных подпрограмм

• Методов объектных типов

- Триггеров базы данных

В частности, вложенные блоки PL/SQL не могут быть автономными.Только отдельные подпрограммы в модуле могут помечаться как автономные — сам модуль не может быть автономным.

Свойства автономных транзакций. Автономная транзакция начинается с первой инструкции SQL в автономном блоке и заканчивается оператором COMMIT или ROLLBACK. Любой оператор управления транзакцией может использоваться в автономной транзакции, включаяCOMMIT,ROLLBACK,SAVEPOINT,ROLLBACK TOSAVEPOINTиSETTRANSACTION.

Точки сохранения являются локальными для текущей транзакции. Следовательно, нельзя вернуться к точке сохранения в транзакции-предке.

Завершение автономных транзакций. Автономная транзакция завершается оператором COMMIT или ROLLBACK. Она не заканчивается с завершением содержащего ее блока. Если автономный блок заканчивается без окончания транзакции, то возникает ошибка ORA-6519 и автономная транзакция откатывается.