
- •Лекция 01: Вводные замечания Основные понятия, принципы и ограничения реляционных баз данных Основные определения
- •Принципы, реализуемые реляционными субд
- •Ограничения реляционных баз данных
- •Реляционная судб ms sql Server
- •Ms sql Server как система управления обработкой транзакций
- •Ms sql Server как система поддержки принятия решений
- •Службы ms sql Server Серверная часть системы
- •Клиентская часть системы
- •Лекция 02: Что делают и за что отвечают администраторы баз данных Microsoft sql Server
- •Инсталляция и конфигурирование
- •Инсталляция программного обеспечения
- •Конфигурирование аппаратуры и программного обеспечения
- •Безопасность
- •Аудит системы
- •Обычная работа
- •Резервное копирование и восстановление
- •Управление пользователями
- •Прочая обычная работа
- •Уровень качества обслуживания
- •Мониторинг и настройки производительности
- •Состав системы и планирование мощности
- •Обеспечение периодов работоспособности системы
- •Планирование периодов неработоспособности
- •Восстановление после аварий
- •Документирование
- •Документация о конфигурации
- •Системный журнал
- •Документация о структуре системы
- •Планы обычного технического обслуживания
- •Планы восстановления после аварий
- •Проектирование и разработка
- •Создание модели данных и анализ
- •Проектирование базы данных
- •Разработка хранимых процедур
- •Разработка приложений
- •Информационная помощь другим сотрудникам
- •Прочие обязанности администратора баз данных
- •Администрирование кластера
- •Работа в службе технических консультаций для пользователей
- •Оценка закупаемого оборудования и программного обеспечения
- •Слежение за мощностью системы
- •Типы данных
- •Значение null
- •Правила порождения идентификаторов
- •Системные таблицы
- •Временные таблицы
- •Пользовательские таблицы
- •Физическая архитектура баз данных
- •Страницы и группы страниц
- •Файлы и группы файлов
- •Лекция 04: Основы программирования в ms sql Server Реляционная алгебра
- •Операции реляционной алгебры
- •Реализация операций реляционной алгебры в языке sql
- •Описание синтаксиса языка Transact-sql Управляющие конструкции
- •Логические операторы
- •Лекция 05: Создание и использование умолчаний, ограничений и правил
- •Умолчания
- •Определение и модифицирование умолчаний с помощью t-sql
- •Оператор create table с атрибутом default
- •Оператор alter table с атрибутом default
- •Оператор create default и процедура sp_bindefault
- •Процедура sp_unbindefault
- •Ограничения
- •Создание и модифицирование ограничений с помощью t-sql Ограничение not null
- •Ограничение unique
- •Ограничение primary key
- •Ограничение foreign key
- •Ограничение check
- •Правила
- •Создание Rule-объекта с помощью t-sql
- •Лекция 06: Создание и использование индексов Что такое индекс?
- •Понятия индексирования
- •Индексные ключи
- •Простые индексы
- •Составные индексы
- •Уникальность индекса
- •Уникальный индекс
- •Неуникальные индексы
- •Типы индексов
- •Кластеризованные индексы
- •Некластеризованные индексы
- •Полнотекстовые индексы
- •Использование коэффициента заполнения для предупреждения расщеплений страниц
- •Создание индексов
- •Использование Management Studio
- •Категория «Общие»
- •Категория «Идентификация»
- •Категория «Конструктор таблиц»
- •Спецификация пространства данных
- •Характеристики заполнения
- •Использование t-sql
- •Лекция 07: Программируемые объекты в ms sql Server Пользовательские функции sql Server
- •Функции Scalar
- •Функции Inline
- •Функции Multistatement
- •Изменение функций
- •Удаление функций
- •Использование sql Server Management Studio
- •Хранимые процедуры
- •Примеры использования хранимых процедур
- •Лекция 08: Другие программируемые объекты ms sql Server Определение триггера в стандарте языка sql
- •Реализация триггеров в среде ms sql Server
- •Примеры использования триггеров
- •Курсоры
- •Запрос курсора
- •Обработка курсоров
- •Преимущества использования курсоров
- •Курсоры базовой таблицы
- •Статические курсоры
- •Последовательные курсоры
- •Последовательные курсоры «только для чтения»
- •Курсоры, управляемые набором ключей
- •Работа с объединениями
- •Правила выбора типа курсора
- •Получение блокировок
- •Неявное преобразование типа курсора
- •Лекция 09: Проектирование системы Microsoft sql Server
- •Системные требования
- •Системное приложение
- •Oltp (системы оперативной обработки транзакций)
- •Dss (системы поддержки принятия решений)
- •Системы пакетной обработки данных
- •Требования
- •Требования к уровню обслуживания
- •Производительность
- •Мощность
- •Обеспечение работоспособности
- •Размещение базы данных
- •Журнал транзакций
- •Файлы данных
- •Приложение
- •Архитектура
- •Производительность и масштабируемость
- •Проектирование системы безопасности
- •Уровни системы безопасности Система безопасности уровня сервера
- •Система безопасности уровня базы данных
- •Права собственности на объект
- •Лекция 10: Microsoft sql Server и Microsoft Cluster Services Разновидности отказов
- •Обзор mscs
- •Основные понятия
- •Компоненты кластера
- •Программное обеспечение mscs для управления кластером
- •Взаимосвязь между серверами
- •Разделяемая дисковая система
- •Подсистемы ввода-вывода
- •Внутренняя raid-система
- •Внешняя raid-система
- •Категории приложений, работающих с кластерами
- •Режимы mscs
- •Активно-пассивные кластеры
- •Активно-активные кластеры
- •Примеры кластеризованных систем
- •Пример 1 – система с высокой готовностью со статическим балансированием нагрузки
- •Пример 2 – система с «горячим резервированием» с максимальной готовностью
- •Пример 3 – кластеризация части сервера
- •Пример 4 – только виртуальные серверы, без переходов по отказам
- •Конфигурирование sql Server для работы на кластере
- •Планирование конфигурации
- •Задание времени восстановления
- •Конфигурирование sql Server для активно-пассивных кластеров
- •Конфигурирование sql Server для активно-активных кластеров
- •Лекция 11: Транзакции и блокировка транзакций
- •Что такое транзакция?
- •Acid-свойства
- •Атомарность
- •Согласованность
- •Изолированность
- •Поведение параллельных транзакций
- •Задание уровня изолированности
- •Устойчивость
- •Режимы транзакций
- •Режим автофиксации
- •Явный режим
- •Фиксирование транзакций
- •Создание вложенных транзакций
- •Неявный режим
- •Откаты транзакций
- •Автоматические откаты
- •Программируемые откаты
- •Точки сохранения
- •Блокировка транзакций
- •Возможности управления блокировками
- •Уровни блокировок
- •Режимы блокировки
- •Разделяемая блокировка
- •Блокировка изменений
- •Монопольная блокировка
- •Блокировка намерения
- •Блокировка схемы
- •Блокировка массовых изменений
- •Блокирование и взаимоблокировки
- •Лекция 12: Управление пользователями и системой безопасности
- •Разрешение удалённого доступа
- •Разрешение удалённых соединений
- •Обеспечение безопасности внешнего доступа
- •Управление доступом к экземплярам sql Server
- •Выбор режима проверки подлинности
- •Настройка режима проверки подлинности
- •Соединение с экземпляром sql Server
- •Предоставление доступа пользователям и группам Windows
- •Предоставление доступа именам входа sql Server
- •Принудительное применение политики паролей
- •Управление разрешениями для экземпляра
- •Получение информации о принадлежности к серверной роли
- •Запрет доступа пользователям
- •Рекомендации по управлению доступом
- •Применение схем и ролей. Общие принципы
- •Управление доступом в службах отчётов
- •Управление доступом в службах уведомлений
- •Управление доступом в интеграционных службах
- •Управление доступом в службах репликации
- •Управление доступом для sql Server Agent
- •Управление доступом для Database Mail
- •Управление доступом к базе данных с помощью протокола http
- •Лекция 13: Репликации
- •Что такое репликация базы данных?
- •Понятия репликации Компоненты репликации
- •Издатели
- •Дистрибьюторы
- •Подписчики
- •Типы репликации
- •Репликация моментальных снимков
- •Репликация транзакций
- •Репликация слиянием
- •Данные репликации
- •Публикации
- •Push-подписка и pull-подписка
- •Push-подписка (принудительная)
- •Pull-подписка (по запросу)
- •Агенты репликации
- •Snapshot Agent (Агент создания снимков состояния)
- •Репликация слиянием
- •Репликация моментальных снимков
- •Лекция 14: Средства автоматического администрирования
- •Средства автоматического конфигурирования sql Server
- •Динамическое управление памятью
- •Как действует динамическое управление памятью
- •Пул памяти
- •Параметры конфигурирования памяти sql Server
- •Другие параметры динамического конфигурирования
- •Параметр locks (блокировки)
- •Параметр recovery interval (интервал восстановления)
- •Параметр user connections (количество соединений с пользователями)
- •Статистика
- •Команда create statistics
- •Процедура sp_createstats
- •Команда update statistics
- •Процедура sp_autostats
- •Контрольные точки
- •Планы обслуживания баз данных
- •Использование мастера для создания плана обслуживания
- •Лекция 15: Автоматизация административных задач с помощью службы sqlServerAgent
- •Задания
- •Создание задания в Management Studio
- •Использование t-sql
- •Просмотр журнала выполнения задания
- •Использование Management Studio
- •Использование t-sql
- •Предупреждения
- •Протоколирование сообщений в журнале событий
- •Создание предупреждения о событии sql Server
- •Создание предупреждения о производительности sql Server
- •Операторы
- •Лекция 16: Резервное копирование Microsoft sql Server
- •Воспроизведение
- •Отказы системы
- •Отказы оборудования
- •Отказы программного обеспечения
- •Человеческие ошибки
- •Журнальное протоколирование в sql Server Журнал транзакций
- •Поток откладываемой записи
- •Последовательная запись в журнал
- •Размер журнала транзакций
- •Воспроизведение с помощью журнала транзакций
- •Свойства журнала транзакций
- •Непротоколируемые операции
- •Bulk copy и программа bcp
- •Текстовые операции
- •Контрольные точки
- •Операции контрольной точки
- •Конфигурирование интервала между контрольными точками
- •Методы резервного копирования
- •Полное резервное копирование
- •Разностное резервное копирование
- •Резервное копирование журнала транзакций
- •Резервное копирование группы файлов
- •Резервное копирование файла данных
- •Комбинирование разностных резервных копий и резервных копий журнала транзакций
- •Выполнение резервного копирования
- •Создание логических устройств резервного копирования
- •Создание устройств резервного копирования с помощью t-sql
- •Создание удалённого устройства резервного копирования
- •Резервное копирование с помощью Management Studio
- •Лекция 17: Полная модель восстановления
- •Модель восстановления с неполным протоколированием
- •Восстановление базы данных из резервных копий
- •Извлечение информации резервного копирования
- •Восстановление базы данных через интерфейс среды sql Server Management Studio
- •Восстановление базы данных при простой стратегии резервного копирования с использованием t-sql
- •Восстановление базы данных при полной стратегии резервного копирования с использованием t-sql
- •Восстановление системных баз данных
- •Восстановление базы данных master
- •Восстановление баз данных msdb и model
Физическая архитектура баз данных
Физическая архитектура включает в себя:
описание файлов данных и журнала транзакций;
их первоначальный размер, шаг прироста, максимальный размер, параметры конфигурации и т. д.
При использовании базы данных пользователь работает прежде всего с логическими компонентами, такими как таблицы, представления, процедуры и т. п. Рассмотрим, как физически устроены и как хранятся логические компоненты баз данных. Каждая копия SQL Server имеет четыре системных базы данных (master, msdb, tempdb и model) и две или более пользовательских базы данных. Набор системных баз постоянен и не может изменяться. Более того, также не разрешено изменение имён этих баз данных. По-хорошему, пользователь вообще не должен напрямую обращаться к системным базам данных, а использовать для работы с ними только специально разработанные для этого интерфейсы. К таким интерфейсам относятся системные хранимые процедуры, утилита SQL Server Management Studio и программные интерфейсы SQL (API).
При соединении с SQL Server организуется связь с конкретной базой данных на сервере. Эта база данных называется текущей базой данных. Обычно пользователь соединяется с базой данных, определённой системным администратором, хотя при необходимости можно использовать интерфейс API, для связи с другой базой данных. Пользователю предоставляется возможность переключаться между подсоединёнными к серверу базами данных с помощью соответствующих команд или указанного интерфейса.
SQL Server позволяет отсоединять базы данных от одной копии SQL Server, а затем подсоединять их к другой копии или подсоединять их обратно к той же копии. База данных хранится в отдельных файлах. Кроме того, база данных и журнал транзакций хранятся отдельно, что повышает надёжность системы. Если произойдет сбой, и файлы базы данных будут повреждены, то можно восстановить базу данных из резервной копии, а затем восстановить сделанные изменения из журнала транзакций, который останется неповреждённым. Каждая база данных имеет, минимум, два файла: один для журнала транзакций и один для базы данных. Эти файлы имеют различную структуру, и при работе с ними применяются разные правила.
Страницы и группы страниц
Основная единица хранения данных на уровне файла базы данных – это страница (page). В виртуальной системе хранения SQL Server страница представляет собой блок фиксированной длины, обрабатываемый при дисковых операциях ввода-вывода как единое целое. Если пользователь обращается к одной строке данных, с диска будет считана вся страница, даже если в ней помимо требуемой строки записано ещё 20 других строк, поскольку место в базе данных выделяется страницами. В SQL Server размер страницы равен 8 Кбайт, соответственно в одном мегабайте содержится 128 страниц. Файлы журнала транзакций не имеют страниц и экстентов. Они содержат только последовательность записей транзакций, выполняемых в базе данных.
Каждая страница имеет объем 8192 байт. Первые 96 байт страницы отводятся под заголовок, в котором хранится системная информация о типе страницы, объёме свободного места на странице и идентификационном номере объекта (таблицы или индекса), являющегося владельцем страницы (ID object owner).
Имеется шесть типов страниц:
Data – используются для хранения всех данных, кроме данных типа text, ntext и image;
Index – используются для хранения информации об индексировании таблиц;
Text/Image – используются для хранения данных типа text, ntext и image;
Global Allocation Map (GAM) – хранят информацию об использовании экстентов (групп страниц);
Page Free Space – хранят информацию о свободном пространстве на страницах;
Index Allocation Map (IAM) – хранят информацию об экстентах, используемых таблицами или индексами.
Страницы типа Data содержат информацию о данных, исключая данные типа text, ntext и image. Для каждой строки данных таблицы на странице выделяется фиксированное пространство, куда заносятся данные из полей строки. Строки располагаются на странице последовательно сразу же после заголовка. В конце каждой страницы имеется таблица смещений строк (row offset table), в которой указывается смещение начала каждой строки относительно начала страницы. Смещения строк располагаются в порядке, обратном порядку размещения строк на странице (Рис.3.1).
рис 3.1. Структура страницы данных
Страница является минимальным блоком, который сервер выделяет для хранения данных. Для более эффективного управления страницами SQL Server использует группы страниц, или экстенты (extent). Экстент является базовым блоком хранения данных таблиц и индексов, то есть экстент существует только для страниц типа Data, Index и Text/Image. Каждый экстент содержит 8 страниц и занимает 64 Кбайт. Каждая страница, имеет своего владельца (таблицу, индекс и т. д.). В зависимости от того, принадлежат ли все страницы одному владельцу, используется один из двух типов экстентов:
Mixed – экстенты этого типа могут содержать страницы, принадлежащие разным владельцам (таблицам, индексам), что позволяет сократить расход свободного пространства; например, если в таблице содержится всего несколько строк и они занимают не более половины страницы, было бы нецелесообразно выделять для хранения строк этой таблицы целый экстент, так как 74% выделенного пространства было бы не использовано; первоначально для таблицы или индекса выделяется экстент типа Mixed;
Uniform – когда для хранения данных одного владельца выделено 8 страниц в различных экстентах типа Mixed, они автоматически объединяются в экстент типа Uniform; в результате данные в таблице становятся более упорядоченными, что позволяет оптимизировать операции дискового ввода-вывода, ускоряет операции поиска и массивного обновления; экстент типа Uniform всегда содержит страницы одного владельца (Рис. 3.2).
рис 3.2. Структура экстентов
С помощью страниц типа Global Allocation Map (GAM) MS SQL Server хранит информацию о свободных экстентах. При этом используется два типа битовых страниц:
Global Allocation Map (GAM) – страницы этого типа хранят информацию о том, используется ли конкретный экстент для хранения данных или он пуст; каждый бит в GAM соответствует одному экстенту; если бит установлен в 1, то экстент свободен и может быть выделен для хранения данных; одна страница GAM хранит информацию об использовании 64 000 экстентов, что соответствует примерно 4 Гбайт данных;
Shared Global Allocation Map (SGAM) – подобно GAM, одна страница типа SGAM может описать 64 000 экстентов; каждый бит страницы соответствует одному экстенту; если бит для конкретного экстента установлен в 1, то этот экстент имеет тип Mixed и, как минимум, одна страница в этом экстенте свободна и может быть использована; если бит установлен в 0, то либо экстент имеет тип Uniform, либо все страницы экстента типа Mixed заняты.
Битовые поля GAM и SGAM позволяют быстро найти свободную страницу в экстенте типа Mixed и упрощают управление информацией об использовании экстентов. Кроме того, применение двух самостоятельных полей позволило уменьшить объём управляющей информации и повысить производительность. Поля GAM и SGAM используются совместно, дополняя друг друга. Для каждого участка длиной в 4 Гбайт выделяется по одному полю GAM и SGAM. Если экстент был заполнен полностью, но после удаления строк одна страница освободилась, то достаточно установить в единицу соответствующий бит в поле SGAM. Если же экстент освобождается полностью, то в поле GAM устанавливается в единицу бит, соответствующий нужному экстенту. Для выделения экстента типа Mixed сервер ищет в поле GAM бит, установленный в 1, и устанавливает его в 0, затем в поле SGAM устанавливает соответствующий бит в 1 (если не все страницы экстента заняты полностью) или в 0 (все страницы экстента заняты). Для выделения экстента типа Uniform сервер ищет в поле GAM бит, установленный в 1, и устанавливает его в 0. В поле SGAM соответствующий бит устанавливается в 0.
На основании вышесказанного можно сделать вывод, что битовые поля GAM и SGAM используются только для быстрого выделения страниц. Хранимая в них информация не даёт ответа, какому объекту принадлежит экстент.
Битовые поля GAM и SGAM содержат информацию только о том, используется ли конкретная страница. Для хранения информации о количестве свободного пространства на страницах типа Data, Index и Text/Image используются страницы типа Page Free Space (PFS). Каждая такая страница содержит информацию о свободном пространстве для 8000 страниц. Каждый байт страницы PFS соответствует отдельной странице и может описывать следующие состояния:
страница не используется (0 % занято);
страница заполнена на 1 – 50 %;
страница заполнена на 51 – 80 %;
страница заполнена на 81 – 95 %;
страница заполнена на 96 – 100 %.
Страницы PFS используются для быстрого поиска страниц, имеющих необходимое количество свободного пространства. Предположим, что необходимо записать 17 строк данных. Имеется последовательный набор страниц, имеющих свободное пространство для хранения соответственно 7, 4, 9, 23 и 3 строк данных. Если записывать строки последовательно, начиная с первой свободной страницы, то чтобы сохранить 17 строк, понадобится три страницы (7+4+9). В худшем случае нужно выполнить три операции дискового ввода-вывода (если страницы не кэшированы). Если же записывать данные сразу в четвёртую страницу, имеющую место для хранения 23 строк, то понадобится всего одна операция дискового ввода-вывода. Если для поиска страницы, имеющей достаточно свободного пространства, последовательно считывать с диска все страницы, это может занять много времени. При использовании страниц PFS поиск свободных страниц становится очень эффективным, так как сервер перебирает только страницы PFS.
Страницы PFS облегчают поиск свободных страниц, но они не имеют информации о том, какому владельцу принадлежит та или иная страница. Для отслеживания информации о страницах, принадлежащих одному объекту-владельцу, используются страницы типа Index Allocation Map (IAM). Для каждого владельца создаётся минимум одна страница IAM. Каждая страница IAM имеет заголовок, в котором хранится информация об идентификационном номере объекта-владельца страниц, а также смещение первого экстента, с которого начинается область IAM. Страницы IAM создаются при необходимости и могут располагаться в произвольном месте файла. Структура IAM представлена битовым полем, каждый из битов которого описывает единственный экстент. Если бит установлен в 1, то соответствующий экстент содержит страницы, принадлежащие описанному в IAM владельцу. Если же бит установлен в 0, то данный экстент не имеет страниц, принадлежащих нужному владельцу.
Каждая страница IAM покрывает диапазон размером 64 000 экстентов, начиная с указанного в заголовке первого экстента. Если объект-владелец имеет принадлежащие ему экстенты за пределами области, охватываемой одной страницей IAM, то создаются дополнительные страницы IAM, которые связываются в список. Каждая страница IAM в списке, кроме последней страницы, имеет ссылку на следующую в списке страницу IAM. Если владельцу принадлежат экстенты в разных файлах базы данных, то в каждом таком файле создаётся, минимум, одна страница IAM. Страницы в разных файлах также связываются в цепочку (Рис.3.3).
рис 3.3. Организация цепочек страниц
При необходимости вставить несколько строк в таблицу SQL Server просматривает страницы IAM для поиска экстентов, содержащих принадлежащие этой таблице страницы. Когда экстент найден, просматриваются соответствующие страницы PFS для поиска свободных страниц. Если ни одна из страниц не имеет достаточного места для вставки требуемого количества строк, то для объекта (в данном случае - для таблицы) выделяется новый экстент. Причём если база данных имеет несколько файлов, экстенты выделяются в каждом файле в равных пропорциях. Например, если база данных содержит два файла и второй файл в три раза больше первого, то при выделении одного экстента в первом файле во втором файле будет выделено три экстента. Это сделано для того, чтобы файлы базы данных заполнялись равномерно.
Как видно из всего вышесказанного, MS SQL Server имеет очень эффективную структуру хранения данных, обеспечивающую высокую скорость операций создания, поиска и удаления строк данных.
Каждый файл данных базы данных имеет приблизительно одинаковую физическую структуру. Все страницы в файле нумеруются последовательно, начиная с 0 для самой первой страницы. Каждый файл базы данных имеет уникальный идентификационный номер (ID). Комбинация номера страницы и идентификационного номера файла позволяет однозначно идентифицировать страницу в базе данных. В начале файла располагается страница заголовка файла (стр. 0), в которой хранятся атрибуты файла. Сразу же за ней располагается страница PFS (стр. 1), в которой хранится информация об использовании страниц в экстенте. Затем располагаются страницы битовых полей GAM (стр. 2) и SGAM (стр. 3). Страницы ТАМ создаются в любом месте файла. На каждые 8000 страниц данных создается новая страница PFS. Страницы GAM и SGAM создаются на каждые 64 000 экстентов, или на каждые 512 000 страниц.