- •Ведение в реляционные субд. Понятие реляционной субд. Сущности Первичный и внешний ключ. Правила построения схемы бд.
- •2. Общая характеристика субд Access. Создание и редактирование базы данных средствами субд Access. Свойства реляционной таблицы. Отношения между таблицами.
- •3.Построение запросов в субд Access. Структура запроса. Условие на значение.Between, In, Like Многотабличные запросы, вычисляемые поля. Групповые операции.
- •4. Запросы с параметрами. Групповые операции. Вспомогательные запросы
- •5. Параметры объединения в запросах. Функция Nz. Параметры объединения в запросах. Перекрестные запросы. Запросы действия.
- •6.Реляционная модель. Операции реляционной алгебры.
- •7. Построение модели «Сущность-связь» Сущности и атрибуты. Категории сущностей. Ключи и индексы. Связи. Улучшение модели.
- •8. Структура стандарта sql Типы данных и операции sql. Агрегирующие функции. Примеры.
- •9 . Формирование запросов средствами sql. Вложенные запросы. Группировка данных. Соединение таблиц. Объединение запросов. Примеры.
- •3. По аналогии с левым можно определить правое внешнее соединение. Перепишем предыдущий пример с использованием его возможностей:
- •10. Модификация данных. Модификация объектов бд. Последовательности. Модификация и удаление таблиц. Примеры использования.
- •Создание таблиц. Ограничения Для создания таблиц базы данных используется оператор, который в простейшем случае описывается так:
- •11. Управление транзакциями. Представления. Управление транзакциями
- •Представления
- •12. .Общая концепция субд «Oracle».
- •13. Язык pl/sql. Основные типы данных и операторы.
- •Структура программы
- •Типы данных
- •14. Курсоры, их атрибуты. Использование цикла for. Курсоры
- •Атрибуты курсора
- •Использование цикла for для работы с курсорами
- •15. Обработка исключений. Пользовательские исключения. Возбуждение исключений.
- •16. Подпрограммы. Пакеты. Хранимые подпрограммы.
- •17. Триггеры Объявление, назначение и примеры использования. Модификация триггеров.
- •18. Администрирование базы данных и управление объектами. Разграничение доступа. Привилегии, роли.
- •Разграничение доступа
- •19. Управление параллельной обработкой данных. Блокировки.
- •20. Функциональные зависимости. Нормализация отношений. Нормальные формы.
- •21. Основные этапы проектирования реляционной базы данных. Концептуальное проектирование. Логическое проектирование. Физическое проектирование.
- •22. Распределенные бд. Хранилища данных. Определение и назначение. Понятие репликации. Варианты архитектуры хд. Гиперкуб. Его назначение и реализация средствами рсубд.
19. Управление параллельной обработкой данных. Блокировки.
При одновременной работе с базой данных нескольких клиентских приложений необходимо предотвращать непредусмотренное влияние действий одного пользователя на действия другого. При этом требования, накладываемые различными пользователями, различны. Например, можно потребовать, чтобы пользовательское приложение получило такие же результаты, как и в случае монопольной работы с базой данных. В других случаях подразумевается, что действия одних пользователей могут влиять на действия других, но ожидаемым образом.
К сожалению, не существует способа управления параллельной обработкой, который бы одинаково хорошо подходил для всех ситуаций. Все эти способы предполагают некоторый компромисс. В общем случае нам надо выбирать между производительностью и защитой данных. В крайних случаях возможно: с помощью механизма блокировок заблокировать данные, используемые одним пользователем, от изменений со стороны других пользователей во время выполнения транзакции. Такая защита надежна, но дорога; не предпринимать никаких действий, связанных с защитой данных, понадеявшись на то, что все будет хорошо, а в случае ошибок их последствия можно исправить вручную. Проблемы параллельной обработки транзакций
При параллельной обработке транзакций возможно возникновение следующих проблем: Потерянное обновление. Предположим, что пользовательское приложение обрабатывает транзакцию, суть которой состоит в следующем: считать значение определенного поля в одной или нескольких строках таблицы в локальную переменную; изменить значение этой переменной; сохранить измененное значение в таблице.
Иными словами, в начале транзакции выполняется оператор SELECT, а в конце – оператор UPDATE. Доступ к промежуточным данным. Предположим, что один из пользователей имеет доступ к промежуточным данным, внесенным в базу данных в процессе выполнения какой-то другой транзакции. Тогда при откате этой транзакции результаты вычислений будут ошибочными. Строки – фантомы. Если одна из транзакций несколько раз выполняет один и тот же запрос, может получиться, что результаты выполнения этого запроса будут различными. Так, может произойти ситуация, когда перед выпиской билета кассир запрашивает количество мест каждого вида (нижних, верхних, боковых и т.д.), а потом спрашивает у покупателя, какое место тот желает. При повторном запросе желаемого места его может и не оказаться!
Блокировка – это механизм, предназначенный для предотвращения некорректного изменения данных при параллельной и асинхронной работе пользователей распределенной системы. Блокировка используется: для обеспечения гарантированной неизменности данных другими пользователями в рамках транзакции; для обеспечения естественного временного порядка изменений, проводимых в базе данных.
Можно заблокировать всю базу данных, отдельную таблицу, строку или набор строк, а также отдельные столбцы таблицы. Размер блокируемого ресурса иногда называют глубиной детализации блокировки. Очевидно, при большей глубине детализации администрирование базы данных выполняется достаточно легко, но в этом случае конфликты из-за блокировки могут наступить гораздо чаще, чем при блокировании, например, отдельных строк. Можно также выполнить монопольную или коллективную блокировку. При монопольной блокировке никакая другая транзакция не может даже прочитать заблокированные данные. При коллективной блокировке данные остаются доступными для чтения, но не для изменения. Различают оптимистические и пессимистические стратегии блокировки. При оптимистической блокировке делается предположение, что конфликта не произойдет. Данные считываются, обрабатываются, обновления заносятся в базу данных. И лишь после этого производится проверка того, не возник ли конфликт. Если конфликта нет, то транзакция завершается. В противном случае транзакция повторяется до тех пор, пока она не сможет успешно завершиться. Пессимистическая блокировка предполагает, что конфликт обязательно произойдет, и нам обязательно надо заблокировать изменяемые записи до начала вычислений. При этом, конечно же, проверка правильности транзакции не нужна.
Одним из неприятных побочных эффектов блокировки является возникновение тупиковых ситуаций. Есть два наиболее распространенных способа решения этой проблемы: не допускать тупиковых ситуаций либо ничего не делать для их предотвращения, но в случае наступления тупиковой ситуации снимать одну из транзакций.
Для блокировки всей таблицы используется оператор LOCK TABLE, а для отдельных строк таблицы – фраза FOR UPDATE в операторе SELECT. Различают следующие типы блокировки:
В режиме SHARE разрешаются запросы, но запрещаются изменения в таблице. Режим EXCLUSIVE разрешает запросы к таблице, но запрещает любые другие действия. ROW SHARE разрешает одновременный доступ к таблице нескольким процессам, но запрещает в дальнейшем одному из них захватить таблицу монопольно. ROW EXCLUSIVE выполняет те же функции, что и ROW SHARE, но запрещает дальнейший захват в режиме SHARE. Этот режим блокировки автоматически устанавливается в операторах модификации данных. SHARE ROW EXCLUSIVE используется для просмотра всей таблицы и разрешает другим пользователям просмотр строк таблицы, но запрещает им блокировать таблицу в режиме SHARE или изменять строки.