Скачиваний:
82
Добавлен:
02.05.2014
Размер:
2.28 Mб
Скачать

14.7. Поддержка языка sql

В этом разделе кратко рассматриваются средства поддержки работы с транзакциями в языке SQL и, в частности, процедур восстановления на основе транзакций. Прежде всего, в языке SQL поддерживаются обычные операции COMMIT и ROLLBACK (с необязательным допол-

нительным ключевым словом WORK в обоих случаях, описанным выше, в главе 4). Для каждо- го открытого курсора эти операции принудительно выполняют операцию CLOSE (закрыть), что вызывает потерю всей имевшейся информации о позиционировании базы данных.

Замечание. В некоторых версиях языка SQL предусмотрена возможность защиты от ав- томатического выполнения операции CLOSE (для операции COMMIT, но не для ROLLBACK) и вызванной этим потери информации о позиционировании. Например, в СУБД DB2 при объявлении курсора допускается использование опции WITH HOLD. В результате при выпол- нении операции COMMIT подобный курсор не закрывается, а остается открытым и позицио- нированным таким образом, что выполнение очередной команды FENCH вызовет перемеще- ние к следующей строке последовательности. В данном случае при выполнении следующей операции OPEN не потребуется вновь обрабатывать код (возможно, очень сложный), пред- назначенный для восстановления утраченной информации о позиционировании. Такая воз- можность в настоящее время включена в версию стандарта SQL3 (см. приложение Б).

Важное различие между способом поддержки средств работы с транзакциями в языке SQL и общими концепциями, обсуждавшимися в этой главе, состоит в том, что язык SQL не имеет никакого явного оператора BEGIN TRANSACTION. Вместо этого транзакция неяв- но начинается всякий раз, когда программа выполняет операцию инициализации тран- закции при условии отсутствия уже выполняющейся транзакции. (Подобно описанной выше возможности сохранения информации о позиционировании, вполне вероятно, что поддержка явной операции BEGIN TRANSACTION станет в языке SQL стандартной. В на- стоящее время она включена в состав версии стандарта SQL3.) Подробное описание опе- раций инициализации транзакции здесь не приводится; достаточно сказать, что операции определения данных и манипулирования ими, обсуждавшиеся в предыдущих главах, от- носятся к операциям инициализации, а операции COMMIT и ROLLBACK, очевидно, нет. Специальный оператор SET TRANSACTION используется для задания характеристик тран- закции, которая будет инициализирована. (Оператор SET TRANSACTION может выполнять- ся только тогда, когда не выполняются никакие транзакции, и сам по себе он не является инициализирующим транзакцию оператором.) Здесь мы обсудим только две из сущест- вующих характеристик: режим доступа и уровень изоляции. Ниже показан общий син- таксис этого оператора.

SET TRANSACTION <стсок опций> ;

Здесь параметр <список ощий> включает режим доступа, уровень изоляции или и то, и другое.

  • Режим доступа может быть либо только для чтения (READ ONLY), либо для чтения и записи (READ WRITE). Если ничего не оговорено, то по умолчанию используется значение READ WRITE. Если оговорен уровень изоляции READ UNCOMMITTED, то по умолчанию используется значение READ ONLY. Если применяется значение READ WRITE, то значение READ UNCOMMITTED не может использоваться при определении уровня изоляции.

  • Уровень изоляции определяется в виде ISOLATION LEVEL <изоляция>, где пара- метр изоляция может иметь одно из следующих значений: READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ или SERIALIZABLE. Более подробные пояснения приведены в главе 15.

Соседние файлы в папке Дейт К. Дж. Введение в системы баз данных [7 издание]