- •Санкт-Петербург
- •Часть I. Общие сведения о субд Microsoft sql Server 2000 5
- •Часть II. Администрирование sql Server 2000 116
- •Введение
- •Часть I. Общие сведения о субд Microsoft sql server 2000
- •1.1. Возможности sql server 2000
- •1.2. Компоненты sql server 2000
- •Утилита Server Network
- •Встроенные мастера sql Server 2000
- •1.3. Архитектур бдв среде sql Server 2000
- •Логические компоненты базы данных
- •Режимы сопоставления
- •Идентификаторы пользователей, учетные имена, роли и группы
- •Физическая структура базы данных Страницы и экстенты
- •Файлы и группы файлов баз данных
- •Протокол tds
- •Архитектура обработчика запросов
- •Архитектура памяти
- •Архитектура ввода-вывода
- •Архитектура полнотекстовых запросов
- •Организация транзакций
- •Хранилища данных и оперативная аналитическая обработка (olap)
- •Oltp-системы
- •Olap-системы
- •Архитектура разработки приложений
- •Язык баз данных
- •1.4. Инструменты программирования sql server
- •Окно Query
- •Панель Results
- •Вкладка Grids
- •Окно Object Browser
- •Окно отладчика Transact-sql
- •Окно Object Search
- •Утилита командной строки isql
- •Утилита командной строки osql
- •1.5.Язык transact - sql
- •Операторы Transact-sql
- •Язык определения данных
- •Язык управления данными
- •Язык манипулирования данными
- •Идентификаторы
- •Переменные
- •Функции
- •Встроенные функции
- •Функции получения набора строк
- •Агрегатные функции
- •Скалярные функции
- •Скалярные функции
- •Табличные функции
- •Детерминированность функций
- •Типы данных
- •Выражения
- •Использование операторов в выражениях
- •Элементы языка управления ходом выполнения
- •Обработка оператора select
- •Обработка других операторов
- •Команда go
- •Обработка пакета
- •Хранимые процедуры и триггеры
- •Исполнение хранимых процедур и триггеров
- •Сценарии Transact-sql
- •Часть II. Администрирование sql server 2000
- •2.1. Создание и управление бд sql server 2000
- •Методы создания баз данных sql Server
- •Оператор create database
- •Управление базой данных sql Server
- •Просмотр сведений о базе данных
- •Модификация базы данных
- •Настройка параметров базы данных
- •Удаление базы данных sql Server
- •2.2. Импорт и экспорт данных
- •Использование утилиты Ьср и оператора bulk insert
- •Использование различных форматов данных
- •Использование dts
- •Инструменты dts
- •Задачи dts
- •Соединения dts
- •2.3. Копирование в среде sql server 2000
- •Терминология резервного копирования
- •Резервное копирование с использованием Transact-sql
- •Полное резервное копирование базы данных
- •Резервное копирование файла или группы файлов
- •Репликация
- •2.4. Восстановление в среде sql server 2000 Определение последовательности восстановления данных
- •2.5. Репликация Процесс репликации
- •Репликация моментальных снимков
- •2.6. Проверка подлинности в sql server 2000
- •Проверка подлинности средствами Windows
- •Проверка подлинности средствами sql Server 2000
- •Сравнение типов проверки подлинности
- •Клиентские сетевые библиотеки и проверка подлинности.
- •Выбор режима проверки подлинности для sql Server 2000
- •Проверка подлинности Windows
- •Смешанный режим проверки подлинности
- •Делегирование учетной записи пользователя
- •2.7.Разрешение уровня сервера
- •Фиксированные роли базы данных
- •2.8.1. Оптимизация работы sql server 2000
- •2.8.1. Конфигурация сети
- •2.8.2. Индексы
- •Назначение и структура индексов
- •Кластерные индексы
- •Не кластерные индексы
- •Свойства индекса
- •Уникальный индекс.
- •Составной индекс
- •Коэффициент заполнения и разреженность индекса
- •Порядок сортировки
- •2.8.3. Триггеры
- •Исполнение триггеров
- •2.8.4. Хранимые процедуры
- •Производительность
- •Временные хранимые процедуры
- •Расширенные хранимые процедуры
- •Удаленные хранимые процедуры
- •2.8.5. Представления
- •2.8.6. Мониторинг
- •Утилита System Monitor
- •Утилита Task Manager
- •Утилита sql Profiler
- •Утилита sql Query Analyzer
- •Использование Transact-sql
- •Системные хранимые процедуры
- •Команды dbcc
- •Встроенные функции
- •Флаги трассировки
- •Использование snmp
- •2.9. Системы безопасности
- •Шифрование объектов
- •Список литературы
2.8.4. Хранимые процедуры
Хранимые процедуры позволяют повысить производительность, расширяют возможности программирования и поддерживают функции безопасности, недоступные при использовании команд Transact-SQL, отсылаемых для обработки на сервер. Повышается производительность — за счет локального (по отношению к базе данных) хранения, прекомпиля-ции исходного текста и кэширования. Возможности программирования расширяются благодаря применению таких распространенных средств программирования, как использование входных и выходных параметров, а также благодаря многократному использованию процедур. Функции безопасности подразумевают шифрование текста процедуры и ограничение привилегий. В результате пользователи получают ограниченный доступ к внутренней структуре базы данных, однако им разрешено запускать хранимые процедуры, выполняющие различные действия над базой данных.
Производительность
При пересылке каждой команды (или пакета команд) Transact-SQL на сервер для обработки последний должен определить, есть ли у отправителя права на исполнение этих команд и допустимы ли сами команды. Проверив права доступа и синтаксис команд, SQL Server строит план исполнения запроса.
Хранимые процедуры в данном случае более эффективны. При создании они сохраняются в SQL Server, поэтому при вызове хранимой процедуры ее содержимое сразу же обрабатывается сервером. Один-единственный оператор позволяет вызвать сложный сценарий Transact-SQL, который содержится в хранимой процедуре, что позволяет избежать пересылки через сеть сотен команд.
Перед созданием хранимой процедуры ее команды проходят синтаксическую проверку. Если при этом не обнаружено ни одной ошибки, имя процедуры сохраняется в таблице SysObjects, а ее текст — в таблице SysComments. При первом запуске хранимой процедуры создается план исполнения и хранимая процедура компилируется. В дальнейшем ее обработка осуществляется быстрее, поскольку SQL Server не приходится проверять синтаксис команд, создавать план исполнения и компилировать текст процедуры. До создания нового плана в кэше проверяется наличие существующего плана исполнения.
Примечание Относительный прирост производительности, вызываемый размещением планов исполнения хранимых процедур в кэше процедур, уменьшается, поскольку планы исполнения всех операторов SQL теперь хранятся в кэше процедур. При исполнении оператора Transact-SQL по возможности предпринимается попытка использования существующего плана исполнения.
Созданную хранимую процедуру можно вызвать в любой момент, при возникновении малейшей необходимости. Это обеспечивает модульность и стимулирует повторное использование кода. Последнее облегчает сопровождение базы данных, так как она изолирована от меняющихся бизнес-правил. Модифицировать хранимую процедуру в соответствии с новыми правилами можно в любой момент. После этого все приложения, использующие ее, автоматически придут в соответствие с новыми бизнес-правилами без непосредственной модификации.
Подобно программам, написанным на других языках программирования, хранимые процедуры способны принимать входные параметры, возвращать значения выходных параметров, поддерживать обратную связь с пользователем посредством вывода кодов состояния и текстовых сообщений, а также вызывать другие процедуры. Например, одна хранимая процедура может возвращать другой код состояния, в зависимости от которого последняя выполняет те или иные действия.
Если разработчикам удобно писать сложные программы на таких языках, как C++, то затем эти программы можно вызывать из SQL Server средствами хранимых процедур особого типа, которые называются расширенными хранимыми процедурами.
Хранимую процедуру пишут для решения какой-либо одной задачи — в результате ее можно использовать в нескольких базах данных. Например, хранимая процедура sp_rename предназначена для изменения имен созданных пользователем объектов (например, таблицы, поля или пользовательского типа данных) в текущей базе данных. В одной базе данных ее используют для переименования таблицы, в другой — столбца таблицы и т. д.
Другое важное назначение хранимых процедур — повышение безопасности посредством изоляции и шифрования. Пользователям можно предоставить право на исполнение хранимой процедуры без непосредственного доступа к объектам базы данных, с которыми работает хранимая процедура. Кроме того, если хранимую процедуру зашифровать при создании или модификации, пользователям не удастся прочитать команды Transact-SQL, составляющие процедуру. Эти функции безопасности позволяют изолировать от пользователя структуру базы данных, что обеспечивает целостность данных и надежность базы.
Существует пять классов хранимых процедур: системные, локальные, временные, расширенные и удаленные. Есть и другие способы классификации, но этот позволяет легко описать местонахождение, назначение и возможности хранимой процедуры.
Системные хранимые процедуры находятся в базе данных Master. Как правило, их имена начинаются с префикса sp_. Они предназначены для поддержки функций SQL Server (в частности, процедур для работы с каталогом). К ним относится выборка данных из системных таблиц внешними приложениями, администрирование базы данных и управление безопасностью. Например, средствами хранимой процедуры для работы с каталогом sp_table_privileges можно просматривать привилегии для таблиц. В следующем операторе системная хранимая процедура sp_table_privileges отображает привилегии для таблицы Stores из базы данных Pubs:
USE Pubs
GO
EXECUTE sp_table_privileges Stores
Очень часто администратору требуется просмотреть сведения о пользователях и процессах текущей базы данных. Этот важный этап предшествует закрытию базы данных. Вот каким оператором с помощью системной хранимой процедуры sp_who выводят все процессы пользователя LABI\Administrator:
EXECUTE sp_who @loginame='LAB1\Administrator'
Для большинства организаций, хранящих в базах конфиденциальные данные, весьма важна безопасность баз данных. Далее показан оператор, который с помощью системной хранимой процедуры sp_validatelogins отображает все «зависшие» учетные записи пользователей и групп Windows NT или Windows 2000 (хотя эти записи уже не существуют, им все равно соответствуют элементы системных таблиц SQL Server):
EXECUTE sp_validatelogins
Локальные хранимые процедуры обычно находятся в пользовательской базе данных. Как правило, их создают для решения определенных задач в конкретной базе данных. Локальные хранимые процедуры также позволяют настраивать системные хранимые процедуры. Чтобы создать на основе системной хранимой процедуры пользовательскую процедуру, нужно сделать копию системной хранимой процедуры, а затем сохранить ее как локальную хранимую процедуру.
