Программирование >>  Sql: полное руководство 

1 ... 96 97 98 [ 99 ] 100 101 102 ... 264


Следует отметить, что инструкция set transaction в SQL2 является исполняемой. Вполне допускается, а иногда даже требуется, чтобы одна транзакция в профамме выполнялась в одном режиме, а другая - в другом. В то же время нельзя изменить уровень изоляции и афибут чтения/записи по ходу самой фанзакции. В стандарте фебуется, чтобы инсфукция set transaction стояла первой в фанзакции. Это означает, что она должна выполняться сразу же вслед за инсфукциями commit и rollback либо быть первой в профамме, пока другие инсфукции еще не успели изменить содержимое или сфуктуру базы данных.

Как уже упоминалось ранее, задолго до появления стандарта SQL2 во многих коммерческих СУБД были реализованы собственные схемы блокировки и повышения производительности фанзакции, зафзгивающие ядро самой СУБД и определяющие логику ее работы. Поэтому неудирительно, что поддержка стандарта SQL2 в этой области внедрялась медленно. Например, в СУБД для мэйнфреймов компании IBM (DB2 и SQL/DS) исторически существовало лишь два уровня изоляции - repeat-able read или read committed (по терминологии компании IBM этот уровень на-зьшается режимом стабильности набора записей). В этих СУБД выбор режима осуществляется в процессе разработки профаммы на этапе вьшолнения утилиты bind. Хотя, сфого говоря, эти режимы не относятся непосредственно к языку SQL, выбор режима оказывает сильное влияние на то, каким образом вьшолняется программа и как используются извлеченные ею данные.

В СУБД Ingres предоставляются функциональные возможности, аналогичные уровням изоляции в СУБД компании IBM, но реализованные в другой форме. С помощью инсфукции set lockmode Прикладная профамма задает режим блокировки, который СУБД будет использовать при обработке запроса к базе данных. Можно установить следующие режимы:

нет блокировки - аналогичен уровню read committed, описанному выше;

нежесткая блокировка - аналогичен уровню repeatable read, описанному вьш1е;

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

По умолчанию в СУБД Ingres устанавливается режим нежесткой блокировки, а в СУБД компании IBM - уровень repeatable read (аналогичный ему). В отличие от СУБД компании IBM, где уровни изоляции должны быть выбраны во время компиляции профаммы, в СУБД Ingres режимы блокировки устанавливаются с помощью инструкции SQL; их можно выбирать в процессе выполнения профаммы и даже изменять от запроса к запросу.

Параметры блокировки *

В таких развитых СУЪ]Х, как DB2, SQL/DS, Infomiix, Sybase и SQL Server, применяются механизмы блокировки, которые гораздо сложнее описанных здесь. Адмшгист-рагор базы данных может повысить производительность этих СУБД, устанавливая парамефы блокировки вручную. К типичным настраиваемым парамефам относятся:

Размер заблокированного участка. В некоторых СУБД можно выбрать, что будет блокироваться - таблица, сфаница, сфока или другие участки данных. Для различных прикладных профамм подходящими будут различные размеры заблокированных участков.

Число блокировок. Обычно СУБД позволяет каждой фанзакции иметь офаничен-ное число блокировок. Предел устанавливает администратор базы данных, увеличивая его для сложных фанзакции и уменьшая для простых.



Наращивание блокировок. Часто СУБД автоматически наращивает блокировки, заменяя множество маленьких блокировок одной большой (например, заменяя несколько страничных блокировок блокировкой таблицы). Администратор базы данных также может управлять процессом наращивания.

Интервал блокировки. Если транзакция заблокирована другой транзакцией, она может довольно долго ожидать, пока вторая транзакция снимет свои блокировки. Поэтому в некоторых СУБД реализованы интервалы блокировки. При использовании таких интервалов инструкция SQL завершается неуспешно и возвращает код ошибки SQL, если не может установить требуемые блокировки в течение определенного промежутка времени. Этот промежуток обычно задается администратором базы данных.

Резюме

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

В реляционной СУБД транзакция предстаатяет собой логическую единицу работы. Транзакция состоит из последовательности инструкций SQL, которые СУБД выполняет как одно целое.

Инструкция COMMIT сообщает об успешном завершении транзакции и вносит все изменения в базу данных.

Инструкция ROLLBACK Предлагает СУБД отменить транзакцию и все изменения, уже внесенные в базу данных.

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

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

Иногда конфликт с другой параллельной транзакцией может привести к отмене транзакции не по ее вине. Приложение должно быть готово к решению этой проблемы, если она возникнет.





Структура базы данных

Одной из важных задач SQL является определение структуры базы данных. В четырех последующих главах описываются средства SQL, выполняющие эту задачу. В главе 13 рассказывается, как следует создавать базу данных и ее таблицы. В главе 14 рассматриваются представления, позволяющие по-разному показывать данные различным пользователям. Средства защиты хранимых данных, имеющиеся в SQL, представлены в главе 15. И наконец, в главе 16 рассматривается системный каталог - совокупность системных таблиц, описывающих структуру базы данных.



1 ... 96 97 98 [ 99 ] 100 101 102 ... 264

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика