
- •Классификация субд [5]
- •Функции субд
- •Централизованная архитектура
- •Технология с сетью и файловым сервером (архитектура «файл-сервер»)
- •Технология «клиент-сервер»
- •Трехзвенная (трехуровневая) архитектура
- •Реляционная модель данных
- •Методология idef1x
- •Определение отношения, домена, кортежа, реляционной базы данных, ключей
- •Связи между отношениями (таблицами)
- •Базовые теоретико-множественные операции реляционной алгебры
- •Специальные операции реляционной алгебры
- •Аномалии обновления
- •Первая Нормальная Форма
- •Определение функциональной зависимости
- •Функциональные зависимости отношений и математическое понятие функциональной зависимости
- •Вторая Нормальная Форма
- •Определение
- •3Нф (Третья Нормальная Форма)
- •Алгоритм нормализации (приведение к 3нф)
- •Реляционная модель данных: сравнение нормализованных и ненормализованных моделей.
- •16, Сравнение нормализованных и ненормализованных моделей
- •Null-значения
- •Потенциальные ключи
- •Целостность сущностей
- •Внешние ключи
- •Целостность внешних ключей
- •Замечания к правилам целостности сущностей и внешних ключей
- •Операции, которые могут нарушить ссылочную целостность
- •Для родительского отношения
- •Для дочернего отношения
- •20, Целостность реляционных данных: стратегии поддержания ссылочной целостности.
- •Стратегии поддержания ссылочной целостности
- •Операторы ddl (Data Definition Language) - операторы определения объектов базы данных
- •Create table – создать таблицу
- •Оператор check
- •Определение первичных и альтернативных ключей с помощью оператора alter
- •Операторы drop
- •Выборка данных
- •Сортировка результатов
- •Встроенные функции sql
- •Средства модификации данных языка sql
- •Вставка данных – insert
- •Изменение данных – update
- •Удаление данных – delete
- •Выборка данных
- •Представления
- •Применение представлений
- •Обновление представлений
- •Триггеры
- •Хранимые процедуры
- •Большая безопасность и меньший сетевой трафик.
- •Sql можно оптимизировать
- •Совместное использование кода:
- •Структура памяти эвм
- •Представление экземпляра логической записи
- •Организация обмена между оперативной и внешней памятью
- •Структуры хранения данных во внешней памяти эвм
- •Назначение и проверка полномочий, проверка подлинности
- •Средства защиты базы данных
- •Архитектура системы безопасности ms sql Server
- •34.Роли сервера
- •35, Права доступа
- •36, Необходимость в атомарных транзакциях
- •П , Параллельная обработка транзакций
- •Проблема потерянного обновления
- •Блокировка ресурсов
- •Блокировочная терминология
- •Сериализуемые транзакции
- •Взаимная блокировка
- •Оптимистическая и пессимистическая блокировки
- •Объявление характеристик блокировки
- •Свойства транзакций
- •Атомарность
- •Долговечность или устойчивость
- •Согласованность
- •Изолированность транзакции. Уровни изоляции
- •Типы курсоров
Согласованность
Согласованность может быть на уровне оператора и на уровне транзакции. Во втором случае транзакция может не видеть своих собственных результатов.
Рассмотрим следующий обновляющий SQL-оператор:
Листинг 4
UPDATE КЛИЕНТ
SET КодРегиона = '425'
WHERE Индекс = '98050';
Предположим, что в таблице КЛИЕНТ имеется 500 000 строк, и в 500 из них атрибут Индекс имеет значение «98050». Чтобы найти все эти 500 строк, СУБД потребуется некоторое время. Будет ли на протяжении этого времени разрешено другим транзакциям обновлять поля КодРегиона и Индекс таблицы КЛИЕНТ? Если SQL-оператор является согласованным, такие обновления будут запрещены. Обновление будет применено к набору строк в том виде, в каком они существовали в момент запуска SQL-оператора. Такая согласованность называется согласованностью па уровне оператора (statement level consistency).
Теперь рассмотрим транзакцию, которая содержит два оператора обновления:
Листинг 5
BEGIN TRANSACTION
UPDATE КЛИЕНТ
SET КодРегиона = '425'
WHERE Индекс = '98050'
{прочие действия этой транзакции}
UPDATE КЛИЕНТ
SET Скидка =0.05
WHERE KодРегионa='425'
{прочие действия этой транзакции}
COMMIT TRANSACTION
Что в данном контексте означает термин согласованность? Согласованность на уровне оператора означает, что каждый из двух операторов обрабатывает строки согласованно, но в интервале между ними указанные строки могут изменяться другими пользователями. Согласованность на уровне транзакции (transaction level consistency) означает, что все строки, затронутые любым из SQL-операторов, защищены от изменений на протяжении всей транзакции.
Согласованность на уровне транзакции является настолько сильным средством, что в некоторых его реализациях транзакция не будет видеть свои же собственные изменения. В данном примере второй оператор не будет видеть строк, измененных первым оператором.
Таким образом, согласованность может иметь разные уровни, следует выяснить, какой тип согласованности имеется в виду. Важно всегда помнить и о ловушке, которую может содержать в себе согласованность на уровне транзакции.
Еще более сложной является ситуация с термином изолированность.
44, СВОЙСТВА ТРАНЗАКЦИЙ: ИЗОЛИРОВАННОСТЬ ТРАНЗАКЦИИ, УРОВНИ ИЗОЛЯЦИИ.
Изолированность транзакции. Уровни изоляции
Блокировки предотвращают потерю изменений при параллельной обработке. Тем не менее, существует ряд проблем, которые они предотвратить не в состоянии.
Проблемы при параллельной обработке:
«грязное» чтение,
невоспроизводимое чтение,
фантомное чтение.
«Грязное» чтение (dirty read) – чтение транзакцией записи, которая изменена, но еще не записана в базу данных. Это может произойти, например, когда одна транзакция считывает строку, измененную другой незавершенной транзакцией, а эта другая транзакция впоследствии отменяется.
Невоспроизводимое чтение (nonrepeatable reads) – это ситуация, когда при повторном чтении данных, уже считанных ранее, транзакция обнаруживает модификации или удаления, вызванные другой завершенной транзакцией.
Фантомное чтение (phantom reads) – это ситуация, когда при повторном чтении данных транзакция обнаруживает новые строки, вставленные другой завершенной транзакцией после предыдущего чтения.
В стандарте языка SQL 1992 г. определены 4 уровня изоляции транзакций, которые определяют допустимость перечисленных выше проблем:
незавершенное чтение,
завершенное чтение,
воспроизводимое чтение,
сериализуемость.
Цель состоит в том, чтобы разработчик прикладной программы мог указать желаемый уровень изоляции, а СУБД осуществляла управление блокировками в соответствии с этим указанием.
Как можно видеть из табл. 1, уровень изоляции под названием «незавершенное чтение» (read uncommitted) допускает «грязное» чтение, невоспроизводимое чтение и фантомное чтение. Уровень изоляции «завершенное чтение» (read committed) предотвращает «грязное» чтение. Уровень изоляции «воспроизводимое чтение» (repeatable reads) предотвращает «грязное» чтение и невоспроизводимое чтение. Уровень изоляции «сериализуемость» (serializable) не допускает возникновения ни одной из этих трех проблем.
Таблица 1. Уровни изоляции транзакций
Тип проблемы |
Уровень изоляции изоляции |
|||
Незавершенное чтение |
Завершенное чтение |
Воспроизводимое чтение |
Сериализуемость |
|
«Грязное» чтение |
Возможно |
Невозможно |
Невозможно |
Невозможно |
Невоспроизводимое чтение |
Возможно |
Возможно |
Невозможно |
Невозможно |
«Фантомное» чтение |
Возможно |
Возможно |
Возможно |
Невозможно |
Вообще говоря, чем большие ограничения предусматривает уровень изоляции, тем меньше пропускная способность базы данных, хотя многое зависит от нагрузки и от того, как написаны прикладные программы. Кроме того, не всеми СУБД поддерживаются все четыре уровня изоляции. Могут также различаться способы поддержки и степень нагрузки, которую они возлагают на программиста.
45,
КУРСОР. ТИПЫ КУРСОРОВ.