ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 11.01.2024
Просмотров: 214
Скачиваний: 5
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
рассматриваются два возможных вида аппаратных сбоев: так называемые мягкие сбои, которые можно трактовать как внезапную остановку работы компьютера (например, аварийное выключение питания), и жесткие сбои, характеризуемые потерей информации на носителях внешней памяти.
Примерами программных сбоев могут быть: аварийное завершение работы
СУБД (по причине ошибки в программе или в результате некоторого аппаратного сбоя) или аварийное завершение пользовательской программы, в результате чего некоторая транзакция остается незавершенной. Первую ситуацию можно рассматривать как особый вид мягкого аппаратного сбоя; при возникновении последней требуется ликвидировать последствия только одной транзакции.
Понятно, что в любом случае для восстановления БД нужно располагать некоторой дополнительной информацией. Другими словами, поддержание надежности хранения данных в БД требует избыточности хранения данных.
Наиболее распространенным методом поддержания такой избыточной информации является ведение журнала изменений БД.
Журнал – это особая часть БД, недоступная пользователям СУБД, в которую поступают записи обо всех изменениях основной части БД. В разных СУБД изменения БД журнализуются на разных уровнях: иногда запись в журнале соответствует некоторой логической операции изменения
БД (например, операции удаления строки из таблицы реляционной БД), иногда - минимальной внутренней операции модификации страницы внешней памяти; в некоторых системах одновременно используются оба подхода.
Во всех случаях придерживаются стратегии "упреждающей" записи в журнал (так называемого протокола Write Ahead Log - WAL). Грубо говоря, эта стратегия заключается в том, что запись об изменении любого объекта БД должна попасть во внешнюю память журнала раньше, чем измененный объект попадет во внешнюю память основной части БД. Известно, что если в
СУБД корректно соблюдается протокол WAL, то с помощью журнала можно решить все проблемы восстановления БД после любого сбоя.
Самая простая ситуация восстановления - индивидуальный откат транзакции. Строго говоря, для этого не требуется общесистемный журнал изменений БД. Достаточно для каждой транзакции поддерживать локальный журнал операций модификации БД, выполненных в этой транзакции, и производить откат транзакции путем выполнения обратных операций, следуя от конца локального журнала. В некоторых СУБД так и делают, но в большинстве систем локальные журналы не поддерживают, а индивидуальный откат транзакции выполняют по общесистемному журналу, для чего все записи от одной транзакции связывают обратным списком (от конца к началу).
При мягком сбое во внешней памяти основной части БД могут находиться объекты, модифицированные транзакциями, не закончившимися к моменту сбоя, и могут отсутствовать объекты, модифицированные транзакциями, которые к моменту сбоя успешно завершились (по причине
Примерами программных сбоев могут быть: аварийное завершение работы
СУБД (по причине ошибки в программе или в результате некоторого аппаратного сбоя) или аварийное завершение пользовательской программы, в результате чего некоторая транзакция остается незавершенной. Первую ситуацию можно рассматривать как особый вид мягкого аппаратного сбоя; при возникновении последней требуется ликвидировать последствия только одной транзакции.
Понятно, что в любом случае для восстановления БД нужно располагать некоторой дополнительной информацией. Другими словами, поддержание надежности хранения данных в БД требует избыточности хранения данных.
Наиболее распространенным методом поддержания такой избыточной информации является ведение журнала изменений БД.
Журнал – это особая часть БД, недоступная пользователям СУБД, в которую поступают записи обо всех изменениях основной части БД. В разных СУБД изменения БД журнализуются на разных уровнях: иногда запись в журнале соответствует некоторой логической операции изменения
БД (например, операции удаления строки из таблицы реляционной БД), иногда - минимальной внутренней операции модификации страницы внешней памяти; в некоторых системах одновременно используются оба подхода.
Во всех случаях придерживаются стратегии "упреждающей" записи в журнал (так называемого протокола Write Ahead Log - WAL). Грубо говоря, эта стратегия заключается в том, что запись об изменении любого объекта БД должна попасть во внешнюю память журнала раньше, чем измененный объект попадет во внешнюю память основной части БД. Известно, что если в
СУБД корректно соблюдается протокол WAL, то с помощью журнала можно решить все проблемы восстановления БД после любого сбоя.
Самая простая ситуация восстановления - индивидуальный откат транзакции. Строго говоря, для этого не требуется общесистемный журнал изменений БД. Достаточно для каждой транзакции поддерживать локальный журнал операций модификации БД, выполненных в этой транзакции, и производить откат транзакции путем выполнения обратных операций, следуя от конца локального журнала. В некоторых СУБД так и делают, но в большинстве систем локальные журналы не поддерживают, а индивидуальный откат транзакции выполняют по общесистемному журналу, для чего все записи от одной транзакции связывают обратным списком (от конца к началу).
При мягком сбое во внешней памяти основной части БД могут находиться объекты, модифицированные транзакциями, не закончившимися к моменту сбоя, и могут отсутствовать объекты, модифицированные транзакциями, которые к моменту сбоя успешно завершились (по причине
использования буферов оперативной памяти, содержимое которых при мягком сбое пропадает). При соблюдении протокола WAL во внешней памяти журнала должны гарантированно находиться записи, относящиеся к операциям модификации обоих видов объектов. Целью процесса восстановления после мягкого сбоя является состояние внешней памяти основной части БД, которое возникло бы при фиксации во внешней памяти изменений всех завершившихся транзакций и которое не содержало бы никаких следов незаконченных транзакций. Для того чтобы этого добиться, сначала производят откат незавершенных транзакций (undo), а потом повторно воспроизводят (redo) те операции завершенных транзакций, результаты которых не отображены во внешней памяти.
Для восстановления БД после жесткого сбоя используют журнал и архивную копию БД. Грубо говоря, архивная копия - это полная копия БД к моменту начала заполнения журнала (имеется много вариантов более гибкой трактовки смысла архивной копии). Конечно, для нормального восстановления БД после жесткого сбоя необходимо, чтобы журнал не пропал.
Основы работы с MS Access
Открытие формы при запуске БД в среде MS Access
Взаимодействия пользователя с БД, как правило, не подразумевает возможности исправления структуры БД, а также выполнение пользователем
SQL-запросов напрямую. Обычно внутренняя структура БД скрыта от пользователя, для того, чтобы не было возможности случайно испортить данные в БД. Подобное можно сделать и в MS Access, для чего можно использовать функцию открытия формы при запуске.
Для этого, необходимо выполнить пункты меню: «Сервис» ->
«Параметры запуска», после чего будет открыта форма, для настройки параметров запуска БД, как показано на рис. 4.1
Рисунок 4.1 – Параметры запуска приложения БД в среде MS Access
Теперь, если вы захотите открыть БД в обычном режиме (без параметров запуска), необходимо использовать клавишу SHIFT.
Для восстановления БД после жесткого сбоя используют журнал и архивную копию БД. Грубо говоря, архивная копия - это полная копия БД к моменту начала заполнения журнала (имеется много вариантов более гибкой трактовки смысла архивной копии). Конечно, для нормального восстановления БД после жесткого сбоя необходимо, чтобы журнал не пропал.
Основы работы с MS Access
Открытие формы при запуске БД в среде MS Access
Взаимодействия пользователя с БД, как правило, не подразумевает возможности исправления структуры БД, а также выполнение пользователем
SQL-запросов напрямую. Обычно внутренняя структура БД скрыта от пользователя, для того, чтобы не было возможности случайно испортить данные в БД. Подобное можно сделать и в MS Access, для чего можно использовать функцию открытия формы при запуске.
Для этого, необходимо выполнить пункты меню: «Сервис» ->
«Параметры запуска», после чего будет открыта форма, для настройки параметров запуска БД, как показано на рис. 4.1
Рисунок 4.1 – Параметры запуска приложения БД в среде MS Access
Теперь, если вы захотите открыть БД в обычном режиме (без параметров запуска), необходимо использовать клавишу SHIFT.
Запуск макросов с использованием языка VBA
Макросы могут быть запущены из процедуры, написанной на языке
VBA, так, как показано в примере 4.1
Пример 4.1:
Для запуска макроса из VBA, необходимо выполнить команду
RunMacro, параметром которой указать имя макроса:
Public Function foo4_1()
DoCmd.RunMacro "Macro1"
End Function;
Задание на лабораторную работу №4
Обязательная часть
1. Необходимо реализовать главную форму, запускаемую автоматически при открытии БД (для allauto.mdb). Эта форма должна позволять редактировать данные о а/м в таблице AUTO: добавление, удаление, изменение автомобиля (или автомобилей). При запуске приложения в нормальном режиме не выводить окно базы данных.
2. Реализовать протоколирование – журнал изменений. Должны быть реализованы функции отката изменений БД (таких как добавление, удаление, изменение записи). Для этого организовать специальную форму, позволяющую осуществлять:
• "Откат назад" – откат назад на одно изменение в базе (не активен, если не было изменений или выполнены все откаты назад);
• "Откат вперед" – откат вперед на одно изменение (может быть не активен). Не забудьте проиндексировать таблицу MENU.
Выполнение обязательных пунктов = 55%
Бонус (+ 15%): предусмотреть, что при аварийном завершении программы, существует возможность восстановления всей цепочки отката, и лишь только при "нормальном" завершении работы с программой цепочка отката обнуляется (для этого используйте макросы).
Бонус (+ 30%): Реализовать процедура поиска для главной формы.
"Поиск" - содержит следующие подпункты (функции):
1. "Параметры" - выдается форма, содержащие перечень не менее
3х кодовых полей (любые, из таблицы AUTO). При выборе любого из этих пунктов выдается перечень возможных значений, который может принять данное кодовое поле (выпадающий список значений из menu). У значений могут быть свои подзначения, поэтому необходимо организовать рекурсивную
(или циклическую) процедуру обхода дерева значений (словаря данных) – т.е. для каждого поля выводить не только его значения, но и подзначения. У ВСЕХ ДОЛЖНО БЫТЬ
КОДОВОЕ ПОЛЕ "МАРКА ТРАНСПОРТНОГО СРЕДСТВА".
При выборе значений, заносить их в строку поиска, типа: <код. поле>=<значение> AND
2. "Строка поиска" - выводит на экран содержимое строки поиска.
3. "Очистить строку поиска" - обнуляет строку поиска.
4. "Найти" – поиск записей в таблице auto в соответствии со строкой поиска, если строка поиска пуста, то выводятся все записи.
Все поля, которые используется для поиска, должны быть расшифрованы.
Прием работы
Прием происходит при наличии оформленного отчета и работающей БД, созданной в среде MS Access.
Вопросы
1. Назовите основные функции СУБД.
2. Какие бывают языки взаимодействия с БД?
3. Что такое транзакция?
4. Что такое журнализация?
5. Что понимается под понятием «целостность БД»?
6. Какие бывают виды сбоев? Охарактеризуйте их.
7. Что такое протокол WAL?
Лабораторная работа №5
1 2 3 4 5
Тема: поддержка темпоральности изменяемых данных.
Цель: написание программного интерфейса для хранения изменений данных в БД и организации доступа к ним.
Навыки и умения: протоколирование и работа с изменениями кортежей в БД.
Задание на лабораторную работу №5
Обязательная часть
Реализовать возможность просматривать содержимое базы auto на заданную дату для одного поля. Для этого доработать программу протоколирования (л.р.№4), добавив пункты:
1. "Переход на заданную дату" – выводятся только те данные в базе, которые были актуальны на заданную дату(выводится запрос на ввод даты);
2. "Переход на текущую дату" – аналогично п.1, только на текущую дату время.
В программе должны быть объявлены 2 переменных: текущая дата и заданная дата. При запуске программы спрашивается текущая дата (по умолчанию действительная текущая дата). На экране должна отображаться текущая дата и заданная дата (по умолчанию равна текущей дате).
Процедура поиска ищет данные удовлетворяющее заданному условию и актуальные на дату, указанную в переменной, содержащей заданную дату.
При откате на заданную дату доступен лишь просмотр базы и поиск.
Выполнение обязательного задания = 55%
Бонус (+ 45%): Реализовать возможность просматривать содержимое базы AUTO на заданную дату для всех полей базы.
Прием работы
Прием происходит при наличии оформленного отчета и работающей БД, созданной в среде MS Access.
Вопросы к 5-ой (заключительная л/р для практикума с средой MS
Access) составлены из вопросов к предыдущим лабораторным работам.
Вопросы
1. Что такое база данных?
2. Что такое система баз данных?
3. Что такое система управления базами данных?
4. Основное назначение?
5. Основные компоненты СУБД?
6. Что подразумевает понятие абстрагирование в СУБД?
7. Какие существуют уровни абстракции в структурных данных?
8. Опишите уровень представления
9. Опишите концептуальный уровень
10. Опишите физический уровень
11. Виды связей
12. Что такое отношение (таблица) в реляционной модели СУБД?
13. Что такое домен в реляционной модели СУБД?
14. Что такое атрибут (поле) в реляционной модели СУБД?
15. Что такое картеж (хранимая запись) в реляционной модели СУБД?
16. Что такое первичный ключ?
17. Что такое потенциальный ключ?
18. Что такое внешний ключ?
19. Что такое SQL, назначение языка SQL?
20. Назначение команды SELECT?
21. Что такое внешнее и внутреннее объединение, чем отличаются?
22. Что такое левое, правое и полное объединение?
23. Что такое перекрестный запрос?
24. Как применить агрегатную функцию?
25. Для чего в стандарт SQL2 были введены объединения?
26. Чем отличается использование WHERE от HAVING?
27. Чем отличается использование DISTINCT от группировки?
28. На какие части можно разделить язык SQL, какие команды им соответствуют?
29. Что такое механизм блокировки, какой бывает механизм блокировки?
30. Какие существуют варианты для создания индекса у поля в таблице?
31. Для чего используются индексы?
32. Как обновить несколько полей для нескольких кортежей таблицы одним запросом?
33. Что определяет ключевое слово Constraint?
34. Что такое VBA?
35. Можно ли выполнить добавление данных без указания названия полей, в которые добавляются значения? (почему нельзя или как можно)
36. Для чего необходима блокировка, какие конфликтные ситуации могут возникать при отсутствии блокировок, какие пути выхода из этих ситуаций?
37. Чем отличается блокировка на уровне записей от блокировки на уровне страниц?
38. Назовите основные функции СУБД.
39. Какие бывают языки взаимодействия с БД?
40. Что такое транзакция?
41. Что такое журнализация?
42. Что понимается под понятием «целостность БД»?
43. Какие бывают виды сбоев? Охарактеризуйте их.
44. Что такое протокол WAL?
Лабораторная работа №6
Тема: СУБД PostgreSQL, нетривиальные возможности.
Цель: познакомиться с интерфейсом взаимодействия с PostgreSQL, а также научиться применять некоторые нетривиальные возможности СУБД.
Навыки и умения: работа с psql, создание объектно-реляционных связей, использование ограничений в таблицах, использование массивов, использование последовательностей, backup и restore БД.
Теоретический базис
Знакомство с PostgreSQL
PostgreSQL — объектно-реляционная система управления базами данных (ОРСУБД), разработка которой в различных формах ведется с 1977 года. Работа началась с проекта Ingres в Калифорнийском университете
(Беркли). Затем проект Ingres был переведен на коммерческую разработку в корпорации Relational Technologies/Ingres.
В 1986 году другая группа, которую возглавлял Майкл Стоунбрейкер
(Michael Stonebraker) из Беркли, продолжила работу над Ingres и создала объектно-реляционную
СУБД Postgres. В 1996 году из-за усовершенствования пакета и перехода на распространение с открытыми исходными текстами было принято новое название — PostgreSQL (в течение непродолжительного времени использовалось название Postgres95). В настоящее время над проектом PostgreSQL активно работает группа разработчиков со всего мира.
PostgreSQL считается самой совершенной СУБД, распространяемой на условиях открытых исходных текстов. В PostgreSQL реализованы многие возможности, традиционно встречавшиеся только в масштабных коммерческих продуктах. Проект PostgreSQL распространяется на условиях открытых исходных текстов.
По данным многих тестов проводимых для СУБД PostgreSQL не значительно уступает по своей производительности Oracle (около 15%). При этом одна из самых больших БД в мире – БД Yahoo (в 2008 году объем СУБД составлял два петабайта) работает на модифицированной версии СУБД
PostgreSQL. Одно из самых крупных изменений: ориентация на поколоночное хранение вместо традиционного построчного, что замедляет запись на диск, но обеспечивает лучшую скорость доступа к данным для аналитических целей.
Объектно-реляционная СУБД
PostgreSQL относится к категории объектно-реляционных систем управления базами данных (ОРСУБД). Модель ОРСУБД представляет собой усовершенствование более традиционной модели реляционной системы управления базами данных (РСУБД). В РСУБД логически связанные данные
хранятся в двумерных структурах, называемых таблицами. Данные могут состоять из элементов, относящихся к различным стандартным типам — целые и вещественные числа, символы, строки, дата/время. В таблице элементы данных образуют «решетку» из столбцов (полей) и строк (записей).
Одной из главных особенностей реляционной модели является ее концептуальная простота, причем это может считаться как ее главным достоинством, так и главным недостатком.
Объектно-реляционная специфика PostgreSQL дополняет традиционную реляционную модель данных многочисленными усовершенствованиями. К их числу относится поддержка массивов (хранения нескольких элементов в одном поле), наследования (связей типа «предок—
потомок» между таблицами) и функций (программных методов, вызываемых командами SQL). В PostgreSQL также предусмотрены возможности расширения типов данных и использования процедурных языков.
Вследствие объектно-реляционной ориентации таблицы иногда называются классами, а записи и поля могут соответственно именоваться экземплярами (instances) и атрибутами (attributes).
SQL в PostgreSQL
Система PostgreSQL, как и большинство сетевых СУБД, основана на парадигме «клиент-сервер». Центральное место в PostgreSQL занимает процесс postmaster, предназначенный не для прямого взаимодействия с пользователем, а для обслуживания подключений со стороны различных клиентов.
Существует несколько интерфейсов, через которые клиент подключается к процессу postmaster. В примерах этой книги используется psql — самый универсальный и доступный клиент, входящий в комплект поставки PostgreSQL. Клиент psql работает в режиме командной строки.
В psql существует два способа ввода и исполнения запросов: в интерактивном режиме запросы обычно вводятся непосредственно в приглашении командной строки; команда psql \i читает файл локальной файловой системы и использует его содержимое в качестве входных данных.
Все SQL команды принято записывать в верхнем регистре, а имена таблиц, полей (и т.д.) в нижнем регистре. Если необходимо записать имя таблицы в верхнем (или смешанном) регистре, то необходимо название заключить в двойные кавычки. Это связано с тем, что перед разбором строки запроса сервер postgresql переводит весь запрос в нижний регистр. Для того, чтобы сообщить серверу, что имя таблицы, схемы, поля (или другое) не надо переводить в нижний регистр – служат двойные кавычки. Существует также возможность создавать объекты БД с именами, которые являются ключевыми словами SQL. Для этого также необходимо заключить название объекта в обрамляющие двойные кавычки, как это показано в примере 6.1
Для интерактивной работы с базой в оконном режиме в пакет поставки
PostgreSQL входит утилита PgAdmin.
Одной из главных особенностей реляционной модели является ее концептуальная простота, причем это может считаться как ее главным достоинством, так и главным недостатком.
Объектно-реляционная специфика PostgreSQL дополняет традиционную реляционную модель данных многочисленными усовершенствованиями. К их числу относится поддержка массивов (хранения нескольких элементов в одном поле), наследования (связей типа «предок—
потомок» между таблицами) и функций (программных методов, вызываемых командами SQL). В PostgreSQL также предусмотрены возможности расширения типов данных и использования процедурных языков.
Вследствие объектно-реляционной ориентации таблицы иногда называются классами, а записи и поля могут соответственно именоваться экземплярами (instances) и атрибутами (attributes).
SQL в PostgreSQL
Система PostgreSQL, как и большинство сетевых СУБД, основана на парадигме «клиент-сервер». Центральное место в PostgreSQL занимает процесс postmaster, предназначенный не для прямого взаимодействия с пользователем, а для обслуживания подключений со стороны различных клиентов.
Существует несколько интерфейсов, через которые клиент подключается к процессу postmaster. В примерах этой книги используется psql — самый универсальный и доступный клиент, входящий в комплект поставки PostgreSQL. Клиент psql работает в режиме командной строки.
В psql существует два способа ввода и исполнения запросов: в интерактивном режиме запросы обычно вводятся непосредственно в приглашении командной строки; команда psql \i читает файл локальной файловой системы и использует его содержимое в качестве входных данных.
Все SQL команды принято записывать в верхнем регистре, а имена таблиц, полей (и т.д.) в нижнем регистре. Если необходимо записать имя таблицы в верхнем (или смешанном) регистре, то необходимо название заключить в двойные кавычки. Это связано с тем, что перед разбором строки запроса сервер postgresql переводит весь запрос в нижний регистр. Для того, чтобы сообщить серверу, что имя таблицы, схемы, поля (или другое) не надо переводить в нижний регистр – служат двойные кавычки. Существует также возможность создавать объекты БД с именами, которые являются ключевыми словами SQL. Для этого также необходимо заключить название объекта в обрамляющие двойные кавычки, как это показано в примере 6.1
Для интерактивной работы с базой в оконном режиме в пакет поставки
PostgreSQL входит утилита PgAdmin.