- •Глава 13. Семантическое моделирование
- •Часть III Проектирование базы данных
- •Часть IV
- •14.1. Введение
- •14.2. Транзакции
- •14.3. Восстановление транзакции
- •14.4. Восстановление системы
- •14.5. Восстановление носителей
- •14.6. Двухфазная фиксация
- •14.7. Поддержка языка sql
- •14.8. Резюме
- •15.1. Введение
- •15.2. Три проблемы параллельности
- •15.3. Блокировка
- •15.4. Устранение трех проблем параллельности
- •15.5. Взаимная блокировка
- •15.6. Упорядочиваемость
- •15.7. Уровни изоляции
- •15.8. Блокировка намерения
- •15.9. Средства языка sql
- •15.10. Резюме
- •Часть V
- •16.1. Введение
- •16.2. Избирательная схема управления доступом
- •16.3. Мандатная схема управления доступом
- •16.4. Статистические базы данных
- •16.5. Шифрование данных
- •16.6. Средства языка sql
- •16.7. Резюме
- •17.1. Введение
- •17.2. Пример выполнения оптимизации
- •17.3. Оптимизация запросов
- •17.4. Преобразование выражений
- •17.5. Статистические показатели базы данных
- •17.6. Стратегия по принципу "разделяй и властвуй"
- •17.7. Реализация реляционных операторов
- •17.8. Резюме
- •18.1. Введение
- •18.2. Обзор концепции трехзначной логики
- •18.3. Некоторые следствия изложенной схемы
- •18.4. Отсутствующие значения и ключи
- •18.5. Внешнее соединение
- •18.6. Специальные значения
- •18.7. Поддержка неопределенных значений в языке sql
- •18.8. Резюме
- •Глава 19
- •19.1. Введение
- •19.2. Иерархия типов
- •19.3. Полиморфизм и заменимость
- •19.4. Переменные и операция присвоения
- •19.5. Специализация по ограничениям
- •19.6. Операции сравнения
- •19.7. Операторы, версии и сигнатуры
- •19.8. Является ли окружность эллипсом
- •19.9. Пересмотр специализации ограничением
- •19.10. Резюме
- •20.1. Введение
- •20.2. Предварительные сведения
- •20.3. Двенадцать основных целей
- •1. Локальная независимость
- •2. Отсутствие опоры на центральный узел
- •3. Непрерывное функционирование
- •4. Независимость от расположения
- •5. Независимость от фрагментации
- •6. Независимость от репликации
- •7. Обработка распределенных запросов
- •8. Управление распределенными транзакциями
- •9. Аппаратная независимость
- •10. Независимость от операционной системы
- •11. Независимость от сети
- •12. Независимость от типа субд
- •20.4. Проблемы распределенных систем
- •Транзакция т1х
- •20.5. Системы "клиент/сервер"
- •20.6. Независимость от субд
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.