This content was uploaded by our users and we assume good faith they have the permission to share this book. If you own the copyright to this book and it is wrongfully on our website, we offer a simple DMCA procedure to remove your content from our site. Start by pressing the button below!
Microsoft SQL Server 2000. Новейшие технологии. — М.: Издатель скоторговый дом «Русская Редакция», 2001. — 576 стр.: ил.
ISBN 5750201546 Книга посвящена Microsoft SQL Server 2000 — новой версии флагманс кой СУБД Microsoft, представляющей собой законченное решение для пост роения приложений управления данными, анализа и масштабируемых Web приложений. Являясь ключевым компонентом Windows DNA, SQL Server 2000 обеспечивает высокую скорость разработки и развертывания приложений элек тронной коммерции, обработки данных, создания информационных храни лищ. Настоящее издание опирается на опыт, приобретенный разработчиками и администраторами во время работы с предыдущей версией: SQL Server 7.0. В книге рассматриваются основные нововведения SQL Server 2000: новые типы данных, расширенная поддержка Интернеттехнологий (XML, доступ к серве ру по HTTP), новые средства разработки приложений и возможности языка программирования Transact SQL. Богато иллюстрированное издание состоит из 10 глав, 4 приложений, сло варя терминов и предметного указателя. Компактдиск, прилагаемый к книге содержит пробную версию Microsoft SQL Server 2000 и примеры из книги. УДК 004 ББК 32.973.26018.2
ActiveX, JScript, Microsoft, Microsoft Press, MSDN, MSDOS, PowerPoint, Visual Ba sic, Visual C++, Visual InterDev, Visual SourceSafe, Visual Studio, Win32, Windows и Windows NT являются товарными знаками или охраняемыми товарными знаками корпорации Microsoft в США и/или других странах. Все другие товарные знаки яв ляются собственностью соответствующих фирм. Все названия компаний, организаций и продуктов, а также имена лиц, используемые в примерах, вымышлены и не имеют никакого отношения к реальным компаниям, организациям, продуктам и лицам.
От автора Глава 1 Установка SQLServer 2000 Прежде чем начать Требования к компьютеру Требования к операционной системе Установка Установка с нуля Дисковая подсистема Выбор дисковой подсистемы для SQL Server RAID 0 RAID 1 RAID 5 RAID 10 Дисковые контроллеры Число дисков в массиве Учетные записи, под которыми исполняются службы SQL Server Сетевые параметры Порядок сортировки Порядок слияния по Windows Порядок слияния по SQL Server Сортировка и слияние по умолчанию Если установка не удалась Что делать, если чтото не работает Электронная документация Каталоги после установки Установка удалась! Как проверить результаты установки Средства работы с SQL Server Графические утилиты Утилиты командной строки (каталог Binn) Вопросы совместимости версий, миграция Два сервера на одном компьютере Перенос баз данных предыдущих версий Перенос БД версии 7.0 Перенос БД SQL Server6.5 Перенос БД SQL Server6.0 Заключение
Глава 2 Управление сервером Консоль администрирования Когда лень думать, или «Мастера вызывали?» Регистрация нового сервера Интерфейс ММС Параметры настройки SQL Server Вкладка General Вкладка Memory Вкладка Processor Вкладка Security Вкладка Connections Вкладка Server Settings Вкладка Database settings Параметры SQL Server Agent Вкладка General Вкладка Advanced Вкладка Alert system Вкладка Job system Вкладка Connection Стандартные операции Подключение и отключение от сервера Новые и модифицированные компоненты SQL Server Средства мониторинга SQL Server Profiler Воспроизведение и анализ ранее записанных событий Программирование SQL Server Profiler Монитор производительности Что мерить и как анализировать Работа с памятью Встроенные средства анализа Создание страховочных копий Создавайте копии почаще Что Куда Когда и как После модификации базы данных Master После модификации базы данных Msdb После модификации базы данных Model Копирование должно быть регулярным После создания новой базы данных После создания индексов
После очистки журнала транзакций После выполнения операций, не отображаемых в журнале транзакций Режимы создания страховочных копий Постоянные файлы для хранения страховочных копий . . . . Плюсы постоянного файла Временные файлы для хранения страховочных копий Зачем нужны временные файлы Использование нескольких файлов для хранения копий Создание страховочных копий на ленту Специфика копирования на ленту Типы страховочных копий Полная копия базы данных Дифференциальная копия Копия журнала транзакций Как SQL Server копирует журнал транзакций TRUNCATE_ONLY NO_LOG NO_TRUNCATE Страховочная копия файла или группы файлов базы данных Стратегия полного копирования базы данных Стратегия полного копирования базы данных и последующего копирования журнала транзакций Стратегия создания дифференциальных копий базы данных Стратегия создания копий индивидуальных файлов или групп Создание страховочных копий и производительность .. Восстановление страховочных копий Автоматическое восстановление Подготовка к восстановлению базы данных из копии Установите режим dbo use only Создайте копию журнала транзакций Работайте в контексте базы данных Master Что делает SQL Server в процессе восстановления Проверяет Заново создает базу данных и все связанные с ней файлы Параметры команды восстановления FILE MOVE TO REPLACE
Microsoft SQL Server 2000. Новейшие технологии Инициализация процесса восстановления ................... Восстановление различных типов страховочных копий ....... Восстановление базы данных из полной копии ........... Когда используется ................................. Восстановление дифференциальной копии ............... Восстановление копии журнала транзакций .............. Когда использовать копию журнала .................. Восстановление журнала транзакций на определенный момент времени ....................................... Восстановление копии индивидуальных файлов или группы файлов ...... .................................. Использование резервного сервера ......................... Замена основного сервера резервным .................... Портирование журнала транзакций ...................... Восстановление поврежденных системных баз данных ....... Использование графического интерфейса для создания и восстановления страховочных копий базы данных .......... Создание страховочной копии .......................... Восстановление из копии ............................... Заключение ................................................. Глава 3 Управление базами данных .................. Базы данных SQL Server и уровни совместимости ............... Уровни совместимости и поведение БД ..................... Таблицы SQL Server ......................................... Новые типы данных ....................................... SQL_Variant ........................................... Bigint ................................................. Table ................................................. Модификация структуры таблицы ....................... Добавление нового поля ............................. Графический интерфейс построения таблиц и представлений .......................................... Представления: простые и распределенные ..................... Обычные (почти обычные) представления ................... Распределенные представления ............................ Информационные представления .......................... Индексы ................................................. Индексы на представление ................................ Создание хранимых процедур и триггеров ...................... Хранимые процедуры ..................................... Зачем нужны хранимые процедуры ......................
Недокументированные хранимые процедуры sp_MSexists_file sp_MSget_oledbinfo xp_dsninfo xp_enumdsn sp_MSindexspace sp_MSscriptdatabase sp_MSuniquename sp_MSdbuseraccess sp_MShelpindex xp_availablemedia xp_dirtree Манипулирование системным реестром Шифрование Как узнать параметры, необходимые расширенной процедуре Триггеры AFTERтриггер Instead ofтриггер Пользовательские функции Дополнительная информация об объектах БД Расширенные свойства объектов Взаимосвязь объектов Генерация сценариев Query analyzer Оптимизация индексов средствами Index Tuning Wizard SQLDMO Создание объектов БД средствами SQL DMO Заключение Глава 4 Управление системой безопасности Обзор системы безопасности SQL Server 2000 Контроль прав доступа Как SQL Server проверяет права доступа Подключение под именем пользователя Windows NT Подключение под именем пользователя SQL Server Что дальше Стандартные идентификаторы пользователя Стандартные учетные имена Роли Роль Public
Microsoft SQL Server 2000, Новейшие технологии Прикладная роль ......................................... Активизация прикладной роли .......................... Типы разрешений ......................................... Разрешение на выполнение SQLвыражений ............. Разрешение на действия с объектами ....................... Разрешение на работу с таблицами и представлениями . . . . Разрешение на доступ к определенным полям ............ Разрешение на исполнение хранимых процедур .......... Предполагаемые разрешения ........................... Разрешения, которыми обладает владелец объекта ........ Команды управления правами доступа ...................... Как отобрать то, что ранее дано, или вернуть отобранное ..... Групповое управление именами регистрации ................ Разграничение доступа средствами представлений и хранимых процедур ........................ ............. Мастер создания нового пользователя ...................... Графический интерфейс управления правами доступа ........ Манипулирование объектами системы безопасности средствами хранимых процедур и SQL DMO ................. Покой нам только снится ..................................... С2 — это возможно ....................................... Заключение .................................................
Глава 5 Задания, оповещения, операторы ............. Подсистема исполнения заданий .............................. Создание заданий и индивидуальных шагов для них ............. Оповещения ................................................ Операторы .................................................. Мастер сопровождения базы данных ........................... Подсистема рассылки почтовых сообщений .................... SQL DMO: работа с объектами подсистемы исполнения заданий ......................................... Заключение .................................................
275 276 276 284 289 291 300
Глава б Групповое управление серверами ............. Зачем нужно групповое управление серверами ............... Сценарии использования ..................................... Сценарий 1 ............................................... Сценарий 2 ............................................... Обзор архитектуры ........................................... Администрирование нескольких серверов ......................
305 305 307 307 307 308 311
261 262 263 268 272 273 274
301 304
www.books-shop.com
Оглавление
IX
Концептуальная модель Физическая модель Определения таблиц Хранимые процедуры Как это работает Генерация задания удаленному серверу (на контроллере) Размещение инструкций (на контроллере) Обработка серверомучастником загруженной информации Последовательность исполнения задания серверомучастником Обработка задания Размещение заданий на контроллере Включение в SQLдомен, выход из домена Роспуск SQLдомена Архитектура подсистемы исполнения заданий Разграничение доступа Проблемы, проблемы Контроллер недоступен Серверучастник недоступен Локальный администратор удалил или отредактировал задание, полученное от контроллера Восстановление при сбоях Интерфейс пользователя Создание нового контроллера и сервераучастника Объектная модель и управление заданиями Заключение
311 311 313 314 316 316 318
Глава 7 Репликация данных Модель репликации и ее основные компоненты Репликация моментальных снимков Репликация транзакций Репликация сведением Отслеживание изменений Определение и разрешение конфликтов модификации . . . . Множественные модификации «проигравшей» записи . . . . Сохраненная информация о конфликте Компоненты репликации сведением Репликация хранимых процедур Модифицирующие подписчики
Microsoft SQL Server 2000, Новейшие технологии Репликация в базу данных SQL Server Репликация в базы данных иных форматов Публикация данных для иного, чем SQL Server, подписчика Системные хранимые процедуры Мониторинг репликации Монитор репликаций Монитор производительности Мониторинг средствами хранимых процедур Мониторинг активности компонентов репликации Решение проблем репликации Создание новой публикации Подключение подписчиков Создание нового потенциального подписчика Репликация с трансформацией Заключение •
Глава 8 Импорт, экспорт и трансформирование данных .. . 377 Зачем это нужно 377 Архитектура DTS 378 DTS Package 379 Мастер импорта/экспорта 380 Типы задач 392 Execute SQL 394 Copy SQL Server Objects 395 Transform Data 396 Право на ошибку 400 Обработка исключительных ситуаций 401 Параметры быстрой загрузки 403 Сценарии ActiveX 404 Константы DTSTransformStat 404 Отладка сценариев 405 Вопросы производительности 406 Data Driven Query 406 Исполнение пакетов 409 Параметры положения пакета 410 Идентификаторы пакета 410 Вспомогательные параметры 411 Транзакции DTSпакетов 412 Редактирование при осутствии связи 414 История изменений 416
www.books-shop.com
Оглавление Сохранение истории Заключение
XI 416 416
Глава 9 SQLServer и остальной мир 417 OLEdB 417 ADO 419 Модель объектов ADO 419 Создание объекта 420 ADO.CONNECTION 420 ADO.RECORDSET 425 Закладки 428 Клонирование объектов Recordset 429 Перемещение внутри набора записей объекта Recordset 429 Манипулирование данными и структурой объекта Recordset 432 ADO.Record 435 ADO.Stream 439 ADO.COMMAND 439 Типы объектов Command 442 ADO.ERROR 444 Обработка ошибок исполнения 444 Библиотека курсоров ADO 445 По умолчанию не значит очевидно 446 Иерархические объекты Recordset 448 Вопросы производительности 452 Скорость исполнения индивидуальных операций 453 Скорость получения данных и загрузка сети 454 Использование связанных серверов 455 SQL Server 8.0 как OLE Automationклиент 462 Internet и XML 463 Заключение 472 Глава 10 Утилиты администрирования Избирательность индекса ОСХ в составе ММС ОСХ или ТSQL Права пользователей Каждый пользователь имеет права Текущая активность пользователей «Иде ж мой индекс, иде ж моя таблица?» Заключение
473 473 474 478 483 484 492 499 501
www.books-shop.com
Microsoft SQL Server 2000, Новейшие технологии Приложение 1
...............................
503
Приложение 2
...............................
519
Приложение 3
...............................
525
Приложение 4 Где найти информацию ........... Словарь терминов .................................... Предметный указатель ................................
531 533 551
www.books-shop.com
От автора
Вообще только идиот примется за работу над книгой на компьютерную тематику, полагая, что на этом можно заработать. Так что, если вы думаете написать книгу, пи шите для славы. Пишите, чтобы вам было спо койнее. Пишите, чтобы было о чем поболтать с представительницами прекрасного пола. Пи шите, потому что так приятно поставить точку. И не пытайтесь на этом заработать. Уил Хенцен (Whil Hentzen), главный редактор журнала FoxTalk
Итак, Вы купили (или только листаете в магазине) мою книгу. Ее я писал уже в одиночку, потому что в силу разных причин мои коллеги были слишком заняты, чтобы выкроить на это время. Если честно, то его у меня тоже не было, и только благодаря настойчивости главного редактора издательства «Русская Редакция» том, который Вы держи те в руках, всетаки увидел свет. Я до сих пор не могу сказать, должен ли я благодарить или ругать Андрея за подобную настойчивость. Ре шать Вам: если книга понравится, он старался не зря, если нет... Так о чем же книга? Естественно, о Microsoft SQL Server 2000. Кстати, о названии. Меня страшно раздражают длинные названия продуктов: жутко неудобно писать о них или говорить. Поэтому очень часто в книге Вы будете встречать цифру 8. Это номер новой версии, и вместо полного и, так сказать, официального названия я в основ ном использую фразу «версия 8.0». Теперь о содержании. Я даже не пытался восполнить отсутствие Михаила Альперовича, стараясь написать чтото о средствах анали тической обработки данных из состава SQL Server 2000. Это предмет отдельного издания, так что, если хотите получить более подробную информацию, обратитесь на сайт Microsoft или купите другую книгу. Я попрежнему рассматривал вопросы, с которыми в основном стал кивается администратор, или «программирующий администратор»,
www.books-shop.com
Microsoft SQL Server 2000. Новейшие технологии специалист, в задачу которого входит установка и сопровождение сер вера. Именно «системщикам» адресована новая глава, посвященная административным утилитам и раздел по недокументированным хра нимым процедурам. Насколько сильно эта книга отличается от предыдущей? Довольно сильно. По мере углубления в особенности новой версии выяснилось, что развитие продукта идет хотя и эволюционным путем, но очень быстро, поэтому нововведений много, и весьма интересных. Вместе с тем сервер версии 8.0 построен на основе решений, реализованных в «семерке», поэтому мне удалось использовать некоторое количество ранее написанного материала. Насколько удачен подобный подход, судить не мне, могу только сказать, что написать книгу «с нуля» я был попросту не в силах. И все же надеюсь, что те из Вас, кто имел опыт работы с версией 7.0, смогут найти интересный и новый материал, а тот, кто только переходит на работу с СУБД Microsoft, не будет чув ствовать себя брошенными в омут без объяснений, что и как. Исходные тексты примеров, описываемых в книге Вы найдете на прилагаемом компактдиске в каталоге Samples и в Интернете, по ад ресу: http://www.newsletter.narod.ru. Кроме того, на прилагаемом ком пактдиске находится пробная 120дневная версия Microsoft SQL Server 2000. Захотите написать — буду рад. Мой адрес: [email protected]. Дмитрий Артемов
www.books-shop.com
Глава
1
Установка SQL
Server
2000
В предыдущей книге я писал, что отличия версий 6.x и 7.0 настолько значительны, что начинать рассказ о новой версии нужно с щелчка SETUP.EXE. Потом я приступил к работе над этой книгой, и оказа лось, что, хотя отличия между 7.0 и 8.0 и не так велики, процедура установки описания все же достойна внимания. Вопервых, потому что уже в процессе установки проявляются нововведения и о них сто ит рассказать, вовторых, решения, принятые при установке впослед ствии могут существенно повлиять на надежность и производитель ность системы. Прежде чем начать В первую очередь два слова о требованиях к компьютеру, на который устанавливается сервер, и операционной системе (ОС). Требования к компьютеру • Сервер можно установить на компьютер с процессором Intel и со вместимые системы. Рекомендуется процессор не слабее 166 МГц, Pentium, Pentium PRO, Pentium II, III, IV. Как видите, в список больше не входят системы на базе процессора Alpha. • Минимум 64 Мб памяти (предыдущей версии было достаточно 32). • Накопитель на компактдисках. Если сервер устанавливается по сети, это не обязательно.
Требования к операционной системе Как и предыдущая версия, SQL Server 8.0 может работать на Windows NT 4.0/98/2000/Millennium Edition (или попросту Windows ME). От поддержки Windows 95 отказались (на нее можно поставить только
www.books-shop.com
Microsoft SQL Server 2000, Новейшие технологии библиотеки доступа к серверу). Вы не слышали о Windows ME? Оче редная ОС для дома и семьи, призванная заменить Windows 98. Редакция или компонент
Требования к операционной системе
Enterprise Edition
Microsoft Windows NT Server 4.0, Microsoft Windows NT Server Enterprise Edition 4.0, Windows 2000 Server, Windows 2000 Advanced Server и Windows 2000 Data Center Server. Следует иметь в виду, что некоторые возможности SQL Server 2000 требуют операционную систему не ниже Microsoft Windows 2000 Server (любой редакции).
Standard Edition
Microsoft Windows NT Server 4.0, Windows 2000 Server, Microsoft Windows NT Server Enterprise Edition, Windows 2000 Advanced Server, и Windows 2000 Data Center Server.
Personal Edition
Microsoft Windows ME, Windows 98, Windows NT Workstation 4.0, Windows 2000 Professional, Microsoft Windows NT Server 4.0, Windows 2000 Server и все редакции Windows более высокого уровня.
Developer Edition
Microsoft Windows NT Workstation 4.0, Windows 2000 Professional и все остальные редакции Windows NT и Windows 2000.
Только клиентская часть
Microsoft Windows NT 4.0, Windows 2000 (все версии), Windows ME, и Windows 98.
Только библиотеки доступа
Microsoft Windows NT 4.0, Windows 2000 (все версии), Windows ME, Windows 98 и Windows 95.
Как видите, редакций SQL Server 2000 довольно много (о версии для карманных компьютеров — SQL Server 2000 Windows CE Edition — Вы узнаете по адресу http://www.microsoft.com/sql/productinfo/ ceoverview.htm). Они отличаются как требованиями к «железу», так и возможностями. Чтобы не загромождать эту главу перечислением до ступных и отсутствующих возможностей той или иной редакции, я вынес эту информацию в приложение «Функциональные отличия различных редакций SQL Server 2000».
www.books-shop.com
ГЛАВА 1: Установка SQL сервер 2000 Установка Перед установкой убедитесь, что у Вас достаточные права. Чтобы ус тановить SQL Server под Windows 2000, нужно быть членом локаль ной группы администраторов на том компьютере, где Вы собираетесь ставить сервер. Итак, запустим SETUP. По сравнению с предыдущей версией ин терфейс изменился. SETUP очень похожа на то, с чем Вы имеете дело, устанавливая средства разработки или продукты семейства Microsoft Office. Вам предлагается на выбор три варианта установки: типичная (Typical), минимальная (Minimum) и выборочная (Custom). При типичной установке, требующей 250 Мб дискового простран ства, применяются параметры по умолчанию, что подходит большин ству пользователей. В этом случае устанавливаются сам Microsoft SQL Server, все клиентские утилиты и документация в электронном виде. Выбрав компактную установку, Вы получите минимальную кон фигурацию для работы сервера, в которую не входит электронный вариант документации. Выборочная установка, предназначенная подготовленным пользо вателям, позволяет определить набор устанавливаемых компонентов. По умолчанию размер выборочной и типичной установок почти оди наков, но в первом случае Вы можете корректировать набор устанав ливаемых компонентов. Помимо, так сказать, комплектности, надо учитывать, с чего Вы начинаете установку: с нуля или же с имеющихся у Вас БД, создан ных для работы с SQL Server б.х/7.0. Эти БД можно конвертировать в формат 8.0, но об этом чуть позже. При установке SETUP требует ввести 25значный код, но только для стандартного (Default) экземпляра сервиса. Последующие этого не требуют Установка с нуля Для этого из каталога x86\Setup запустите программу Setupsql.exe или программу Autoplay — из корневого каталога дистрибутивного ком пактдиска. Есть ли разница? Есть: Setupsql сразу начнет установку сервера. Если Вы хотите поставить иные компоненты, такие как Analysis Services или English Query, нужно либо дать компактдиску автоматически начать воспроизведение на Вашем компьютере, либо принудительно запустить Autorun.exe. На рис. 11 показан второй из экранов SETUP.
www.books-shop.com
Microsoft SQL Server 2000, Новейшие технологии
Puc. 11. На одном компактдиске Вы найдете не только сам SQL Server, но и другие службы.
В процессе установки мастер задает ряд вопросов, тривиальных и не очень. На вопрос, где планируется установить сервер, можете выб рать локальный компьютер, иной сервер, доступный по сети или вир туальный сервер в составе кластера. После этого Вам предложат вы бор: установить сервер по новой, установить клиентскую часть серве ра, модифицировать существующую установку или создать файл ав томатизированной установки. В последнем случае все Ваши решения будут запротоколированы, и Вы получите файл, который можно ис пользовать для автоматической установки сервера на множество ком пьютеров. Это удобно, если Вам предстоит выполнять множество ус тановок. Второй вариант этого режима подразумевает восстановле ние системного реестра. При этом все Ваши ответы будут записаны, и мастер постарается восстановить системный реестр с учетом полу ченных сведений. Вас предупредят, что ответы на вопросы должны совпадать с тем, что Вы говорили при начальной установке. Честно говоря, мне кажется, что при условии, что Ваши БД сохранены в резервных копиях или в том виде, как они есть, проще переустановить сервер, чем возиться с восстановлением реестра. Так что создавайте нор мальные копии, а бинарники Вы всегда восстановите с дистрибутива.
www.books-shop.com
ГЛАВА 1: Установка SQL сервер 2000 Следующий шаг — торжественный ввод 25символьного кода. Я приведу этот экран не потому что опасаюсь, что Вы не набьете нуж ных символов, а потому, что он сильно меня удивил. Видимо, это оче редная попытка бороться с незаконным копированием (рис. 12).
Рис. 12.
Установка сервера приобрела некоторую пикантность.
После ввода кода Вам предложат определиться с экземпляром ус тановки. Если на компьютере сервер еще не был установлен, Ваш единственный вариант выбора — создать экземпляр по умолчанию. Установка всех следующих экземпляров имеет только два отличия. Вопервых, больше не потребуется вводить код сервера, вовторых, Вас попросят ввести имя экземпляра. Первый экземпляр всегда име ет имя, совпадающее с именем компьютера, все следующие называ ются МSSQL$<придуманное Вами имя>. Я не пробовал вводить име на на кириллице, так что не знаю, как на них реагирует система — попробуйте сами, но я не советую делать это с сервером, от которого Вы ожидаете долгой и плодотворной жизни. При модификации существующей установки Вам зададут еще не сколько вопросов, которые в основном сводятся к подтверждению Вашего решения внести изменения. Если же Вы ставите сервер с нуля, то от Вас потребуют определить режим аутентификации SETUP. На выбор предлагается два варианта: аутентификация средствами са мого сервера (SQL Server Authentication) и предпочтительная — про верка средствами Windows. Во втором случае подразумевается, что
Microsoft SQL Server 2000, Новейшие технологии SETUP входит от Вашего имени с тем учетным именем и паролем, который использовался при регистрации в системе. Далее Вы попадаете в диалоговое окно, где можете выбрать тип установки (минимальная, типичная или выборочная). Здесь же по зволено выбрать место для размещения программных файлов и фай лов БД (рис. 13).
Puc. 13. сервера.
Выбор типа установки и местоположения компонентов
Что бы Вы ни выбрали, SETUP не сделает ничего, что могло бы поставить Вас потом перед мучительной необходимостью перестрой ки всей системы. Базы данных можно создавать в любом каталоге сер вера, прямо указывая путь, исполняемые файлы и библиотеки серве ра лучше поместить в предложенный по умолчанию каталог Program Files, но коль скоро мы заговорили о размещении файлов, я предла гаю сделать отступление и порассуждать на тему оптимизации диско вой подсистемы сервера, что это может дать и как ее строить. Дисковая подсистема Основную идею оптимизации дисковой подсистемы можно выразить так: «чем больше дисков, тем лучше». Но, как говорится, скоро сказка сказывается, да не скоро дело делается: за простотой этого постулата кроется нелегкий путь принятия решений. Какими же критериями ру ководствоваться при организации дисковой подсистемы сервера? Чаще всего таким критерием выступает соотношение цена/производитель ность. Большинство систем сейчас используют SCSIдиски и конфи
www.books-shop.com
ГЛАВА 1: Установка SQL сервер 2000 гурацию RAID 5. Это привычно: «как все, так и мы, зачем изобретать велосипед?» Посмотрим, во что выливается подобное решение. Выбор дисковой подсистемы для SQL Server В первую очередь обсудим типы обращений к дискам, реализуемые SQL Server при выполнении операций с БД: • произвольный (Random) доступ на чтение происходит при выпол нении запроса, снабженного ограничениями в предложении WHERE (например, SELECT * FROM Pubs..Authors WHERE Au_ID = «724089931»); • последовательный (Sequential) доступ на чтение характерен для операций сканирования, при отсутствии предложения WHERE или при использовании WHERE, не накладывающего ограниче ний на запрос; • произвольный доступ на запись характерен для операций INSERT, UPDATE, DELETE, захватывающих индивидуальные записи; • последовательный доступ на чтение характерен для вставки зна чительных объемов данных, например средствами ВСР или DTS. Журнал транзакций практически в 99% случаев работает в режиме последовательной записи. Дисковую подсистему следует проектировать в зависимости от типа операций доступа, преобладающих для конкретной системы. Основные конфигурации могут быть трех типов: • единственный диск; • группа независимых дисков; • дисковые массивы с чередованием и четностью или без нее. Первый — наихудший вариант, так как файлы данных и журнал транзакций используют общий диск и ни о каком повышении произ водительности речи и быть не может. Во втором случае, разместив журнал и данные на самостоятель ных дисках, Вы повысите производительность системы. В третьем — Ваши данные и журнал (если он размещен на том же самом массиве) рассредоточены по нескольким дискам, что также повышает производительность системы. В зависимости от конкретной реализации приложения можно вы брать любой подход, но сначала рассмотрим существующие реализа ции RAIDсистем. Аббревиатура RAID расшифровывается как избы точный массив независимых дисков (Redundant Array of Independent Disks). Поддержка может быть организована на аппаратном или про граммном уровне. Последний вариант настолько неудачен, что рас сматривать его нет смысла — мы будем говорить о первом.
www.books-shop.com
g
Microsoft SQL Server 2000, Новейшие технологии
Для сравнения производительности различных реализаций RAID надо рассмотреть число запросов ввода/вывода, создаваемых системой для каждой реализации. RAID О Самый простой вариант — RAID 0, или, как его еще называют, чере дование без четности (disk stripping without parity), обеспечивает толь ко повышение производительности. Данные рассредоточены по не скольким дискам, и система прекрасно работает как на чтение, так и на запись. Проблема лишь в том, что такая конфигурация не обеспе чивает защиты от сбоев. Потеряв единственный диск, скажите всем данным «прощай». И все же RAID 0 прекрасно подходит для систем со статическими данными, таким как хранилища данных и системы поддержки принятия решений. RAID 0 не защищает от сбоев, но не создает и накладных расходов. Число операций ввода/вывода равно сумме операций на чтение и на запись. RAID 1 RAID 1, или зеркализация, надежно защищая от сбоев, обеспечивает операции последовательного чтения/записи. Вся информация дубли руется, и при сбое одного из дисков данные легко восстановить. Та кого рода конфигурация прекрасно подходит для размещения журна лов транзакций. Каждый запрос на запись инициирует две операции (по одной для каждого диска). В итоге число операций ввода/вывода равно числу запросов на чтение плюс удвоенному числу запросов на запись. RAID 5 Архитектура RAID 5, или чередование с четностью (data stripping with parity), чаще всего приходит в голову при обсуждении архитектуры дисковых массивов. Производительность RAID 5 уступает RAID 0, но обеспечивает хорошую защиту данных при сбоях. RAID 5 пригодна для работы небольших OLTPсистем (небольшое число пользовате лей, незначительное число транзакций в секунду). При каждом запросе на запись дисковый контроллер: 1. считывает блок данных; 2. считывает блок четности; 3. записывает новый бок данных; 4. записывает новый блок четности. То есть число запросов ввода/вывода равно числу запросов на чте ние плюс четырехкратное число запросов на запись. Отсюда: RAID 5 требует в 2,5 раза больше запросов ввода/вывода в сравнении с RAID 0.
www.books-shop.com
ГЛАВА 1: Установка SQL сервер 2000
о
RAID 10 По сути дела RAID 10 — это комбинация RAID 0 и RAID 1: зеркали зация партиции, построенной с чередованием. RAID 10 предлагает наиболее высокую производительность и наилучшим образом защи щает от сбоев. Это самое дорогое решение, но для высоко нагружен ных OLTPсистем это то, что надо. Накладные расходы этой конфигурации связаны только с зерка лизацией. В целом RAID 10 обеспечивает скорость RAID 0 и надеж ность RAID 1. Число запросов ввода/вывода складывается из запро сов на чтение и удвоенного числа запросов на запись. Дисковые контроллеры Современные дисковые контроллеры способны обрабатывать не сколько тысяч запросов ввода/вывода в секунду. Если принять, что контроллер обрабатывает 1 200 запросов, а соотношение записи и чтения составляет 2:1 (2W = R), то RAID 10 может обеспечить боль шую производительность в сравнении с RAID 5. RAID RAID RAID RAID RAID
Число запросов к контроллеру на запись на чтение 0 (IO = R+W) 1 (IO = R+2W) 5 (IO = R+4W) 10 (Ю = R+2W)
400 300 200 300
800 600 400 600
Видно, что насыщение контроллера при использовании RAID 5 наступает быстрее. Число дисков в массиве А сколько дисков способен обслужить индивидуальный контроллер? Если диск с частотой вращения 10 000 об/мин обеспечивает до 100 операций ввода/вывода в секунду, то наш абстрактный контроллер, поддерживающий 1 200 запросов, способен поддерживать до 12 дис ков. Теперь посчитаем, сколько дисков понадобится для обеспечения работы системы, выполняющей 200 транзакций в секунду при исполь зовании кэша (cache hit ratio) на 95 %. Для расчета понадобятся зна чения счетчиков монитора производительности: • Transactions per second; • Physical disk transfers per second; • Physical reads per second; • Physical writes per second; • Cache Hit Ratio.
www.books-shop.com
10
Microsoft
SQL
Server
2000,
Новейшие
технологии
Допустим, Вы получили cache hit ratio = 98% (это даже лучше, чем мы заказывали), каждая транзакция создает 2,12 физических чтения и 1,3 операции записи. То есть индивидуальная транзакция форми рует 3,42 операций ввода/вывода. Соответственно: 3.42x200 = 684 операций ввода/вывода в секунду; 2.12x200 = 424 чтений в секунду; 1.3x200 = 260 операций записи в секунду; RAID 0: число дисков = (R+W)/(мaкcимaльнoe число операций, поддерживаемых диском) = (424+260)/100 = 6,48 = 7 дисков; RAID 5: число дисков = (R+4W)/(мaкcимaльнoe число операций, поддерживаемых диском) = (424+4x260)/100 = 14,64 = 15 дисков; RAID 10: число дисков = (R+2W)/(мaкcимaльнoe число операций, поддерживаемых диском) = (424+2х260)/100 = 9,44 = 10 дисков. Учитывая приведенные расчеты, можно составить таблицу для определения стоимости, производительности и надежности различ ных RAIDархитектур в сравнении с сервером, использующим един ственный диск: Дисковая подсистема
Производи тельность
Надежность
Один диск RAID 0 RAID 10 RAID 5
1 7 7 7
Отсутствует 1 Отсутствует 7 Очень хорошо 10 Хорошо 15
Как видно, для достижения одинакового уровня производитель ности RAID 10 и RAID 5, использование RAID 10 обойдется дешевле (нужно меньше дисков) и позволит создать более надежную систему. При использовании одинакового числа дисков RAID 10 на 50% быс трее, чем RAID 5. Еще одно «общепринятое» мнение состоит в том, что дисковая под система должна строиться исключительно на SCSIдисках. У SCSI интерфейса, конечно, целый ряд достоинств, но в последнее время, особенно с появлением стандарта АТА66, использованием контрол леров, способных обеспечить создание RAIDмассивов средствами IDEдисков, решения на этом классе устройств становятся все попу лярнее. Причин тут несколько. Вопервых, контроллер (например, фирмы Promise technology) стоит всего около 60 долларов, диск с IDE интерфейсом примерно втрое дешевле аналогичного по емкости SCSI диска, а производительность вполне можно обеспечить конфигури рованием массива по схеме RAID 10. Более того, многие производи
www.books-shop.com
ГЛАВА 1: Установка SQL сервер 2000
11
тели жестких дисков используют одну и ту же «механику» внутри дис ков, и отличия начинаются только на уровне контроллера. При этом диски IDE и SCSI отличаются по цене примерно втрое.
RAID 0 RAID 1
Производительность при чтении при записи
Надежность
Великолепно Хорошо
Отсутствует OLAP, DSS Очень хорошо Журнал, небольшие OLTP системы Хорошо OLTP Очень хорошо Высоко нагруженные OLTP системы
RAID 5 Очень хорошо RAID 10 Великолепно
Великолепно Очень хорошо
Плохо Великолепно
Тип приложений
В исследовательском центре Microsoft проанализировали произ водительность Windows NT 4.0 и Windows 2000 Advanced Server и про изводительность дисков с интерфейсом IDE и SCSI. Целиком приво дить отчет объемом более 50 страниц я не буду, но выводы слишком интересны, чтобы не сделать обширную цитату (полностью отчет и другую информацию об исследованиях см. на http://research.mic rosoft.com/BARC/SequentialJO). «Сводя воедино результаты исследования, можно утверждать сле дующее. • Win2K и Windows NT 4 с установленными SP6 или SP3 показыва ют сходную производительность при выполнении последователь ных операций ввода/вывода. • Для небольших небуферизированных запросов NT4+SP6 не име ет таких накладных расходов, как NT4+SP3, демонстрирующая значительный объем накладных расходов при небуферизирован ных синхронных операциях чтения и небуферизированных асин хронных запросах. • Базовые и динамические тома Win2K показывают сходные ре зультаты. • Для последовательной нагрузки основным ограничивающим фак тором является 32разрядная PCIшина с частотой 33 МГц. Насы щение шины наступает уже при использовании 3 дисков достаточ но стандартной конфигурации для современных рабочих станций.
www.books-shop.com
Microsoft SQL Server 2000, Новейшие технологии • Операции ввода/вывода произвольного (random) характера также ограничиваются PCIшиной. Современные шины способны под держивать примерно 10 000 произвольных операций ввода/выво да в секунду, что примерно соответствует нагрузке от 100 дисков. Производительность индивидуальных IDEдисков очень высока, особенно если сравнивать с их более дорогими SCSIаналогами. Не составляет проблем добиться высокой производительности от дисков с интерфейсом IDE. Технические приемы, используемые для опти мизации SCSI, распространяются и на IDEдиски. Хотя карта фирмы 3ware и была ограничена в производительности возможностями шины PCI и не смогла обеспечить полноценную производительность, ожи даемую от 4 дисков, карты второго поколения показывают хорошую производительность и свободны от упомянутого ограничения. (В те стах использовалась карта фирмы 3ware www.3ware.com. Новые мо дели карт этого производителя поддерживают до 8 дисков и способ ны представить дисковый массив как SCSI. — А. Д.) • Индивидуальные IDEдиски оказываются безусловными победи телями с точки зрения соотношения цена/производительность. Для последовательной загрузки они весьма близки по производи тельности к дискам с интерфейсом SCSI, а для произвольных опе раций диски IDE показывают производительность на 25% выше, если рассчитывать, исходя из их стоимости (число операций вво да/вывода за 1 доллар). • Адаптер от 3ware обеспечивает линейное масштабирование при последовательном доступе на чтение и хорошее масштабирование при последовательных операциях записи на дисковых массивах до 3 дисков. Добавление четвертого диска не дало преимуществ в свя зи с ограничениями по шине. Карты следующего поколения сво бодны от этого недостатка. Скорость операций произвольного до ступа также хороша, поскольку объем перемещаемой информации значительно ниже, 4 диска даже не приближаются к насыщению шины или карты. • Диски с интерфейсом IDE показывают объем накладных расхо дов, сходный с тем, что видно для дисков SCSI кроме ситуации, когда используется РIO.РIO значительно снижает производитель ность, для нормальной работы следует использовать DMA». Как говорится, конец цитаты. Еще один вопрос, достойный анализа — применение сжатия дан ных. Поскольку БД сжимаются примерно в 3—4 раза, число операций ввода/вывода значительно сокращается. Вроде бы это говорит в пользу компрессии. Но не все так просто. В статье базы знаний Microsoft
www.books-shop.com
ГЛАВА 1: Установка SQL сервер 2000 Q231347 — «INF: SQL Server Databases Not Supported on Compressed Volumes» (см. по адресу http://support.microsoft.com/support/kb/articles/ Q231/3/47.ASP), название которой говорит само за себя, написано: так как компрессия не гарантирует выравнивание записи данных по сек торам, использование файлов данных на сжатых дисках формата NTFS или FAT не поддерживается. Это относится как к рабочим БД, так и к файлам резервных копий. Более того, там же утверждается, что ско рость работы со сжатыми файлами может оказаться существенно ниже (до 5 раз) в сравнении с обычными дисками. Материал статьи отно сится к SQL Server версий 6.5, 7.0 и 8.0. От себя добавлю, что анализ переписки в нашей службе технической поддержки показал, что комп рессия несет потенциальную опасность серьезных проблем, вплоть до повреждения данных. Диски нынче дешевы, не жадничайте. А теперь вернемся к установке сервера и рассмотрим следующий параметр настройки, а именно учетные записи, под которыми испол няются службы сервера. Учетные записи, под которыми исполняются службы SQL Server Если Вы уже работали с предыдущими версиями, можете двигаться дальше — для тех же, кто начинает знакомство с Microsoft SQL Server сразу с версии 8.0, я поясню. Как любая служба (service) ОС (а имен но в таком виде исполняется сам SQL Server и его основные службы при работе под Windows NT), он может работать под локальной учет ной записью (Local system account) или учетной записью пользователя, зарегистрированного в домене (Domain user account). Версия 8.0 по умолчанию предлагает назначить последнюю. В чем разница и что выбрать? Устанавливая SQL Server на отдельно стоящий компьютер или компьютер, не имеющий доступа к другим серверам, выберите локальную учетную запись — Вы сможете нормально работать. Но в случае NT 4.0 ставьте сервер только на изолированный компьютер. При работе под Windows 2000 локальная учетная запись позволяет подключаться к другим серверам. И все же, если сервер будет взаи модействовать с другими серверами, выполнять административные функции или участвовать в репликации (Replication), выбирайте учет ную запись пользователя в домене. SETUP позволяет указать учет ную запись для двух основных служб SQL Server: собственно сервера (MSSQLServer) и его административного компонента — SQL Server Agent. В последнем случае надо заранее иметь соответствующую учет ную запись и назначить ей определенные права. Учетные записи служ бы SQL Server должны иметь следующие права (кроме прав доступа к каталогам самого сервера, каталогам, где расположены файлы данных, и прав доступа к ключам системного реестра) — Log on as a service.
www.books-shop.com
14
Microsoft SQL Server 2000, Новейшие технологии
В зависимости от правил безопасности, принятых в Вашей орга низации, можно задействовать имеющуюся учетную запись или со здать специальную — только для SQL Server. Скорее всего создавать две раздельных учетных записи для SQL Server и для SQL Server Agent не потребуется, хотя можно сделать и так. Если учетные записи в до мене на момент установки SQL Server еще не созданы, используйте локальную учетную запись. Вы всегда сможете изменить этот пара метр в диалоговом окне Services панели управления. Учетной записи можно назначить разные параметры, начиная от срока действия и кончая часами, когда позволено работать в сети. Важно, что данная учетная запись — именно та, под которой сам SQL Server будет рабо тать в сети. Политика безопасности доступа к данным не влияет на правила работы описываемой учетной записи, так что лучше всего установить режим Password Never Expires (Пароль никогда не истека ет) и снять флажок User Must Change Password At Next Logon (Пользо ватель должен сменить пароль при следующей регистрации) — про чее оставьте, как есть: поменять пароль можно всегда. Отдельная учет ная запись, используемая только для работы SQL Server, приобретает дополнительные преимущества, если в Вашей организации принято периодически менять пароли (и это правильно!). Тогда Вам не при дется ломать голову, почему SQL Server вдруг «забастовал», чтобы в конце концов обнаружить, что пользователь, под учетной записью ко торого исполняется SQL Server, сменил пароль или был исключен из группы, дающей ему необходимые привилегии. Ведь в этом случае нужно снова открыть диалоговое окно Services панели управления и вручную изменить стартовые параметры службы. И еще один плюс специализированной учетной записи: при нали чии в разных доменах пользователей с одним и тем же именем и па ролем доступ в домен под именем такого пользователя осуществляет ся так, будто между доменами установлены двусторонние доверитель ные отношения (Two way trust relationship). Очевидно, что для учетной записи, за которой стоит реальный пользователь, такого допускать скорее всего не следует, а вот для службы ОС подобный вариант мо жет оказаться вполне приемлем. Сетевые параметры Если Вы решились на выборочную установку, одно из диалоговых окон мастера установки предложит список сетевых библиотек (рис. 14). По умолчанию на Windows NTкомпьютере предлагается устано вить поддержку для именованных каналов (Named Pipes), TCP/IP sockets и Multiprotocol Net Library. При установке SQL Server на Windows 9x
www.books-shop.com
ГЛАВА 1: Установка SQL сервер 2000
15
компьютер предлагается поддержка для TCP/IP sockets и Shared me mory. Ваш выбор определяется конфигурацией сети и некоторыми до полнительными соображениями. Вообще есть смысл выбрать Named Pipes, MultiProtocol или TCP/IP sockets — эти библиотеки могут рабо тать поверх основных сетевых протоколов (TCP/IP, NetBEUI, IPX/ SPX). Кроме того, MultiProtocol поддерживает шифрование данных при передаче по сети. Внутренние тесты Microsoft показали, что наи высшая производительность у TCP/IP sockets. К сходным выводам при шли специалисты фирмы Compaq, отметив при этом, что различия в производительности лучше всего проявляются на операциях массив ной перекачки данных (вроде передачи информации средствами ВСР — утилиты для массивной закачки информации в БД), а при выборке отличия гораздо менее заметны. Вообще выбор механизма межпрог раммного взаимодействия (именно это Вы определяете при выборе сетевой библиотеки) — предмет отдельного, весьма серьезного иссле дования, и я настоятельно рекомендую тщательно тестировать Вашу конкретную конфигурацию, чтобы сделать обоснованный выбор.
Позволяет клиентам подключаться по именованным каналам с поверх любого транспортного протокола Microsoft.
NWLink IPX/SPX
Используется для поддержки клиентов Novell SPX.
VIA ServerNet II SAN
Позволяет клиентам использовать архитектуру виртуального интерфейса (Virtual Interface Architectu re) на ServerNet II System Area Network (SAN). SAN — высокоскоростная, надежная сеть для соединения индивидуальных серверов или серверных кластеров.
VIA GigaNet SAN
Позволяет клиентам использовать архитектуру виртуального интерфейса на GigaNet SAN.
Multiprotocol
Позволяет клиентам общаться с использованием одновременно одного или более механизмов интер процессной связи (interprocess communication — IPC), поддерживаемых Windows 2000, включая Named Pipes, TCP/IP Sockets и NWLink IPX/SPX.
AppleTalk ADSP
Позволяет подключаться к серверу клиентам на базе Apple Macintosh с использованием «родного» AppleTalk (а не TCP/IP).
Banyan VINES
Поддерживает протокол Banyan VINES Sequenced Packet Protocol (SPP) в качестве механизма доступа IPC поверх сетевого протокола Banyan VINES IP.
Под клиентом я здесь понимаю не только Visual Basicприложе ние для конечного пользователя, но и другой SQL Server. Так, при взаимодействии двух SQLсерверов, один из которых работает под Windows 9x, а второй — под Windows NT, на втором сервере Named Pipes недостаточно, так как Windows 9x не поддерживает работу по именованным каналам. Используя утилиту конфигурирования клиентов, можно задавать не только имя сервера, но и псевдоним. Благодаря этому клиентское приложение может не заботиться о реальном имени (если параметры соединения жестко прописаны в коде). Псевдоним может оставаться неизменным, а соответствие между псевдонимом и физическим име нем сервера определяется настройкой. Ряд сетевых протоколов не работает с именованными экземпля рами сервера (dblib, multiprotocol, appletalk, banyan). Именованные экземпляры SQL Server 2000 поддерживаются только библиотеками
www.books-shop.com
ГЛАВА 1: Установка SQL сервер 2000
17
Named Pipes, TCP/IP Sockets, NWLink IPX/SPX и Shared Memory. Bce это не относится к стандартному экземпляру, который поддержива ют все сетевые библиотеки для сохранения совместимости с преды дущими версиями. Так что, если у Вас установлены такие утилиты, как Query Analyzer или ISQL/W от предыдущих версий, то при попытке подключиться к именованному экземпляру клиент получит сообщение о невозмож ности установить соединение. Проблему решит установка Microsoft Data Access Components (MDAC) версии 2.6 или более поздней. Если установить новую версию MDAC почемуто нельзя, примените временное решение, которое функционирует и позволяет использовать Microsoft SQL Server 7.0 Query Analyzer, Osql.exe или Microsoft SQL Server 6.5 ISQL/W и Isql.exe. Для реализации этого временного решения нужен псевдоним. Прежде чем описывать соединение, выясните номер ТСР/IРпорта, по которому «слушает» именованный экземпляр. Порт определяется утилитой настройки серверных соединений Server Network Utility, расположенной на компьютере с SQL Server. Запустив ее, выберите на вкладке General именованный экземпляр, а в списке активных про токолов — TCP/IP. Щелкнув кнопку Properties, Вы увидите номер порта в появившемся диалоговом окне. Затем откройте утилиту кон фигурирования клиентских соединений на рабочей станции и на вкладке General диалогового окна Server Alias Configuration dialog щел кните кнопку Add, а затем — TCP/IP. Введите имя псевдонима (оно может быть любым) и в поле Computer Name — имя сервера, на кото ром установлен SQL Server 2000 (или IPадрес компьютера). Имя эк земпляра добавлять не надо. В поле Port Number введите номер порта. Для SQL Server 6.5 также следует использовать SQL Server Client Configuration Utility. На вкладке Advanced щелкните кнопку Add/ Modify и в поле Server введите имя псевдонима. Выберите TCP/IP Sockets в списке сетевых библиотек и в поле описания строки соеди нения введите имя сервера, запятую и номер порта. Например, Сот puterA, 1523. Имя экземпляра добавлять не нужно. Замечу: Microsoft SQL Server 6.x не поддерживает доверительные соединения по TCP/IP. Если Вы получите сообщение типа: Msg 18452, Level 14, State 1: Login failed for user 'user_name'. Reason: Not associated with a trusted SQL Server connection. DBLibrary: Login incorrect. — используйте Named Pipes для работы с клиентскими инструмента ми SQL Server 6.5. При конфигурировании псевдонима для соединения по именован ным каналам определите имя канала, используемого именованным
www.books-shop.com
18
Microsoft
SQL
Server
2000,
Новейшие
технологии
экземпляром сервера. Это делается в окне утилиты Server Network Utility. На вкладке General выберите нужный экземпляр, выделите Named Pipes и щелкните кнопку Properties. Запишите имя канала. На сервере версии 7.0 клиент настраивается посредством Client Network Utility. На вкладке General щелкните кнопку Add и выберите Named Pipes. Введите псевдоним и в поле для имени канала — то, что Вы узнали на сервере. Не забудьте заменить точку на имя реального сер вера, например: \\ComputerA\pipe\MSSQL$s2000\sql\query. В версии 6.5 средствами Client Configuration Utility на вкладке Advanced введите псевдоним и имя канала. Порядок сортировки При установке сервера Вы определяете порядок слияния (collation) и выбираете порядок сортировки, т. е. набор правил сравнения и слия ния данных. Символьные данные сортируются по правилам, опреде ляющим корректную последовательность символов. Вы можете ука зать чувствительность к регистру, диакритическим знакам (accent marks) и такой экзотике, как типы символов японской азбуки Кана и ширина символов. Сервер поддерживает две группы порядков слия ния Windows и SQL Server.
Puc. 15. Здесь Вы указываете, как сервер будет разбирать и сортировать Ваши данные.
www.books-shop.com
ГЛАВА 1: Установка SQL сервер 2000
19
Порядок слияния по Windows При выборе порядка по Windows набор правил определяется ОС и включает правила по хранению и сортировке символов, как это сде лано для соответствующего языка (Locale) Windows. Эти правила оп ределяют алфавит или язык для сортировки и кодовую страницу для работы с символами, представленными одним байтом (неUnicode). Порядок слияния по SQL Server При назначении порядка слияния по SQL Server Вы получаете совме стимость с предыдущими версиями. Сервер будет ориентироваться на кодовую страницу для хранения 1байтовых символов и соответству ющие правила сортировки для 1байтовых и Unicodeсимволов. Это значит, например, что SQL_Latinl_General_CPl_CI_AS соот ветствует выбираемого по умолчанию параметра для SQL Server 7.0: кодовая страница ISO 1252, порядок сортировки в соответствии со словарем без учета регистра и порядок слияния — General Unicode. Порядок слияния по SQL Server нужно использовать: • при репликации с предыдущими версиями SQL Server; • если код Вашего приложения зависит от поведения, определенно го для сортировки/слияния в ранних версиях. Сортировка и слияние по умолчанию Если Вы ничего не указываете, сервер применяет порядок слияния по Windows с учетом текущей языковой настройки Windows. Имейте в виду, что параметры по работе с языком для сервера можно изменить только ценой полного перестроения всех БД (с по терей информации). Тем не менее для каждой новой БД можно уста новить свои правила обработки символьной информации с точнос тью до индивидуального поля таблицы.
Если установка не удалась Мир несовершенен. Увы, и неудачное завершение установки тоже вероятно. Что делать? Попробовать разобраться в причинах неудачи и запустить SETUP еще раз. Если проблема возникла в процессе установки или начального за пуска сервера или Вы не можете подключиться к серверу, вспомните, не было ли сообщений об ошибках в процессе установки, проанали зируйте журнал Sqlstp.log, посмотрите журнал самого сервера и про верьте сетевые соединения. Сообщения об ошибках могут появлять ся, если какойто ресурс заблокирован другим приложением и SETUP не в состоянии получить права на перезапись очередной DLL. Опре делить, кто заблокировал ресурс, иногда очень трудно. Запаситесь
www.books-shop.com
Microsoft SQL Server 2000, Новейшие технологии
20
великолепной утилитой HandleEx Марка Руссиновича (http:// www.sysinternals.com) — она позволит безошибочно определить про цесс, захвативший тот или иной ресурс. Определенную помощь спо собен оказать анализ содержимого файла Sqlstp.log. Он создается в каталоге \Winnt\ и представляет собой подробный журнал всех опе раций, выполняемых сценариями установки, включая сообщения об ошибках утилиты DBCC. Служба SQL Server, запускаемая в процессе установки, создает стандартный журнал Errorlog. Такой же журнал создается каждый раз при старте службы. Кстати, в него записываются не только ошибки, как может показаться из его названия. Сюда попадает вся информа ция, которую сервер сочтет нужным записать, в том числе подробное описание старта самого сервера и вспомогательных служб. Помимо журнала SQL Server, можно проанализировать содержимое Windows 2000 application log. Вот эти журналы: Журнал
Описание
Где находится Как посмотреть (по умолчанию)
Sqlstp log
Фиксирует все действия программы установки.
\Winnt
Windows 2000 application log
Фиксирует информацию Внутреннее о событиях, связанных с хранение работой приложений в среде Windows 2000.
Windows 2000 Event Viewer.
Errorlog
Фиксирует все этапы запуска сервера и неко торые действия в процессе работы.
\Program Files\ Microsoft SQL Server\MSSQL\ Log
Средствами SQL Server Enterprise Manager или в любом текстовом редакторе.
SQL Agent
Записывает этапы запуска и некоторые аспекты работы службы SQL Server Agent.
\Program Files\ Средствами Microsoft SQL SQL Server Server\MSSQL\ Enterprise Log Manager или в любом текстовом редакторе.
В любом текстовом редакторе.
www.books-shop.com
ГЛАВА 1: Установка SQL сервер 2000
21
Если локальный клиент способен подключиться к серверу, но это го не может сделать клиент с другого компьютера, следует проверить сетевые параметры на обоих компьютерах. Сетевые библиотеки кли ента и сервера должны совпадать. Сетевая библиотека, используемая клиентом по умолчанию, должна соответствовать Вашей сети. И на конец, посмотрите, соединена ли сетевая карта с розеткой в стене. Что делать, если что+то не работает Найти решение проблемы, как правило, означает изоляцию и про верку симптомов. Вот наиболее часто встречаемые проблемы и спо собы их устранения. Симптом
Проблема
Решение
Служба SQL Server не стартует.
Windows 2000 не может достучаться до конт роллера домена для проверки привилегий бюджета, под которым пытается стартовать служба. Пароль, используемый бюджетом, под кото рым исполняется служба, истек или был изменен.
Восстановите соедине ние с контроллером домена или переведите службу на использова ние бюджета Local System (хотя бы временно). Укажите в параметрах службы правильный пароль.
Бюджет, под которым исполняется служба, не имеет достаточных при вилегий для подклю чения к серверу.
Добавьте бюджет в груп пу локальных админист раторов Windows 2000 (Administrators), или в состав роли sysadmin на SQL Server. Запустите SETUP и в режиме Advanced Options щелкните Registry Rebuild для восстановления клю чей реестра SQL Server. Не забудьте повторить все ответы, данные при первой установке сервера.
В журнале событий Windows 2000 появи лось сообщение «Error 1069: The service did not start due to a logon failure.» Служба SQL Server Agent не стартует.
Служба SQL Server не стартует.
Повреждение ключей реестра, относящихся к работе SQL Server.
www.books-shop.com
22
Microsoft SQL Server 2000, Новейшие технологии (продолжение)
Симптом
Проблема
Решение
Средства администри рования SQL Server не могут подклю читься к серверу. Сообщение «A con nection could not be established to [имя сервера]».
Служба не запущена.
Запустите службу SQL Server.
Сетевые библиотеки клиента и сервера не совпадают.
Измените параметры сетевых библиотек, используемых по умол чанию. В первую оче редь это стоит сделать на клиенте, но может понадобиться изменить и параметры сервера. Зарегистрируйтесь в У Вас нет прав на системе под именем, администрирование SQL Serverкомпьютера. имеющим достаточные привилегии, или под ключитесь к серверу под именем SA.
Если все поправлено, запустите службу MSSQLServer и попробуй те зарегистрироваться. Для этого запустите утилиту Isql.exe из ката лога \Program Files\Microsoft SQL в окне Com mand Prompt с параметром Usa. Появится запрос на ввод пароля, нажмите клавишу Enter. Появится приглашение в виде введите SELECT нажмите клавишу Enter, введите GO и вновь нажмите Enter. Если соединение с сервером установлено, Вы полу чите сообщение о номере версии сервера. Введите QUIT, нажмите Enter, и можно двигаться дальше. документация Очень рекомендую скопировать на диск документацию в электрон ном виде. Компактдиска с SQL Server может не быть под рукой, CD ROMдисковод может быть занят, а электронная документация все гда при Вас. Общаясь с пользователями, я пришел к выводу о недо статочном знании ими возможностей электронной документации. Так что давайте остановимся на этом компоненте SQL Server. На мо мент написания книги у нас нет сведений о том, в каком виде будет представлена печатная документация, но, судя по предыдущей вер сии, электронный вариант полностью соответствует по объему
www.books-shop.com
ГЛАВА
Установка SQL сервер 2000
23
гам, находящимся в коробке. Читать с экрана, конечно, — не самое приятное занятие, но возможности поиска, предоставляемые On Line документацией, с лихвой перекрывают этот недостаток, тем более, что нужный раздел всегда можно распечатать. Искать можно как в тек стах статей, так и по их заголовкам. Формулируя запрос, помните, что система пытается «интеллектуально» интерпретировать Ваши тре бования и рассматривает запросы «найти все статьи, в тексте кото рых встречается слово manage» и «найти все статьи, в тексте которых встречается слово management» как одинаковые, и в итоге Вы можете потонуть в море Постарайтесь как можно конкретнее сформулировать запрос и помните, что набор слов в кавычках рассматривается как единый блок, тогда как простое перечисление интерпретируется как «найти все статьи, в которых встречаются перечисленные слова», при этом слова могут быть разбросаны как угодно широко. Если найденных статей слишком много, можно провести уточненный поиск по резуль татам предыдущего (флажок Search previous result). Результаты можно сортировать по заголовку статьи, частоте вхождения искомого текста и разделам документации. Команда Manager Near Database задает по иск статей, в которых нужные слова встречаются неподалеку. Можно использовать комбинации AND и OR, скобки и т. д. Такие слова, как «than», «the», «а» и подобные, при поиске не рассматриваются. До полнительные возможности обеспечивает вкладка Index панели по иска ключевых слов. Часто используемые статьи можно сохранить в окне вкладки Favorites.
Каталоги после установки При любом типе установки Вы получаете на своем компьютере опре деленный набор каталогов. Посмотрим, что там, в этих каталогах. Я приведу полный перечень — при минимальной установке каталогов может не быть. Тем, кто имеет опыт работы с предыдущими версиями, показанная ниже структура каталогов должна быть в основном знакома (рис. 16). Каталог 80 содержит разделяемые ресурсы сервера, которые не дуб лируются, сколько бы ни было установлено именованных экземпля ров. В каталоге Tools\Binn размещены утилиты командной строки, средства запуска пакетов DTS и прочие полезные вещи. Books, как и следовало ожидать, хранит электронную документацию. Если Вы по ставили средства разработки, то получите каталог DevTools, заполнен ный примерами, включающий дистрибутивы MDAC SDK, XML Parser, заголовочные файлы, HTMLфайлы, используемые ММС для отобра жения данных о БД и индивидуальных таблицах и пр., и пр. Каталог
www.books-shop.com
Microsoft SQL Server 2000, Новейшие технологии
24
Scripts включает набор сценариев, Templates — шаблоны для исполь зования в среде DTS, SQL Profiler и SQL Query Analyzer.
Install
16. Структура каталогов SQL Server 2000 при наличии одного именованного и одного стандартного экземпляра. Эти каталоги хранят комплект исполняемых файлов, библиотек и прочих обеспечивающих работу сервера.
Следом идет набор каталогов, содержащий исполняемые файлы, уникальные для каждого экземпляра сервера. Почему уникальных? Потому что при наличии на сервере нескольких экземпляров версии 8.0 Вы можете «накатывать «Service pack» только на некоторые из них, тем самым создавая испытательный полигон для проверки функцио нальности, реализованной в пакете обновления. Но и до установки пакетов обновления каталоги стандартного и последующих экземп ляров отличаются и по структуре, и по составу.
www.books-shop.com
ГЛАВА
Установка SQL сервер 2000
25
Структура каталогов, в которых размещаются файлы данных и журналы выглядит очень просто:
Как видите, тут практически ничего не изменилось.
Установка удалась! Итак, после непродолжительного (а установка занимает совсем не много времени) ожидания, Вы увидели радостное сообщение об ус пешном завершении процесса. Самое время начать работу, и начнем мы ее с проверки, действительно ли все ОК.
Как проверить результаты установки Позже мы подробнее рассмотрим процесс подключения к серверу, а пока убедимся в доступности SQL Server. Сначала окно Command Prompt и введем команду: net start mssqlserver
Вскоре Вы получите сообщение о старте службы: start mssqlserver The service is starting The MSSQLServer service was started successfully. ) это значит, все OK Подключение к серверу выполняется командой:
При успешном соединении появится приглашение: 1>
В противном случае будет возвращено сообщение об ошибке. Введите простой 1> select
(1 row affected) 1>QUIT <Enter> После успешного завершения установки на компьютере появля ется группа ярлыков, позволяющих запускать основные компоненты SQL Server. Версия, с которой я работаю сейчас, устанавливает в ка талог автозапуска (Startup) дополнительный ярлык для SQL Server Service Manager. Мне кажется это не совсем правильным, поэтому я обычно его удаляю. В активной системе службы SQL Server и SQL Server Agent скорее всего будут запускаться вместе с ОС. В тестовой системе появление диалогового окна после каждой перезагрузки раз дражает. Средства работы с SQL Server Обсудим графические компоненты и утилиты командной строки. Графические утилиты CLICONFG.EXE — утилита конфигурирования клиентского ПО. SQL Server 8.0 может использовать библиотеки Named Pipes, TCP/IP, Mul tiprotocol, AppleTalk, VINES. Утилита служит для установ ки поддержки этих библиотек для указанного компьютера и измене ния протокола, используемого по умолчанию (т. е. Named Pipes). Cliconfg.exe также выводит сведения об установленных сетевых биб лиотеках и позволяет изменять параметры (рис. 17). PROFILER.EXE — SQL Profiler, утилита анализа работы сервера. Позволяет отслеживать большое количество событий и организовать аудит системы на уровне С2. Поскольку основные компоненты SQL Server создают «настоящие» события, утилита профилирования спо собна перехватывать их и очень точно фиксировать процессы на сер вере: исполнение команд Transact SQL, вызов хранимых процедур (включая использование кэша, компиляцию, собственно исполне ние), блокировки (с указанием типа), работу с курсорами, журнала ми событий и транзакций и т. д. Для каждого события отслеживается ряд параметров. Администратор сможет определить имя приложения, идентификатор объекта в БД, к которому выполнялось обращение, идентификатор индекса, процесса, загрузку процессора и т. п. Под робнее мы поговорим об этой утилите в главе 2.
www.books-shop.com
ГЛАВА
Рис.
Установка SQL сервер 2000
7.
27
Перечень сетевых библиотек, настраиваемых
— консоль управления службами. Позволяет за пускать, останавливать сам SQL Server, SQL Server Agent, Distributed Transaction Coordinator и службу обеспечения полнотекстового индек сирования и поиска. Вы можете указать любой сервер в сети и запус тить эти службы для него. ISQLW.EXE — Query Analyzer, утилита выполнения произвольных (ad hoc) запросов. Позволяет выводить графические планы исполне ния запросов, представлять результаты в виде таблиц (аналогично выводу в объекте Grid, если Вы когдалибо создавали формы сред ствами Visual Basic или Visual FoxPro). В Isqlw.exe использовано цве товое выделение синтаксических конструкций. Утилиты командной строки (каталог Binn) Ниже описаны утилиты командной строки, которые ставит SETUP, в том числе и те, что более не поставляются. Имя файла Вср.ехе Bii
Краткое описание Утилита массивного ввода данных в БД, извлечения из БД. Утилита из набора примеров. Позволяет «осмысленно» вставлять двоичные данные в режиме массивного копиро вания. Особенно полезна при размещении в поле Image данных из двоичных файлов, лежащих в некотором каталоге.
www.books-shop.com
Microsoft SQL
2000, Новейшие технологии (продолжение)
Имя файла Console.exe
Dcomscm.exe
Isql.exe
Langinst.exe
Makepipe.exe Odbcping.exe Odbccmpt.exe
Краткое описание Утилита конфигурирования сервера. Утилита отображения сообщений при создании страховоч ных копий, восстановления из копии на диск или ленту. В качестве параметров принимает имя сервера и имя именованного канала СОМкомпонент, используемый для программного управления сервером, получения информации о состоянии его служб. Компонент подсистемы репликации. Это один из агентов подсистемы репликации, отвечающий за передачу данных, подлежащих репликации, от серверадистрибьютора к серверам Утилита запуска на исполнение пакетов службы Data Transformation services. Утилита вызова мастера службы Data Transformation Services. Позволяет передавать мастеру полный или частичный набор параметров. В результате исполнения мастер создает пакет, содержащий инструкции по работе с данными. Консольная утилита работы с SQL Server. Позволяет выпол нять подключение, исполнять запросы. В качестве параметра можно передать на исполнение сценарий TSQL. Для под ключения к серверу она единственная использует DB Library. Мастер настройки индексов. Его можно вызывать из командной строки с передачей параметров и выдачей результата исследований в файл. Утилита удаления текущей инсталляции SQL Server версии 6х. Утилита установки альтернативного языка вывода сообщений. Утилита конфигурирования и запуска агента чтения журнала транзакций, участвующего в репликации. Больше не устанавливается Больше не устанавливается Позволяет установить или снять режим совместимости для ODBCдрайвера.
www.books-shop.com
1: Установка SQL сервер 2000
Osql.exe
29
(продолжение) Консольная утилита работы с SQL Server. Позволяет вы полнять подключение, исполнять запросы. В качестве пара метра может принять на исполнение сценарий SQL. Для подключения к серверу утилита использует ODBC.
Readpipe.exe Больше не устанавливается. Rebuildm.exe Утилита перестройки БД Master. Regrebld.exe
Больше не устанавливается (для восстановления реестра используйте SETUP).
Replmerg.exe Часть системы репликации SQL Server. Конфигурирует и запускает агент слияния при репликации сведением (Merge replication). Replupd.exe
Часть системы репликации SQL Server. Используется для пе реноса параметров репликации с сервера предыдущей версии.
Scm.exe
Утилита управления службами сервера. Позволяет в командной строке проверять статус службы, запустить ее, останавливать, удалять, модифицировать и т. д. Scm.exe Silent
Action 6 Service
— эта команда останавливает службу MSSQLServer. Snapshot.exe Часть системы репликации SQL Server. Выполняет конфигурирование и запуск агента при репликации средствами «моментальных снимков» (Snapshot replication). Sqlagent.exe
Исполняемый файл службы SQL Server Agent. Утилита сбора информации о текущем состоянии SQL Server и компьютера, на котором он работает. Результат обследования выводится в текстовый файл расположенный в том же каталоге, что и журналы ошибок сервера. Файл содержит следующие основные разделы: Registry Information; Version Information — кроме сведений о версиях основных компонентов сервера, выводятся результаты исполнения запросов системными хранимыми процедурами sp_who, sp_lock, sp_helpdb, xp_msver, Sysprocesses; Input buffer Dead locks;
www.books-shop.com
Microsoft SQL
30
2000, Новейшие технологии (продолжение)
Имя файла
Краткое описание OS Version Report; System Report; Video Display Report; Drives Report; Memory Report; Services Report; Drivers Report; IRQ and Port Report; Devices; DMA and Memory Report; Devices; Environment Report; Network Report. Утилита очень удобна для ситуаций, когда необходимо обратиться в службу технической поддержки. Исполняемый файл Мастера, выполняющего полнотексто вое индексирование указанной базы данных.
Sqlmaint.exe
Утилита выполнения различного рода задач по сопровождению сервера. Исполняемый файл службы Компонент системы установки.
Textcopy.exe Утилита копирования крупных массивов текста или двоич ных данных в поля типа Text и Image. Очень полезная и недокументированная утилита. Пример использования см. в файлах Pubimage.bat и Pubtext.bat. Утилита переключения между разными версиями сервера, установленными на одном Генератор нагрузки для мастера настройки индексов. Трансфер — агент — часть подсистемы репликации. Вопросы совместимости версий, миграция Учитывая большое количество установленных SQL Server предыду щих версий, огромный объем накопленных данных, тысячи и тысячи строк кода хранимых процедур и триггеров, а также полностью пере
www.books-shop.com
ГЛАВА 1:
SQL сервер 2000
по сравнению с версиями 6.x формат хранения, стоит ли удивляться, что в SQL Server 8.0 входит набор компонентов, специ ально предназначенных для перевода БД в новый формат.
Два сервера на одном компьютере Если на компьютере стоял SQL Server версии 6.x, то, установив SQL Server 2000, Вы сможете переключаться между серверами. Для этого в папке, описывающей меню запуска программ, создается дополни тельная папка Microsoft SQL server switch, содержащая два ярлыка: Microsoft SQL Server 6.x и Version Upgrade Wizard. Под 6.x я подразу меваю номер версии SQL Server, на которую Вы будете переключать ся. При выборе команды Microsoft SQL Server 6.x запускается утилита Vswitch.exe с параметрами: )SwitchTo 65. Утилита Vswitch.exe принимает параметр Silent. Он может иметь значения: 0 (по умолчанию) — при переключении не выводится ни каких сообщений; 1 — утилита работает в режиме графического ин терфейса. В процессе работы SETUP копирует ключи реестра из резервного хранилища в позицию для активной работы. При наличии версии 7.0 Вы можете поставить именованный эк земпляр версии 8.0, и оба сервера смогут работать параллельно. Естественно, в реальной рабочей ситуации нет смысла держать на одном компьютере две версии SQL Server. По большому счету это сто ит делать либо для тестирования, либо для конвертирования суще ствующих БД. Тут нам самое время поговорить о мастере по обновле нию БД (Upgrade Перенос баз данных предыдущих версий Перенос можно выполнить прямо в процессе установки сервера или после того, как все заработало. Если у Вас сервер версии 7.0, то все просто; перевод в новый формат версий 6.0 и 6.5 потребует больших усилий. Перенос БД версии 7.0 «Восьмерку» можно поставить «рядом» с версией 7.0 или вместо нее. Установка именованного экземпляра оставит предыдущую версию в неприкосновенности, а установка стандартного экземпляра уничто жит существующую установку 7.0 и заменит ее на SQL Server 2000. Учтите, что даже при установке именованного экземпляра комплект инструментов версии 7.0 будет заменен на инструментарий от SQL Server
www.books-shop.com
32
Microsoft SQL Server 2000. Новейшие технологии
Puc. 18. Можно копировать, а можно и перемещать базы данных. Если версия 7.0 сохраняется, Вы можете вызвать мастер по копи рованию БД и перенести всю БД предыдущей версии в формат 8.0. Мастер спросит имена серверов, участвующих в копировании, про верит права доступа и покажет список БД. Существующую БД пере нести нельзя. Если же ее нет, то БД можно скопировать или переме стить с одного сервера на другой (рис. 18). Проанализировав размеры файлов переносимой БД, проверив на личие места на диске, мастер выводит диалоговое окно, предлагая Вам подтвердить выбор. Если чтото Вас не устраивает, щелкните кнопку Modify (Изменить) и укажите иное место для размещения файлов (рис. 19). Следующие экраны мастера позволяют указать набор объектов, которые будут копироваться, и то, насколько широко мастер должен исследовать взаимосвязь переносимых объектов. Получив Ваши от веты, мастер предложит выбор: процесс копирования/пе ремещения немедленно или сохранить описание процесса как пакет DTS (Data Transformation Services) и выполнить его в определенное время ила просто сохранить для дальнейшего использования. Мастер создает пакет вот такой структуры (рис.
www.books-shop.com
ГЛАВА
SQL сервер 2000
33
Мастер предлагает указать место для расположения файлов БД.
Рис. 110.
Структура пакета переноса базы данных.
www.books-shop.com
Microsoft SQL Server 2000, Новейшие технологии Пакеты DTS мы детально обсудим в самостоятельной главе. Перенос БД SQL Server На компьютере с версией 6.5 Вы можете ставить SQL Server 2000 в любом варианте: как стандартный и как именованный экземпляр. В любом случае SQL Server 6.5 остается нетронутым, и наличие про граммы переключения позволяет использовать либо одну, либо дру гую версию, в общем, как это было с 7.0. Если Вы решите перевести БД в новый формат, к Вашим услугам SQL Server Upgrade Wizard. Я не стану вдаваться в подробности работы с мастером — процесс практически аналогичен тому, что было в предыдущей версии. Если хотите, загляните в Приложение 1 — там я поместил текст из преды своей книги, посвященной версии 7.0. Незначительные отли чия в интерфейсе, в остальном все то же самое. Если будете читать, просто представляйте себе «8.0» вместо «7.0». Если Вы не читали пре дыдущую книгу, загляните — Вы найдете там немало интересного о механизме перевода плюс описание утилит, которые могут приго диться не только при переводе БД, но и в повседневной работе. ВНИМАНИЕ! Если Вы хотите сохранить SQL Server 6.5 и установить име нованный экземпляр SQL Server 2000 (и переключаться между версия ми), установите SQL Server Service Pack (SP5) на SQL Server 6.5, прежде чем ставить SQL Server 2000. Перенос БД SQL Server 6.0 He может быть! Вы что, до сих пор не меняли версии? Ну, Вы даете! Подождите еще немного, и единственным способом перенести Ваши данные будет использование промежуточного формата типа ВСР. Пока же у Вас два варианта: сначала перейти на версию 7.0 и с нее на SQL Server 2000, либо перейти на 6.5 и оттуда на SQL Server 2000. Заключение Итак, у Вас есть установленная и работающая версия SQL Server 8.0. Пора начать разбор его основных компонентов. В следующей главе я подробно рассмотрю интерфейс администратора.
www.books-shop.com
Глава 2
Управление
сервером
Не секрет, что работа с любым серверным приложением может быть разделена на две части: использование в качестве среды разработки и администрирование в тестовом или рабочем Админист рирование, на мой взгляд, занимает больше времени чем разработка (многие приложения эксплуатируются годами без особенных моди фикаций), поэтому мы начнем разговор о работе с SQL Server имен но с вопросов управления. Консоль администрирования Итак, Вы успешно установили SQL Server — давайте работать. Сна чала я расскажу об одиночном сервере, а затем — о групповом адми нистрировании серверов в масштабе предприятия. К выходу версии 8.0 использование Microsoft Management Console (ММС) превратилось из эпизодического явления в норму, все ад министративные компоненты Windows 2000 используют среду (рис. 21). Подключение множества серверов к единому адми нистратора — не самое интересное, что по силам ММС. Гораздо важ нее, что ММС — это контейнер, где можно разместить любой ActiveX компонент, в том числе созданный Вами. Возможности расширения среды администрирования теперь просто безграничны. Посмотрим, как это работает. Я создал на VB несложный ActiveXкомпонент, получающий с сер вера информацию о версии, типе процессора, авторском (Copy right) и т. д. Для подключения к серверу и сбора данных компонент использует SQL DMO — мощный набор объектов, открывающих до ступ почти к любому аспекту функциональности SQL Server, от со здания новой БД до регистрации пользователя. Анализ SQL DMO мы оставим на потом — всему свое время. Меня больше интересует фун
ММС с точки зрения размещения пользовательских компонентов.
21. консоли.
Всеми серверами предприятия можно управлять из единой
Создайте новый проект на VB: он должен иметь тип ActiveX Cont rol, из элементов интерфейса у него будут три поля ввода: для имени сервера, имени пользователя и пароля. Нам понадобятся также объект Label с текстом пояснения и кнопка, в методе Click которой будет заключен основной функциональный код. ' Сначала создаем объект SQLServer и переменную, которая будет определять, выполнено соединение или нет Dim oSqlServer As New SQLServer Приложение работает быстрее всего при использовании
www.books-shop.com
ГЛАВА 2: Управление сервером ' раннего связывания (Early binding) Dim As Boolean Это код метода кнопки Private Sub If Not Then
= True End If cVersion = oSqlServer.VersionString Response = Server version") End Sub Инициализируем начальное значение переменной Private Sub = False End Sub Созданный, откомпилированный и зарегистрированный компо нент подключим к консоли администратора, выбрав в меню Console команду Add/Remove Появится диалоговое окно; щелкните кнопку Add... и в открывшемся списке выберите команду General Control. Вы увидите перечень зарегистрированных в системе объек тов. Созданный компонент должен иметь имя SqlVersion.UserControll или иное в зависимости от назначенного имени проекта. Выберите его в списке, введите имя, под которым объект будет виден пользова телю (я «Мой первый компонент»), и щелкните кнопку Finish. Компонент сразу появится среди зарегистрированных объектов. Вве дите в соответствующие поля имя сервера, идентификатор пользова теля и пароль. Щелкнув кнопку «Вывести версию сервера», Вы уви дите диалоговое окно (рис. 22). Чтобы добавлять новые компоненты в консоль, Вам надо рабо тать в режиме «Автора» (Author mode). Для перехода в него щелкните меню ММС, выберите команду Options и в появившемся окне выбе рите флажок Always open console files in mode (Всегда открывать консоль в авторском В левой панели ММС на самом высоком уровне расположены группы серверов, которые можно раскрыть для получения доступа к индивидуальным серверам в группе, на следующем уровне — группы более мелких объектов и т. д. Получается древовидная структура пред
www.books-shop.com
38
Microsoft SQL Server 2000, Новейшие технологии
ставления элементов, доступных для администрирования; внедрить компонент можно для любого зарегистрированного сервера, на лю бом
22. Включение компонентов неограниченно расширяет возможности консоли администратора.
Это тем более важно, что ММС не поддерживает администриро вание серверов версии 6.x. ActiveXкомпоненты позволяют создать средства администрирования для серверов младших версий, избавив тем самым администратора от необходимости на одной машине дер жать два комплекта административных инструментов. Когда лень думать, или «Мастера вызывали?» В новой версии выбор мастеров стал богаче. Многие вещи удобнее делать средствами графического интерфейса. Но кто же спорит с тем, что надо иметь представления хотя бы об основах баз данных, индек сов, системы безопасности и пр., — ведь мастер только предлагает несколько вариантов, не объясняя последствий выбора того или ино го. Мастер вызывается из списка, выводимого щелчком кнопки с «волшебной палочкой» (рис. 23):
www.books-shop.com
ГЛАВА 2; Управление сервером
Рис. 23. Щелкните эту имеющиеся мастера.
39
и Вам на помощь придут все
Как видите, мастеров немало, пожалуй, даже больше, чем в любом другом продукте Microsoft. Помимо вызова из списка, некоторые ма стера появляются при попытке создания новых объектов БД ствующей командой из контекстного меню консоли администриро вания (рис. 24).
24. К Вашим услугам большое количество помощников. Новая функциональность сказалась и на составе мастеров. Неко торые помощники вынесены из показанного списка: видимо, разра ботчики SQL Server 2000 решили, что их будут вызывать редко и не стоит загромождать окно. О мастерах переноса БД предыдущих фор матов мы уже говорили. Некоторые мастера перечислены ниже. Под робнее об индивидуальных мастерах мы поговорим при описании соответствующих операций с сервером. Мастер
Назначение
Register Server
Помогает зарегистрировать SQL Server.
www.books-shop.com
Microsoft SQL Server 2000, Новейшие технологии
40 Группа Database Create Database
Помогает создать новую базу данных.
Create index
Помогает создать новый индекс для выбранной таблицы.
Create login
Помогает создать нового пользователя SQL Server и назначить ему привилегии для доступа к БД.
Create Stored procedures
Помогает создать хранимую процедуру для добавления, удаления или модификации записи.
Create View
Помогает создать
FullText Indexing
Помогает проиндексировать текстовую информацию для выполнения поиска.
Группа Data Transformation services DTS export
Помогает создать пакет для использования подсистемой трансформации данных для экспорта разнородных данных из таблиц Microsoft SQL Server.
DTS import
Помогает создать пакет для использования подсистемой трансформации данных для импорта разнородных данных в БД Microsoft SQL Server.
Группа Management Backup
Помогает создать страховочную копию базы данных.
Copy Database
Новый мастер. Помогает перенести БД с одного сервера на другой, в том числе и с обновлением формата хранения с версии 7.0 до версии 8.0.
Create Alert
Помогает создать оповещение (Alert).
Create Job
Помогает создать задание (Job).
Database Maintenance Plan
Помогает создать набор заданий по сопровождению БД, привязанных к определенному графику испол нения. Работает совместно с утилитой точнее, представляет к ней графический интерфейс.
Tuning
Помогает определить оптимальный набор индексов для таблицы или группы таблиц.
Make Master Server Помогает создать мастерсервер.
www.books-shop.com
ГЛАВА 2:
Управление сервером
41
(продолжение) Make Target Server Помогает создать целевой (подчиненный) сервер и подключить его к мастерсерверу при администрировании групп серверов. Web Assistant Помогает создать задачу по выводу результатов запроса в формате HTML, импорта данных и HTML страницы или запускает ранее созданную задачу. Группа Replication Configure Publishing Помогает настроить сервер публикаций и сервер and Distribution дистрибьютор. Помогает определить набор данных, открытых для Create Publication репликации. Pull Subscription Помогает настроить сервер публикаций для принудительной (push) пересылки данных на серверподписчик. Push Subscription Помогает настроить серверподписчик для сбора публикуемых данных с сервера публикаций. Disable Publishing Отключает репликацию. and Distribution Как видите, основная часть мастеров сохранила свои позиции, ма стер по переносу версии 6.x выпал из списка и присутствует только как исполняемый файл с компонентами сопровождения, а некото рые просто поменяли название, практически сохранив свою функци ональность. Некоторых мастеров более нет. Профиль трассировки теперь будете создавать сами. Регистрация нового сервера Прежде чем начать администрирование сервера, его, как и в версии 7.0, нужно зарегистрировать. Локальный сервер регистрируется автома тически. Серверы, установленные гдето еще, нужно регистрировать вручную. Чтобы регистрация прошла успешно, лучше заранее запус тить службу Это можно сделать либо через приложе ние Services в панели управления, либо средствами SQL Server Service Manager (рис. 25). Есть и третий способ: в окне Command Prompt вве сти команду net start но это не так эффектно (кстати, для именованных экземпляров сервера следует вводить net start
www.books-shop.com
42
Microsoft SQL Server 2000. Новейшие технологии
Рис. 25. инструмент запуска и остановки основных и вспомогательных служб SQL Server. Если Вы обратились к SQL Server Service Manager, выберите в списке имя сервера, имя службы и щелкните кнопку Start/Continue. Когда в строке состояния появится сообщение — Run ning, вернитесь к административной консоли. В меню выберите ко манду Action и в раскрывшемся меню — команду Register При первой регистрации мастер предложит свои услуги. Если Вы в себе уверены, можете отказаться от его помощи. Мастер спросит об имени сервера, способе пользователя и группе, в ко торую поместить новый сервер. Проверка средствами Windows озна чает, что пользователь, успешно зарегистрировавшийся в домене и добавленный в список пользователей SQL Server, не проходит допол нительной проверки на сервере. Считается, что у него есть права на доступ. Дальнейшие проверки относятся только к привилегиям рабо ты с объектами той или иной БД. При проверке средствами SQL Server аутентификация, выполненная Windows не учитывается, и SQL Server еще раз проверяет права на доступ к самому серверу и права на работу с объектами. При этом пользователь должен ввести свой иден тификатор и пароль. SQL Server сохранил идентификатор пользователя (Login) SA. Как и раньше, это имя обеспечивает пользователю широкие полномочия и при создании ассоциируется с пустым паролем. ВНИМАНИЕ! Не пренебрегайте предупреждением на этапе установки сервера, придумайте пользователю пароль посложнее и забудьте о его существовании. Гораздо спокойнее работать от имени иного пользователя, включенного в группу системных администраторов.
www.books-shop.com
ГЛАВА 2;
сервером
43
Как и ранее, SQL Server 2000 позволяет администрировать группу серверов с одним, центральным сервером. Интерфейс Для любого сервера, зарегистрированного в административной кон соли, отображается дерево основных компонентов. Все объекты де рева поддерживают контекстное меню, вызываемое щелчком правой кнопки. Сведения об объекте выводит команда Properties. Щелчок имени индивидуального сервера вызывает HTMLстраницу с двумя вкладками: первая — с общей информацией о сервере, вторая — со списком мастеров, позволяющих выполнить базовые операции с сер вером (рис. 26).
Щелчок БД вызывает страницу с информацией о выбранной базе (рис. 27). HTMLстраницы предоставляют доступ к широкому набору фун кций по работе с сервером и установленным на нем БД. То же самое можно получить по правому соответствующего объекта, но подобная группировка административных задач также представляет интерес. Мне кажется, что после первой недели работы HTMLстра
www.books-shop.com
44
Microsoft SQL Server 2000, Новейшие технологии
ница в значительной степени теряет свою полезность и только раз дражает своей медлительностью, когда Вы случайно щелкнули саму БД вместо того, чтобы раскрыть список нижележащих объектов. Что бы избавиться от TaskPad, щелкните правой кнопкой сервер или БД, и в контекстном меню Вы увидите команду View, раскрывающуюся в подменю. В списке вариантов отображения информации выберите команду Taskpad, и галочка, говорящая о ее активности, должна ис чезнуть. Теперь Вам будут показывать только стандартные значки объектов следующего уровня, и сервер не станет каждый раз тратить время на сбор информации о текущей БД.
Puc. 2 7. Для отображения общей информации об основных объектах используется HTMLстраница.
Чтобы модифицировать параметры регистрации, щелкните правой кнопкой имя зарегистрированного сервера и в контекстном меню выберите команду Edit SQL Server Registration. Появится диалоговое окно вроде этого (рис. 28):
www.books-shop.com
Управление сервером
ГЛАВА 2;
28.
45
Доступ к серверу можно организовать поразному.
Здесь можно указать, выводить ли системные таблицы (флажок Show System Databases And System Objects) и будет ли сервер старто вать автоматически при попытке подключения (флажок Automatically Start SQL Server When По умолчанию эти режимы актив ны. Чтобы не слишком загружать интерфейс, спрячьте системные объекты. Я их пока оставлю видимыми, так как сначала нужно разоб раться с новинками версии 8.0. Параметры настройки SQL Server Установить параметры сервера можно через графический интерфейс Microsoft Management Console или средствами хранимой процедуры которая вызывается так: sp_configure <имя Без параметров выводит текущие значения параметров. Вызов этой процедуры без параметров или только с первым параметром по умолчанию разрешен любому пользователю, а для назначения второ го параметра по умолчанию — только системному администратору. Продвинутые параметры (Advanced Options) не видны, если «Show advanced options» = 0; по умолчанию установлено значение 1 (в вер 6.x оно было 0 по умолчанию). Для отображения продвинутых параметров используйте Графический интерфейс не по Ⱦɚɧɧɚɹɜɟɪɫɢɹɤɧɢɝɢɜɵɩɭɳɟɧɚɷɥɟɤɬɪɨɧɧɵɦɢɡɞɚɬɟɥɶɫɬɜɨɦ%RRNVVKRS ɊɚɫɩɪɨɫɬɪɚɧɟɧɢɟɩɪɨɞɚɠɚɩɟɪɟɡɚɩɢɫɶɞɚɧɧɨɣɤɧɢɝɢɢɥɢɟɟɱɚɫɬɟɣɁȺɉɊȿɓȿɇɕ Ɉɜɫɟɯɧɚɪɭɲɟɧɢɹɯɩɪɨɫɶɛɚɫɨɨɛɳɚɬɶɩɨɚɞɪɟɫɭ[email protected]
Microsoft SQL Server 2000. Новейшие технологии
46
зволяет произвести эту настройку. Чтобы настроить сервер первым способом, щелкните правой кнопкой его имя и в контекстном меню выберите команду Properties. Появится диалоговое окно с несколь кими вкладками. Вкладка General Содержит общие сведения о сервере и его параметрах.
29.
Вкладка General.
Флажки на этой вкладке позволяют назначить атрибут Autostart таким службам, как сам SQL Server, SQL Server Agent, управляющей подсистемой исполнения заданий, и MS DTC — координатору рас пределенных транзакций. Этого же Вы добьетесь с помощью прило жения Services панели управления Windows. Вкладка Memory Позволяет назначить выделение памяти для службы. SQL Server 8.0 способен динамически управлять распределением памяти. Ему также можно назначить фиксированный размер памяти в соответствии с объемом физической памяти Вашего компьютера. Можно указать верхний и нижний пределы, в которых должен умес титься сервер.
www.books-shop.com
ГЛАВА 2; Управление сервером
210.
4?
Вкладка Memory,
При динамическом управлении памятью Lazy Writer — процесс, ответственный за наличие свободных страниц памяти для размеще ния данных, — периодически опрашивает систему для определения объема свободной памяти. При этом кэш размещения данных дина мически расширяется или сжимается с целью сохранения свободного объема около 5 Мб. Это предохраняет систему от обращения к файлу подкачки (Paging). Рекомендуется использовать динамическое управление памятью. Назначая фиксированный объем, не забудьте, что Windows требует около 16 Мб, учтите также потребности других приложений (если система не обслуживает исключительно SQL Server). Если SQL участвует в репликации и играет роль дистрибьютора (Distribution server) или совмещает роли издателя (Publishing server) и дистрибью тора, ему требуется минимум 16 Мб памяти. Обратите внимание и на цветную полоску над регулятором, которым Вы устанавливаете фик сированный размер памяти. Зеленый участок отображает объем па мяти, который можно выделить серверу без «удушения» ОС. Желтый и красный — указывают на то, что это опасная зона и перемещение движка слишком далеко влево может оставить сервер на «голодном
www.books-shop.com
48
Microsoft SQL
2000. Новейшие технологии
пайке». Перемещение движка далеко вправо оставит слишком мало памяти для нормальной работы ОС. При указании динамического выделения памяти в некотором ди апазоне, Вы сможете настроить компьютер для совместного исполь зования ресурсов SQL Server и других приложений, хотя, если памяти для запуска нового приложения остается менее 5 Мб, сервер и так отдаст часть используемых ресурсов. Дополнительно можно настро ить объем памяти для индивидуальных запросов (счет чик Minimum query memory). Чтобы указанный объем памяти был постоянно зарезервирован для сервера, выделите флажок Reserve physical memory for SQL Server. Если Вы получаете сообщение о том, что для выполнения запроса не хватает памяти, пересмотрите на стройку SQL Server. Дополнительную информацию о текущем состоя нии сервера Вы получите средствами Монитора производительности. С версии Windows 4.0 Enterprise Edition ОС предоставляет до 3 Гб памяти, a Windows 2000 DataCenter под держивает до 64 Гб. Так что SQL Server 2000 Enterprise Edition можно использовать на компьютере, оснащенном 32 процессорами и 64 Гб оперативной Установка вступает в действие после перезапуска SQL Server. Ана логичная настройка средствами выполняется так: sp_configure memory, <значение: 0 ) динамическое управление, >0 фиксированное число Вкладка Processor Позволяет настроить SQL Server для работы на компьютерах, оснащен ных более чем 1 процессором. SQL Server можно установить на компь ютерах с симметричной многопроцессорной архитектурой SMP, име ющих до 32 (в случае Windows 2000 DataCenter) процессоров. Здесь можно определить, какие процессоры будет использовать SQL Server (при настройке средствами это параметр Affinity Mask). Раздел управление процессором (Processor Control) позволяет уста новить параметр Maximum Working Threads, определяющий размер пула для обслуживания пользовательских соединений, сетевых ресур сов и службы Checkpoint, сбрасывающей на диск грязные (Dirty) стра ницы с модифицированными, но не записанными на диск данными. По умолчанию число рабочих потоков (Working Thread) равно 255. При относительно небольшой загрузке сервера каждому пользова тельскому соединению выделяется персональный поток. По мере ро ста числа подключений у администратора может возникнуть
www.books-shop.com
ГЛАВА 2;
Управление сервером
ние увеличить значение параметра. Далеко не всегда это повышает производительность. Дело в том, что даже если единовременно под ключенных к серверу пользователей сотни или тысячи, с точки зре ния SQL Server, значительная часть соединений пребывает в состоя нии ожидания действий пользователя. Получив запрос на выполне ние задания, SQL Server обращается к пулу рабочих потоков, чтобы найти там поток, доступный для обслуживания запроса. Обнаружив таковой (так обычно и бывает), SQL Server передает ему запрос на выполнение — следовательно, увеличивать размер пула стоит, только когда от сервера постоянно приходит сообщение об ошибке, говоря щее, что свободных потоков не хватает (The working thread limit of N has been Сервер следит за использованием потоков и унич тожает незанятые. Новые потоки в пределах указанного числа созда ются по мере необходимости. Пул рабочих потоков позволяет сохранять пользовательские со единения на длительное время. Поддержание постоянных соедине ний эффективнее частых подключений и отключений от сервера, так как ресурсы расходуются экономнее, а рабочие потоки создаются и уничтожаются сервером по мере надобности. Настройка вступает в действие сразу после назначения. Следующий параметр, регулируемый на этой вкладке, относится к приоритету (Priority boost), который назначается процессу, обслу живающему SQL Server. По умолчанию SQL Server исполняется с обычным приоритетом (Normal priority) — 0. Если компьютер обслу живает только SQL Server, приоритет исполнения процесса можно повысить до высокого (High priority) — Если на компьютере испол няются иные приложения, повышение приоритета SQL Server может привести к тому, что остальные приложения останутся на «голодном пайке». Если же Вы повысите приоритет и сервер, не дай начнет сбоить, то, имея высокий приоритет исполнения, он может пресечь все Ваши попытки добраться до него. Еще один флажок в этом разде ле указывает, будет ли сервер использовать легкие потоки Windows 2000 — нити (fiber). Версия 8.0 позволяет эффективно распараллелить исполнение зап росов. В разделе Parallelism администратор указывает число исполь зуемых процессоров при выполнении параллельной обработки degree of <число процессоров>). Мож но указать, что использоваться должны все доступные (Use all available processors) или ограничить их число, введя в поле Use processors значение: 0 — все доступные процессоры, 1 — подав ляет параллельное исполнение запросов, от 2 до 32 — определяет фак
www.books-shop.com
50
SQL Server 2000, Новейшие технологии
тическое число задействованных процессоров. При этом SQL Server создаст нужное число потоков. Заметьте: на этот параметр (он всту пает в действие сразу) влияет Affinity mask.
Puc. 211. Здесь Вы определяете, как будут использоваться все Ваши процессоры. Дополнительно можно определить стоимость исполнения запро са, на основании которой принимается решение о распараллелива нии Threshold for <значение от 0 до 32767>). На основании «стоимости» исполнения запроса SQL Server решает, исполнять ли данный запрос последовательно или распарал леливание повысит скорость исполнения. Если значение параметра Max degree of parallelism — 1 или если у компьютера только один про цессор, параметр Cost Threshold for Parallelism игнорируется. Настрой ка вступает в действие сразу.
Вкладка Security Позволяет указать способ проверки прав пользователей на доступ к SQL Server. Версия 8.0 поддерживает два режима аутентифика ции: средствами Windows и SQL Server.
www.books-shop.com
ГЛАВА 2: Управление сервером
51
Если хотите, чтобы сервер фиксировал в журнале попытки под ключения, выберите один из предложенных на этой вкладке пере ключателей. При выборе переключателя Success в журнале сервера и Windows будет фиксироваться успешные попытки подключения, Failure — неудачные, All — все попытки. По умолчанию выбран None, что означает, что не производится. На этой же вкладке модифицируется учетная запись, под именем которой исполняется SQL Server.
212, Эти параметры и определяют базовые элементы системы безопасности.
Вкладка Connections Здесь администратор настраивает обслуживание пользовательских соединений (рис. Поле ввода Maximum concurrent user connections (в случае sp_con figure это параметр user connections) определяет максимальное число пользовательских соединений, допускаемых сервером. Теоретически SQL Server поддерживает до 32 767 соединений, этот параметр регу лируется динамически.
www.books-shop.com
52
Microsoft SQL Server 2000, Новейшие технологии
Параметры в списке Default connection options можно установить и командой SET.
Рис. 213. Вкладка Connections позволяет определить допустимую нагрузку и уровень ANSIсовместимости сервера. Два переключателя в нижней части диалогового окна позволяют ото бражать сконфигурированные значения параметров (Configure Values) или текущие (Running Values) • Параметр Interim/Deferred constraint checking (Отложенная провер ка ограничений) (SET DISABLE_DEF_CNST_CHK определяет, как SQL Server проверяет соответствие новых данных наложенным ограничениям В основном этот параметр предназначен для сохранения совместимости с предыдущими вер сиями. В версии 6.x при значении OFF проверка выполняется сра зу для каждой модифицированной записи. Такой подход позволял избежать создания промежуточных таблиц, но мог привести к тому, что выполненные полностью модификации, соответствую щие наложенным ограничениям, будут отвергнуты при индивиду альной проверке. Пусть, к примеру, значение первичного ключа надо увеличить на 1. Допустим, у нас 10 записей со значениями
www.books-shop.com
ГЛАВА 2; Управление сервером ключа от 1 до 10. При попытке изменить значения для отложен ной проверки изменения будут приняты, так как по окончании модификаций уникальность ключа сохранится. В то же время при немедленной проверке операция будет отвергнута на первой же записи, так как будет нарушено условие уникальности значения ключевого поля. Если задано ON, SQL Server, дождавшись окон чания процесса модификаций, выполняет проверку. Если найде ны нарушения правил, изменения откатываются, и сервер сооб щает об ошибке. Отложенные проверки используют промежуточ ные таблицы, размер которых при значительном объеме модифи каций может выйти за разумные пределы. SQL Server 8.0 поддер живает функциональность, обеспечиваемую этим параметром за счет внутренней организации. Попытка выполнить команду: SET DISABLE_DEF_CNST_CHK OFF приводит к появлению сообщения: Warning. Line has no effect.
The option
is obsolete and
Параметр Implicit Transactions (Неявно определенные транзакции) (SET определяет автома тический/ручной механизм создания транзакций. При ON пользо вателю не понадобится команда BEGIN TRANSACTION — от него требуется только фиксировать или откатывать транзакции (коман дами COMMIT/ROLLBACK). Если пользователь не фиксирует транзакцию принудительно, то после отсоединения все изменения автоматически откатываются. OFF — результат исполнения всех индивидуальных команд фиксируется при успешном завершении (это режим autocommit). ODBCдрайвер для Microsoft SQL Server, разработанный Microsoft, и (Provider) для ра боты с SQL Server при соединении автоматически устанавливают режим IMPLICIT_TRANSACTIONS OFF. Приложения, исполь зующие по умолчанию также назначают IMPLICIT_ TRANSACTIONS OFF. Параметр закрывать курсор при фиксации транзакции (CURSOR_ CLOSE_ON_COMMIT) определяет, будет ли закрыт курсор после фиксации транзакции. Если режим активен, то при фиксации или откате транзакции все курсоры будут закрыты, что соответствует требованиям стандарта SQL92. Если режим неактивен, команда ROLLBACK закрывает только не заполненные данными асинх ронные курсоры. ODBCдрайвер для SQL Server, разработанный
www.books-shop.com
Microsoft SQL Server 2000, Новейшие технологии Microsoft, и OLEdBпровайдер для работы с SQL Server при со единении автоматически устанавливают режим CURSOR_ CLOSE_ON_COMMIT OFF. Приложения, использующие Db могут не менять текущего назначения, поэтому лучше все го использовать прямые указания этого параметра, чтобы быть уверенным, что результат работы клиентского приложения будет таким, как ожидалось. Параметр соответствие предупреждений стандарту ANSI (ANSI warnings) влияет на обработку ошибок. • ON — появление величины NULL в функциях агрегирования (SUM, AVG, MAX, MIN или COUNT) приводит к появлению предупреждения; OFF — предупреждение не выдается. • ON — деление на 0 и арифметическое переполнение приводит к откату выражения и выдаче сообщения об ошибке; OFF — деле ние на 0 и арифметическое переполнение приводит к возврату значения NULL. Последнее имеет место при попытке вставить или обновить значение в поле с типами данных character, uni code, binary, и длина нового значения превосходит максималь ное для данного поля. Если значение — ON, операция INSERT или UPDATE прерывается согласно стандар ту SQL92. Для полей с бинарными данными игнорируются за вершающие пробелы и NULL. Если OFF — данные урезаются до допустимой величины, и команда успешно завершается. ODBCдрайвер для Microsoft SQL Server, разработанный Mic rosoft, и OLEdBпровайдер для работы с SQL Server при соеди нении автоматически устанавливают режим ANSI_WARNINGS ON. Приложения, использующие по умолчанию на значают ANSI_WARNINGS OFF. Параметр обработка коротких строк (ANSI padding) — SET ANSI_ PADDING — определяет, как SQL Server обрабатывает строки, длина которых меньше определенной для полей типов char, varchar, или строки с завершающими пробелами. Учтите: назначение распространяется только на поля, создаваемые заново, — на созданные ранее смена параметров не влияет. ODBC драйвер для Microsoft SQL Server, разработанный Microsoft, и OLEdBпровайдер для работы с SQL Server при соединении авто матически устанавливают режим ANSI_PADDING ON. Приложе ния, использующие DbLibrary, также по умолчанию назначают ANSI PADDING OFF.
www.books-shop.com
ГЛАВА 2:
Управление сервером
Значение
char(n)
ANSI PAD Исходное значение дополняется DING = ON пробелами до достижения требуемой
ANSI_PAD DING = OFF
Изначально присутствовавшие завершающие пробелы удаля ются; дополнение пробелами не выполняется.
55 varchar(n) Исходное значение сохраняется; допол нение пробелами не выполняется; изначально при сутствовавшие завершающие про белы сохраняются.
Исходное значение сохраняется; до полнение завер шающими нулями не выполняется; изначально при сутствовавшие завершающие нули сохраняются.
Изначально присутствовавшие завершающие про белы удаляются; дополнение пробелами не выполняется.
Изначально присутствовавшие завершающие нули допол нение нулями не выполняется.
Параметр правила сравнения величин NULL (ANSI NULLS) — SET ANSI_ NULLS — определяет работу с NULL. По стандарту ANSI 92 при сравнении NULL=NULL или результатом должно являться значение False. При выполнении запроса с условием равенства поля NULL при актив ном режиме результатом будет 0 записей. Если есть параметр ANSI_NULLS OFF, запрос: SELECT
FROM
WHERE
= NULL
вернет записи, в которых поле fldname = NULL, тогда как тот же самый запрос при ANSI_NULLS ON вернет 0 записей. В этом слу чае получить набор записей, где некоторое поле имеет значение NULL, можно, используя конструкцию IS fldname NULL или средства функции ISNULL (fldname, В последнем варианте значения NULL меняются на указанное выражение. SELECT fldname FROM tablename WHERE SELECT fldname FROM tablename WHERE fldname IS NULL
=
При создании хранимых процедур назначение ANSI_NULLS за поминается и используется при каждом исполнении независимо от изменения установки ANSI_NULLS. В отличие от хранимых процедур исполняемые сценарии требуют включения проверок на Ⱦɚɧɧɚɹɜɟɪɫɢɹɤɧɢɝɢɜɵɩɭɳɟɧɚɷɥɟɤɬɪɨɧɧɵɦɢɡɞɚɬɟɥɶɫɬɜɨɦ%RRNVVKRS ɊɚɫɩɪɨɫɬɪɚɧɟɧɢɟɩɪɨɞɚɠɚɩɟɪɟɡɚɩɢɫɶɞɚɧɧɨɣɤɧɢɝɢɢɥɢɟɟɱɚɫɬɟɣɁȺɉɊȿɓȿɇɕ Ɉɜɫɟɯɧɚɪɭɲɟɧɢɹɯɩɪɨɫɶɛɚɫɨɨɛɳɚɬɶɩɨɚɞɪɟɫɭ[email protected]
'
•
•
•
•
•
Microsoft SQL Server 2000, Новейшие технологии
NULL, если Вы хотите, чтобы сценарий работал независимо от текущих Параметр реакция при делении на 0 или арифметическом переполне нии (Arithmetic Abort) — SET ARITHABORT — определя ет действия сервера при возникновении ошибок. При активном параметре деление на 0 или арифметическое переполнение приво дит к прекращению исполнения запроса или пакета команд (Batch) и откату транзакции. При неактивном параметре выдается предуп реждение, и пакет продолжает исполнение, будто все было нор мально. Если ARITHABORT = OFF и (см. ниже) также равно OFF, SQL Server возвращает NULL и выдает предуп реждение. Возникновение арифметической ошибки в процессе оценки выражения в команде INSERT или UPDATE приводит к прекращению исполнения запроса или пакета и выдаче сообщения об ошибке (как если бы имелась установка SET ARITHABORT ON). Параметр реакция при делении на 0 или арифметическом переполне нии (Arithmetic Ignore) SET ARITHIGNORE — влия ет только на выдачу сообщений об ошибке при переполнении или делении на 0, не влияет на операции INSERT, DELETE, UPDATE. Параметр использование кавычек (Quoted identifier) — SET QUOTED_ IDENTIFIER — определяет возможность применения ка вычек для ограничения имен объектов и строк. ON — для ограниче ния идентификаторов можно использовать двойные кавычки, для ограничения строк — одинарные. При этом идентификаторами мо гут быть ключевые слова, или в их состав могут входить символы, которые иначе применять недопустимо. OFF — применение иден тификаторов должно соответствовать правилам стро ки можно заключать в двойные или одинарные кавычки. Параметр уведомление о числе обработанных записей (No Count) — SET NO COUNT определяет, будет ли после испол нения запроса выдано сообщение rows affected». При работе в сети отключение режима уведомления может заметно сократить сетевой трафик, особенно это касается хранимых процедур, воз вращающих малые объемы данных. Парные параметры правила допустимости значения NULL во вновь создаваемых полях (ANSI NULL defined ANSI NULL OFF) SET ANSI_NULL_DFLT_ON / SET ANSI_NULL_DFLT_OFF — определяют, будет ли для вновь создаваемого поля задано правило NULL/NOT NULL. По умолчанию новые поля создаются с возможностью хранения там значений В зави симости от того, какой параметр активен, новые или модифици
www.books-shop.com
ГЛАВА 2:
5?
поля будут позволять помещение значения NULL. При своить обоим параметрам значение ON нельзя, a OFF — можно. Назначение одному из параметров значения ON автоматически приводит к тому, что другой получает OFF. Чтобы получить макси мально надежные результаты при создании или модификации таб лицы, прямо укажите ограничение NULL/NOT NULL — это изба вит Вас от неприятностей при работе с серверами, имеющими раз личные установки. Индивидуальное назначение перечисленных выше параметров вы полняет команда SET. При использовании процедуры ко торой в качестве параметра передается битовая маска, соответствующая активному (OFF) состоянию, параметры можно оп ределять группой. При составлении маски используются параметры: Значение Параметр
1
DISABLE DEF_
2
IMPLICIT TRANS ACTIONS CURSOR CLOSE_ ON_COMMIT ANSIJWARNINGS
He может использоваться совместно с ANSI_NULL_ DFLT_OFF. He может использоваться совместно с
ODBC, OLEdB ON DBLib OFF
DFLT ON. Для назначения группы параметров соответствующие значения суммируются, и результат передается как параметр. Для этого исполь зуется параметр user options: options
индивидуальных значений>
устанавливает назначения глобально в отличие от ко манды SET, которая устанавливает параметр, действующий в течение сессии пользователя, исполнения триггера или хранимой процедуры. Вкладка Server Settings • Параметр язык сообщений (Default Language) — SET language сообщений> определяет язык, используемый для вывода сообще ний сервера. Поддержка языка должна быть предварительно уста новлена. По умолчанию — us_english. • В разделе поведение сервера (Server behavior) Вы указываете воз можность прямой модификации системных таблиц (Allow modifica tions to be made directly to the system catalogs) — 1|0. Этот параметр определяет возможность прямых мо дификаций системных таблиц. По умолчанию прямая модифика ция командами UPDATE, INSERT, DELETE запрещена — все изменения выполняет только сам сервер, использующий для это го системные хранимые процедуры. Так как редактирование сис темных таблиц — процедура рискованная, Вам следует, вопервых, четко представлять, что Вы хотите сделать, а вовторых, не допус кать работы пользователей во время внесения изменений. Пара метр вступает в действие немедленно.
www.books-shop.com
ГЛАВА 2: Управление сервером В этом же разделе указывается возможность исполнения вложенных триггеров (Allow triggers to be fired which other triggers) — sp_con figure triggers', 0|1. При выполнении, скажем, каскадных мо дификаций, триггеры добавляют или удаляют записи в других таб лицах, которые в свою очередь могут иметь триггеры, модифици рующие другие таблицы, у которых тоже есть триггеры и т. д. Об щая глубина вложенности таких вызовов может достигать 32 (16 для версии 7.0). При модификации таблиц, триггеры которых уже включились в процесс, триггер повторно не запускается. Это по ведение вложенных триггеров можно изменить, назначив sp_dbop tion базы triggers' , 1|0. Для исключения ситуаций, когда единственный неграмотно по строенный запрос съедает все серверные ресурсы, в версию 8.0 включен параметр Use Query Governor To Prevent Queries Ex ceeding Specified Cost (Использовать администратора запросов для предотвращения операций превышающих указанный лимит), оп ределяющий, будет ли запросу, предполагаемая длительность ко торого больше указанного числа секунд, дано право на исполне ние. Обратите внимание на слово Сервер опре деляет, «пущать» или нет, еще на этапе построения плана испол нения. Речь не идет о том, что запрос исполняется до истечения указанного срока, После чего убивается. Сервер строит план, оп ределяет примерное время исполнения и принимает решение. SELECT * FROM [order details] a CROSS JOIN [order details] b, оче видно, совершенно бессмысленный, будет остановлен еще на по роге, а любителю экспериментов сообщат: Server: Msg 8649, Level 17, State 1, Line 1 The query has been canceled because the estimated cost of this query (21) exceeds the configured threshold of 1. Contact the system administrator. Действительно, декартово произведение двух небольших таблиц составляет более 4 000 000 записей. Следует также учитывать, что стоимость определяется для текущего состава оборудования и при установке дополнительной памяти или более мощных процессо ров, возможно, имеет смысл пересмотреть этот параметр. • Следующий параметр относится к компоненту сопряжения с по чтовыми системами (SQL Сервер включает средство, позво ляющее ему читать и отправлять почтовые сообщения, — SQL mail.
www.books-shop.com
Microsoft SQL Server 2000, Новейшие технологии
60
Для успешной работы SQL mail на компьютере с SQL Server сле дует сконфигурировать почтовый профиль, имя которого заносит ся в соответствующее поле ввода на описываемой вкладке. Последний раздел относится к «проблеме 2000 года». Установка, которую Вы сделаете определяет, как сервер станет интерпрети ровать даты, год который указан только двумя цифрами. Как ви дите, по умолчанию «переход в новое тысячелетие» выполняется на рубеже 50. Это значит, что все даты меньше 50 будут рассмат риваться как принадлежащее XXI веку (рис. 214). CREATE INSERT INSERT SELECT * FROM 2049)06)12 00:00:00.000 1987)06)12 00:00:00.000
) получаем результат:
Рис. Здесь Вы устанавливаете язык сервера, возможности прямой модификации системных таблиц и исполнения вложенных триггеров и решаете проблему 2000 года.
www.books-shop.com
ГЛАВА 2:
сервером
Вкладка Database settings Раздел параметры (Settings) позволяет указать характеристики всех со здаваемых БД. Они будут применяться по умолчанию, но их всегда можно изменить. • Степень заполнения индексных страниц при перестроении индексов (Default index Fill Factor to use when rebuilding indexes) — в Создавая или перестраивая индекс, можно указать степень заполнения страниц. Предлагается два ва рианта: неявный, установленный по умолчанию (считается опти мальным), и Fixed (выбираемый Вами). «Оптимальная» степень заполнения страниц подразумевает значение 0%. Это практичес ки аналогично 100% заполнения с тем исключением, что SQL Server станет резервировать свободное место на более высоких уровнях дерева, определяющего структуру индекса. Вряд ли стоит менять это глобальное назначение: всегда можно указать конкрет ную величину заполнения при создании очередного индекса. Здесь же Вы указываете, как сервер будет работать с устройством копирования на ленту: раздел создание/восстановление страховоч ных копий (Backup/Restore). Вы можете указать период ожидания, пока в накопитель будет вставлена лента (Timeout period). Значе ние 1 — сервер не станет дожидаться, 0 — будет сделана единич ная попытка, N — сервер будет ждать N минут. Значение парамет ра хранится в реестре Windows:
Тут же задается время хранения страховочных копий (Default media retention) — <число дней>. По умолчанию срок хранения 0 дней — бессрочно. При попытке пе резаписать страховочную копию до истечения установленного срока хранения SQL Server выдаст предупреждение. Раздел восстановление (Recovery) включает счетчик, позволяющий определить интервал восстановления (Recovery Interval) — в определяющий, как сер вер будет сбрасывать модифицированные страницы на диск. Этот па раметр влияет на время восстановления БД при запуске. В момент запуска сервер анализирует откатывает незавер шенные транзакции, окончательно фиксирует и записывает в БД (Roll forward) те, что в журнале помечены как зафиксированные, но изме нения не были записаны в базе (рис. 215).
www.books-shop.com
62
Microsoft SQL Server 2000, Новейшие технологии
Здесь администратор настраивает начальные размеры базы данных и некоторые параметры подсистемы создания страховочных копий. Две новые вкладки диалогового окна свойств позволяют вызвать мастер по настройке репликации или отключить сервер от этого про цесса и добавить сервер в список объектов активного каталога (рис. По большому счету первая вкладка — это альтернативный спо соб вызова мастеров настройки репликации. Параметры SQL Server Agent Щелчок правой кнопкой SQL Server Agent вызывает контекстное меню, установить параметры конфигурации этого ком понента. Как и в случае SQL Server, в диалоговом окне несколько вкладок.
www.books-shop.com
ГЛАВА 2:
63
сервером
mi
Две новые вкладки позволяют конфигурировать репликацию и регистрировать сервер в Active Directory. Вкладка General Эта вкладка содержит параметры трех групп (рис. 217). • Service startup account — определяет, под какой учетной записью исполняется служба SQL Server Agent. • Mail session — позволяет настроить компонент SQL mail. Здесь Вы указываете почтовый профиль, который будет задействован этим компонентом системы. Щелчок кнопки Test позволит отправить тестовое • Error log — определяет имя файла, куда записывается информа ция о работе SQL Server Agent. В отличие от предыдущей версии SQL Server 8.0 по умолчанию активизирует эту установку. Сам журнал обычно занимает относительно немного места, особенно если пометить флажок Write OEM file (Записывать журнал в OEM кодировке) — тогда вместо Unicode будет использоваться набор символов ANSI. Это особенно полезно, когда включен флажок Include execution trace messages (Включить сообщения трассиров ки). В таком случае журнал может расти довольно быстро. Дан ный режим годится только при некорректном сервера для локализации проблем. Дополнительно можно указать получа теля сообщений о возникающих ошибках.
www.books-shop.com
64
Microsoft SQL
2000, Новейшие технологии
Общие параметры SQL Server Agent. Вкладка Advanced • Раздел Restart Services позволяет назначить серверу и службе SQL Server Agent режим, когда при некорректном завершении работы система попытается принудительно перезапустить эти службы. • Раздел SQL Server event forwarding содержит средства настройки системы передачи сообщений на специально выделенный сервер. При работе с множеством серверов администратор может назна чить один из них для получения сообщений от других. Отметив флажок Forward events to a different server, можно задать имя серве ра — получателя сообщений, а в списке If error has severity of or above выбрать уровень, начиная с которого, сервер, столкнувшись с проблемой, начинает пересылать сообщения мастерсерверу. Учтите: сервер — получатель сообщения несет дополнительную нагрузку, выбирайте уровень ошибки аккуратно, чтобы этих сооб щений не было слишком много — не стоит перегружать сеть. Пе реключатели Events events и Unhandled events) позволяют ука зать, какого типа сообщения пересылать на определенный (все или только те, что локальный сервер не смог обработать). Сообщения попадают в раздел Application log журнала событий Windows 2000.
www.books-shop.com
2: Управление сервером
65
Idle CPU condition — при определении графика задания можно ука зать, что оно должно исполняться, когда процессор не занят дру гой работой. На вкладке расположены элементы ввода, позволяю щие «объяснить» серверу, что Вы понимаете под «незагруженным процессором». Указывается степень загрузки в процентах и интер вал, в течение которого нагрузка не должна превышать указанно го процента. Этот параметр применяется для подсистемы управ ления заданиями, при описании графика исполнения задания можно указать «Когда компьютер будет свободен» (рис.
218. Здесь определяет, что такое «процессор не занят», и указывает имя сервера — получателя сообщений об ошибках на других серверах.
Вкладка Alert system •
Address formatting for pager emails. Эта группа параметров опреде ляет форматирование передаваемых службой опове щений SQL Server на пейджер оператора или его почтовый адрес. Если отмечен флажок Include body of email in notification Page (Включить текст почтового сообщения в уведомление), на пейд жер будет передано тело самого почтового сообщения (рис. Здесь же определяется оператор последней надежды (Failsafe ope rator): он получит сообщение, когда остальные операторы поче мулибо недоступны. Ⱦɚɧɧɚɹɜɟɪɫɢɹɤɧɢɝɢɜɵɩɭɳɟɧɚɷɥɟɤɬɪɨɧɧɵɦɢɡɞɚɬɟɥɶɫɬɜɨɦ%RRNVVKRS ɊɚɫɩɪɨɫɬɪɚɧɟɧɢɟɩɪɨɞɚɠɚɩɟɪɟɡɚɩɢɫɶɞɚɧɧɨɣɤɧɢɝɢɢɥɢɟɟɱɚɫɬɟɣɁȺɉɊȿɓȿɇɕ Ɉɜɫɟɯɧɚɪɭɲɟɧɢɹɯɩɪɨɫɶɛɚɫɨɨɛɳɚɬɶɩɨɚɞɪɟɫɭ[email protected]
66
Microsoft SQL
2000, Новейшие технологии
Параметры текста рассылаемых сообщений и адресов рассылки. Вкладка Job system На этой вкладке настраивается служба исполнения заданий (рис. 220). • Раздел Job log Администратор настраивает журнал, куда за писывается история исполнения задания. Отметив флажок Limit size of job history log (Ограничить размер журнала с историей ис полнения задания), Вы установите дополнительные параметры, такие как общий размер журнала в строках: Maximum job history log size (Максимальный размер журнала для всех заданий) — по умолчанию 1 000 строк, и число строк для регистрации истории исполнения индивидуальных заданий: Maximum job history rows per job (Максимальный размер журнала индивидуальных заданий) — по умолчанию 100 строк. Здесь же и кнопка очистки журнала, и информация о текущем размере журнала. Таблица Msdb..sysjob хранит сведения об истории исполнения заданий. Если чис ло записей в ней достигает заданного предела, Вы не получите новой информации, не очистив ее. • Раздел Job execution Служба SQL Server Agent следит за собствен ным состоянием, так как для нее очень важно, чтобы задания ис полнялись в указанные сроки, записи в журнале событий Windows NT получали должное внимание, предупреждения (Alert)
www.books-shop.com
ГЛАВА 2:
сервером
67
лись по мере а операторы получали предназначен ные им Если речь идет о групповом управлении сер верами, служба SQL Server Agent головного сервера (я называю его контроллер SQLдомена) приглядывает и за серверамиучастни ками, исполняющими свою долю работы. Вы можете потребовать, чтобы SQL Server Agent автоматически заново запускал монитор и аккуратно завершал работу активного задания, получив указание на остановку (Shutdown) сервера. Раздел Non job step proxy account Флажок Only users with SysAdmin privileges can execute CmdExec and ActiveScripting job steps (Только члены роли SysAdmin могут исполнять включа ющие шаги типов CmdExec и ActiveScripting) позволяет ограни чить список тех, кто может исполнять шаги указанных типов. Если флажок снять, появится окно, в котором потребуется ввести имя и пароль для пользователя. Первая кнопка Reset Proxy Account (Переназначить учетную запись) позволяет впоследствии сменить имя или пароль. Вторая используется только при администриро вании SQL Server версии 7.0. Дело в том, что версия 7.0 использо вала жестко прописанную учетную запись sqlagentcmdexec для ис полнения такого типа заданий. Теперь же Вы сами выбираете имя учетной записи, которая будет задействована.
Рис. 220. заданий.
Здесь задаются параметры подсистемы исполнения
www.books-shop.com
68
Microsoft SQL
2000, Новейшие технологии
Вкладка Connection Раздел параметры соединения с сервером (SQL Server connection) опре деляет, под каким именем SQL Server Agent будет подключаться к сер веру (рис. 221). С точки зрения SQL Server, SQL Server Agent — один пользователь, требующий идентификации. На вкладке Con nection Вы указываете, какие средства будут выполнять проверку при попытке подключения: Windows или SQL Server. Для проверки сред ствами SQL Server указывается имя пользователя и пароль, под кото рыми SQL Server Agent будет подключаться к SQL Server. Для нор мальной работы учетная запись, под которой исполняется SQL Server Agent, должна быть членом роли (Role) SysAdmin. Поэтому, если по пытки запустить службу SQL Server Agent раз за разом оканчиваются неудачей, посмотрите в журнал, записывающий состояние этой служ бы. (Подробно о термине «роль» я расскажу в главе 4, пока же до вольно знать, что роль — это именованный набор прав в рамках сер вера или конкретной БД.)
Puc. 221. SQL Server Agent должен иметь возможность подключиться к серверу. Сообщение типа [105] SQLServer as SysAdmin, but
must be able to connect to is not a
www.books-shop.com
ГЛАВА 2; Управление сервером
gg
member of the role говорит о том, что данный не име ет необходимого набора привилегий. Параметр псевдоним SQL Server (SQL Server Alias) позволяет указать альтернативное имя сервера. При подключении к SQL Server по умол чанию применяются именованные каналы (Named pipes) с динамичес ким определением имени сервера, что не требует дополнительного па раметра и клиентского приложения. Если Ваше клиентское приложе ние обращается к серверу по иному транспорту или альтернативному именованному каналу, Вам надо описать такую конфигурацию для клиентского приложения. В поле для значения SQL Server Alias введи те имя локального хостсервера, используемого SQL Server Agent для соединения с SQL Server. Если SQL Server Agent исполняется на том же компьютере, что и SQL Server, это поле получает значение «default». Значения псевдонимов (Alias) хранятся в реестре Windows под ключом: Client\ConnectTo Стандартные операции Подключение и отключение от сервера
Чтобы получить доступ к ресурсам сервера, с ним нужно соединить ся. Это делается через меню Если сервер запущен, Вы увидите список его ресурсов — в противном случае сначала запустите сервер. Если хотите, чтобы служба стартовала автоматически, можно после первого запуска выбрать в меню Action команду Edit SQL Server registration properties и в появившемся диалоговом окне пометить фла жок Automatically start SQL Server when connecting — при попытке под ключения SQL Server запустится автоматически. Новые и модифицированные компоненты SQL Server Подключившись к SQL Server, можно развернуть дерево его объектов. В систему входят уже известные объекты, объекты, исполня ющие те же функции, но под новыми именами и совершенно новые объекты (рис. 222). Коекаких компонентов теперь не стало. Пройдемся по дереву, а затем подробнее рассмотрим состав и фун кциональность объектов верхнего уровня. Databases Объединяет все БД на данном сервере. Меню, вызываемое щелч ком правой кнопки, позволяет вывести диалоговое окно для описа ния параметров новой БД.
www.books-shop.com
70
Microsoft SQL Server 2000, Новейшие технологии
Puc. 222. Многие объекты остались прежними, однако появилось немало нового. ВНИМАНИЕ! Если Вы щелкнете правой кнопкой БД, то среди прочих команд будет Delete. Ее выбор физически удаляет БД с сервера и унич тожает файл на диске. Будьте осторожны: NTFS не позволяет восста навливать удаленные файлы! К счастью, эта команда не появляется, когда Вы вызываете контекстное меню для системных БД Master, Model и Tempdb. Щелчок правой кнопкой той или иной БД выводит меню, в котором наиболее интересна команда All Tasks. Она в свою очередь раскрывается в еще одно меню, где можно выбрать команды
www.books-shop.com
ГЛАВА 2; Управление сервером создания страховочной копии и восстановления из копии. Здесь же доступна команда создания сценариев, описывающих индивидуаль ные объекты БД. Команды Shrink database (Сжать базу данных) и Truncate log (Очистить журнал транзакций) позволяют ме сто на диске, которое занимает БД. Data transformation services
Этот набор объектов охватывает описание пакетов, предназначен ных для модификации данных при передаче из баз SQL Server или приеме в БД. Пакеты можно хранить в БД сервера или в рии. Если бы не было этого инструмента, наполнение таблиц SQL Server данными из, например, БД FoxPro или Access потребовало бы данные выкачивания исходных данных на диск и последующего ис пользования утилиты массированного копирования либо при менения Upsizing wizards — мастеров, позволяющих переносить дан ные в SQL Server. Использовать довольно непросто в силу нео днозначности ее поведения, а мастера, вопервых, являются внешни ми инструментами, вовторых, далеко не все продукты оснащаются такими средствами. Кроме того, при создании хранилищ простой пе рекачки данных часто недостаточно. На пути в целевую таблицу их нередко надо «почистить», изменить, проверить. Мастерам это не под силу. Теперь администратор получил исключительно мощный инст румент, позволяющий с высокой степенью детализации описать про цесс трансформации данных на пути к целевой таблице. Описание такого процесса и хранится в объекте Data transformation package, рас смотрению которого посвящена отдельная глава. Management Здесь хранится набор объектов, отвечающих за организацию или отображение текущей работы сервера. Отсюда Вы получаете доступ к параметрам службы SQL Server Agent, операторам и опове щениям, работающим под ее управлением. • Объект Backup предоставляет доступ к различным аспектам про цесса создания страховочных копий. • Объект Current activity имеет несколько вложенных объектов, ко торые позволяют анализировать текущее состояние сервера с точ ки зрения активных блокировок, рабочих процессов и пр. • Объект Database maintenance plans объединяет все планы сопровож дения БД, созданных администратором. Каждому плану ставится в соответствие одно или более заданий, расположенных в разделе SQL Server agent/Jobs. • Раздела Web publishing, имевшегося в предыдущей версии, теперь нет, но функциональность никуда не делась. Как и раньше, ее
www.books-shop.com
Microsoft SQL Server 2000. Новейшие технологии обеспечивают мастер Web Assistant Wizard и набор хранимых про цедур. • SQL Server logs отображает журналы (они хранятся в каталоге которые ведутся в течение сеанса работы SQL Server. При каждом новом запуске SQL Server создает новый журнал — файл с именем Errorlog без расширения. Предыдущему файлу при сваивается расширение 1, еще более старому — 2 и т. д., до 6. Файл с расширением 6 уничтожается, чтобы освободить место. Security Набор объектов этого раздела управляет системой безопасности сервера. Здесь Вы создаете новые регистрационные имена, разрешае те или доступ к серверу учетным записям домена или ло кального сервера. Почемуто здесь же расположены средства работы со связанными и удаленными серверами. • Объект Logins хранит идентификаторы, под которыми пользовате ли могут подключиться к серверу. Здесь же создаются новые иден тификаторы. О системе безопасности SQL Server речь впереди. • Server roles Роль — это набор прав, которые могут быть ассоции рованы с пользователем SQL Server. Версия 8.0 позволяет назна чать любое количество имеющихся ролей одному пользователю. Расширять список серверных ролей нельзя, добавлять роли мож но только в • Linked servers — связанные серверы. С версии 7.0 поддерживается функциональность, в определенной степени знакомая пользова телям Microsoft Access. При наличии ODBCдрайвера или OLE теперь можно установить постоянное соединение с любым источником данных, присвоить ему имя и использовать это имя при построении запросов почти так же, как если бы дан ные внешнего источника располагались в БД SQL Server. • Группа объектов Remote servers объединяет серверы, зарегистри рованные как удаленные. Support services Этот раздел предоставляет доступ к вспомогательным службам, которые по сути дела обеспечивают дополнительные средства интег рации сервера с внешним миром. В их числе SQL — средство обмена почтовыми сообщениями. Здесь же расположена ссылка на службу Distributed transaction coordinator (Координатор распределен ных транзакций). Только в версии 8.0 Вам не предоставляется средств для настройки координатора, файла Dac.exe нет, и, похоже, все ма нипуляции службой Windows 2000 взяла на себя.
www.books-shop.com
ГЛАВА 2; Версия 8.0 способна использовать средства полнотекстового ин дексирования и поиска, предоставляемые Microsoft Index Пра вый щелчок объекта Full — Text search выводит меню, позволяющее останавливать и запускать службу полнотекстового поиска и настра ивать ее работу. Полный контроль за Microsoft Index Server Вы полу подключив его к основной консоли Средства мониторинга Чтобы принять обоснованное решение об изменении значений пара метров, оптимизации кода и т. п., администратор должен иметь дос таточно данных. Желательно, чтобы эта информация была получена в реальном времени и отражала «процесс» работы сервера, а не мо ментальный снимок состояния. Рассмотрим два основных источника информации: утилиту профилирования и монитор производительно сти. SQL Server Profiler Исполнение запросов — вещь хорошая, но еще важнее четко пони мать, что и как долго происходит на сервере, какие объекты и на ка кой срок блокируются и т. д. На все эти вопросы поможет ответить новый инструмент анализа — SQL Server Profiler, заменивший удоб ный, но довольно ограниченный по возможностям SQL Trace. В основу SQL Server Profiler положена идея о том, что для органи зации нормального администрирования множества серверов и само настройки БД надо обеспечить перехват событий внутри основного процесса, выполняющего работу с БД, обслуживающего соединения и т. д. Системные процедуры вроде sp_who и sp_lock не позволяют по лучить картину процесса в динамике, поскольку используют прин цип «моментальных Переработка основных компонентов SQL Server предоставила иде альную возможность встроить средства мониторинга внутрь сервера. Основными задачами при создании средств мониторинга были: • обеспечение динамического подключения к любому серверу; отсутствие какоголибо воздействия на сервер при отключенном процессе мониторинга; • минимальное воздействие в процессе мониторинга; • многопоточная архитектура с асинхронным исполнением в пери оды пониженной активности процессора; • низкие требования к памяти; • предварительная фильтрация, так что клиенту передаются только необходимые события. Вот как выглядит базовая архитектура системы обработки собы тий (рис. 223).
www.books-shop.com
Microsoft SQL Server 2000, Новейшие технологии
74
223.
Базовая архитектура системы обработки событий.
Отсутствие встроенных средств генерации и обработки событий делает невозможным мониторинг SQL Server версий 6.x посредством SQL Server Profiler. Как видите, SQL Server нужны компоненты, которые создают при сущие им события. Такими компонентами, очевидно, должны быть основные сервера: процессор обработки запросов (Query диспетчер блокировок (Lock manager) и др. Компоненты сер вера, генерирующие события, называются поставщиками (producer). Для работы с утилитой надо создать шаблон профиля трассиров ки. При установке SQL Server Вы получаете несколько готовых шаб лонов, которые можно модифицировать. Создание нового шаблона начинается нажатием клавиш или командой Все события сгруппированы по категориям, что облегчает выбор нужных при создании шаблона. В определение шаблона можно вклю чить любое количество отслеживаемых событий (только не тесь: например, события, связанные с блокировками, происходят так часто, что даже простая операция способна создать огромный массив выходных данных). Теперь SQL Profiler поддерживает профилирование с ограничени ями по времени работы и размеру журнала Утилита про филирования поддерживает набор новых событий: Data File Auto Grow, Data File Auto Shrink, Log File Auto Grow, Log File Auto Shrink, Show Plan All, Show Plan Statistics и Show Plan Text. Дополнительные расширения разделили SQL Profiler: одна часть предназначена для профилирования работы сервера, как это было в версии 7.0, вторая выполняет аудит сервера. Можно даже обеспечить аудит по спецификации С2.
www.books-shop.com
Управление сервером
ГЛАВА 2:
75
В таблице описаны категории и включенные в них события. Категория
Описание
Cursors (курсоры)
Набор событий, связанных с курсорами.
Database (база данных)
Набор связанных с динамическим изменением размера БД или ее журнала.
Error and Warning (ошибки и предупреждения)
Набор событий, которые создаются при возникновении ошибки или предупреждения как самим сервером, так и его компонентами, такими как OLEdB.
Locks (блокировки)
Набор событий, связанных с наложением блокировок на объекты.
Objects (объекты)
Набор событий, связанных с созданием, открытием, закрытием, удалением (dropping) или уничтожением (deleting) объектов.
Performance (производительность)
Набор событий, связанных с производитель ностью сервера: события по отображению плана исполнения индивидуальных команд, использования параллелизма при выполнении запросов.
Scans (операции сканирования)
Набор событий, создаваемых при сканиро вании таких объектов БД, как таблицы и индексы.
Security (разграничение доступа)
Обширный набор событий, позволяющий фиксировать работу сервера с точки зрения системы разграничения доступа.
Sessions (сессии)
Набор событий, создаваемых при подклю чении/отключении клиентов сервера.
Stored Procedures (хранимые процедуры)
Набор событий, создаваемых при исполнении хранимых процедур и связанных с началом и окончанием исполнения процедуры в целом, исполнением индивидуальных команд, входящих в состав процедуры, и т. д.
над
Transactions (транзакции) Набор событий, связанных с исполнением транзакций, создаваемых координатором рас пределенных транзакций сервером. В эту ка тегорию также входят события, создаваемые при записи данных в журнал транзакций.
Категория TSQL (команды Transact SQL) User Configurable (пользовательские)
Описание Набор событий, создаваемых при исполнении команд TSQL, передаваемых серверу от клиентского приложения. В эту группу будет помещен созданный Вами класс событий, который будет отслеживать утилита профилирования.
Каждому событию соответствует набор данных, описывающих его характеристики. Конкретный набор определяется самим событием. Если взять для примера набор событий из группы Transactions, то таб лица взаимосвязи событие/тип данных выглядит так:
Класс событий * *
*
*
*
*
* *
* *
*
*
* *
*
*
Как видите, определенному классу событий может соответствовать определенный набор данных. Подобные схемы в документации пред ставлены для всех наборов. Теперь Вы не создаете профиль на пустом месте. Он может быть организован только из шаблона. Меню File/New рас крывается в подменю с командами, позволяющими создать профиль или шаблон. Создание профиля всегда подразумевает использование уже существующего шаблона. Созданный или отредактированный шаблон Вы запускаете на исполнение. Создать или отредактировать шаблон можно в диалоговом окне, содержащем четыре вкладки (рис. 224).
www.books-shop.com
ГЛАВА 2: Управление сервером
77
Профиль может быть привязан к серверу системы, а результат трассировки можно записывать как в текстовый файл, так и в таблицу сервера. На вкладке General, определяющей общие параметры профиля, Вы указываете имя профиля — Trace Name. Это имя будет использовано для создания файлов, хранящих информацию Каж дый профиль связывается с определенным сервером. Раскрыв SQL Server, можно выбрать ранее зарегистрированный сервер или зарегистрировать иной, щелкнув кнопку справа от имени сервера, выбранного по умолчанию. Вы попрежнему можете размещать результаты профилирования в файле, таблице или просто наблюдать на экране. При записи про филирования в файл (флажок Save to file) можно указать максималь ный размер файла [флажок Set maximum file и нужно ли по достижении указанной границы создавать новый файл (флажок Enable File rollover). Флажок Server processes SQL Server trace data (Сервер обрабатывает данные профилирования) позволяет указать, где про изводится профилирование: если флажок не помечен, что на клиенте, и часть событий может быть пропущена в условиях
www.books-shop.com
Microsoft SQL Server 2000, Новейшие технологии кой нагрузки. Если Вы применяли средства профилирования версии 7.0, то, возможно, Вам приходилось сталкиваться с ситуацией, когда для некоторого события не фиксируется начало (у меня это обычно происходило с событием batch starting). Если флажок помечен, все со бытия попадут в профиль, но это может сказаться на производитель ности сервера. Как приемник можно указать и таблицу — она будет создана с именем, соответствующим имени профиля. Структура таблицы в от личие от предыдущей версии сервера, когда все было очень просто, может получиться довольно развесистой. Состав полей соответствует данным, которые Вы собираетесь фиксировать при профилировании. То есть, набрав много данных, Вы можете получить нечто вроде: CREATE TABLE
[nvarchar] (128) COLLATE Cyrillic_General_CI_AS NULL , и еще несколько десятков полей. SQL Profiler способен отслеживать около пятидесяти элементов данных, и для каждого из них будет создано свое поле [int] NULL ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] Таблица создается на указанном Вами сервере, в указанной Вами БД. Результат перехвата событий выбранного можно воспро извести. На вкладке Events перечислены события, которые могут быть пе рехвачены (рис. 225). Я уже говорил, что для удобства работы собы тия сгруппированы по нескольким категориям (блокировки, объек ты). На этой вкладке администратор выбирает интересующие его со бытия. Вкладка Filters (рис. 226) позволяет для каждого из выбранных событий назначить дополнительные условия их отбора. Всего можно указать 18 критериев (см. таблицу ниже). Критерии позволяют выде лить из потока получаемой информации то, что Вас интересует. Так, попытка отследить блокировки (а они происходят, мягко говоря, ча
www.books-shop.com
ГЛАВА 2;
сервером
79
стенько), вызовет шквал информации, по большей части совершенно бесполезной. В то же время, указав имя конкретного приложения или идентификатора наиболее часто используемой таблицы, Вы отфильт руете нужную информацию, определите самые продолжительные зап росы, локализуете проблемы обращения к тому или иному объекту. Некоторые элементы фильтруются по минимальному и максималь ному значению (например, загрузка процессора), другие — по имени.
Select
classes
to
Puc. 225. Большое количество событий позволяет отследить практически любой аспект работы сервера. Ниже описаны условия фильтрации очереди. Для каждого собы тия имеется набор значений, определяющих, будут ли сведения об этом событии включены в профиль. В зависимости от выбранных критериев Вы можете устанавливать условия фильтрации. Критерий фильтрации
Описание
Equals
Значение должно быть равно указанному. Можно указывать несколько значений, разделяя их символами
www.books-shop.com
SQL Server 2000, Новейшие технологии
80
(продолжение) Критерий фильтрации
Описание
Like
Аналогично предикату LIKE в Transact SQL. В качестве замещающих символов можно исполь зовать знаки При описании критериев фильт рации можно указывать несколько значений, разделяя их символом
Not like
Так же, как у Like, только наоборот.
Not equal to
Значение не должно быть равно указанному. Можно указывать несколько значений, разделяя их символами
Greater than or equal
Значение должно быть больше или равно критерию фильтрации.
Less than or equal
Значение должно быть меньше или равно критерию фильтрации.
Put. 226. Фильтры позволяют выделить из большого объема информации только то, что действительно нужно для анализа.
www.books-shop.com
ГЛАВА 2;
сервером
81
В зависимости от конкретных данных Вы можете выбрать разные критерии фильтрации. Ниже описаны события и указано, какой кри терий фильтрации применим для отбора событий. Данные события
Описание
Application Приложение, Name породившее событие. Например, «Моя программа». Client Идентифи ProcessID катор про цесса, выз вавшего SQL Server. Указывает, Column Permissions было ли наз начено право на доступа к столбцу таблицы. Процессор CPU ное время на исполнение команды (в миллисе кундах). Идентифи Database ID катор БД. Имя базы Database Name данных, с которой ра ботала пере хваченная команда.
Like Not like
Equals
Not equal to
Greater Less than than or or equal equal
Да
Нет
Нет
Нет
Нет
Нет Нет Да
Да
Да
Да
Нет Нет Да
Да
Да
Да
Нет Нет Да
Да
Да
Да
Нет Нет Да
Да
Да
Да
Да
Нет
Нет
Нет
Да
Да
Нет
www.books-shop.com
Microsoft SQL Server 2000, Новейшие технологии
82
(продолжение) Not like
Equals
Данные события
Описание
Duration
Время, пот Нет Нет Да раченное на исполнение удаленных вызовов (RPCs), команд организации
equal to
Greater Less than than or or equal equal
Да
Да
Да
Not
блокировок, сессий и иных событий, для которых можно получить опре деленное время исполнения. End Time Время окон Нет Нет Нет события. Этот столбец не заполняется для начальных событий, таких как SQL: Batch Starting или
Нет
Да
Да
Error
Да
Да
Да
Нет
Нет
Нет
Номер ошиб Нет Нет Да для дан ного события. Это может быть номер ошибки, как он опре делен в sysmessages. File Name Логическое Да Да Нет имя модифи цируемого файла.
www.books-shop.com
ГЛАВА 2:
Handle
Управление сервером
Целочислен ное значе ние, ис пользуемое ODBC, OLEDB или
Нет Нет Да
Да
Да
Да
Нет
Нет
Нет
Идентифи Нет Нет Да катор индекса для объекта. Имя Да Да Нет фикатора пользователя (это может быть иденти фикатор SQL Server или имя учетной записи Windows в фор ме DOMAIN\
Да
Да
Да
Нет
Нет
Нет
Целочислен Нет Нет Да ное значение, используемое различными событиями для описания состояния, полученного или запрошен ного событием.
Да
Да
Да
для коорди нации работы с сервером. Host Name Имя компь Да ютера, ко торый создал события. То же имя воз вращается функцией Index ID
Login
Mode
83
Да
Нет
www.books-shop.com
Microsoft SQL Server 2000, Новейшие технологии
84
(продолжение) Данные события
Описание
Like Not
Equals
Greater Less than Not equal to than or or equal equal
NT
Имя домена Windows NT или Windows 2000 для клиента,
Да
Нет
Нет
Нет
Нет
Нет
Нет
Нет
Да
Да
Да
Domain Name
Да
событие. Имя Да Да Нет вателя, от имени кото рого создано событие. Object ID Уникальный Нет Нет Да идентификатор объекта, захва ченного со бытием. Вы деление флажка Exclude objects (Исключить системные объекты), поз воляет иск лючить из рассмотрения системные
NT User Name
Object Name Owner Name
как таблица sysobjects. Имя объекта, Да захваченного событием. Имя Да ца объекта БД.
Да
Нет
Нет
Нет
Нет
Да
Нет
Нет
Нет
Нет
www.books-shop.com
ГЛАВА 2:
Object Туре
Управление сервером (продолжение) Да
Значение, Нет Нет Да определяемое типом объекта. Оно соответст вует типам, определенным в таблице Sysob jects (поле type).
Да
Да
Permissions Целочислен Нет Нет Да ное значение, представляю щее тип про веряемого разрешения.
Да
Да
Да
Reads
Да
Да
Да
Нет
Нет
Нет
Число логи Нет Нет Да чтений, выполненных при исполне нии команды.
Role Name Имя активи зированной прикладной роли.
Да
Да
Нет
Severity
Степень Нет Нет Да серьезности (severity level) ошибки.
Да
Да
Да
SPID
Уникальный Нет Нет Да идентифика тор, присваи ваемый соединению.
Да
Да
Да
DBUser Name
Имя пользо вателя БД, создавшего событие.
Нет
Нет
Нет
Нет
Нет Нет Нет
Нет
Да
Да
Start Time Время нача ла события, если его можно за фиксировать.
Аналогично статусу ошибки. Значение 1 обозначает успех, 0 — неудачу.
Success
Target Login Name
Target User Name
Text Data
Not equal to
Greater Less than than or or equal equal
Нет Нет Да
Да
Да
Да
Нет Нет Да
Да
Да
Да
Нет
Нет
Нет
Нет
Нет
Нет
Нет
Нет
Нет
Нет
Нет
Нет
при про верке приви легий доступа. Для действий, Да Да направленных на работу с именами ре гистрации (на пример, при создании нового имени регистра ции), имя регистрации. Для действий, Да Да направленных на пользователя БД (например, выдача разре шения пользо вателю), имя этого пользователя.
Текстовое Да представление данных события (чаще всего это команда TSQL).
Да
Equals
www.books-shop.com
ГЛАВА 2:
Writes
сервером
Число опера Нет Нет Да ций записи, выполненных сервером при выполнении команды.
у
Да
Да
Да
Объект Permission может принимать следующие значения: 1 = SELECT ALL 2 = UPDATE ALL 4 = REFERENCES ALL 8 = INSERT 16 = DELETE 32 = EXECUTE (только для процедур) 4096 = SELECT ANY (по меньшей мере один столбец) 8192 = UPDATE ANY 16384 = REFERENCES ANY В одной из ранних бетаверсий SQL Server 7.0 SQL Profiler позво лял перехватывать буквально все команды, отправляемые на сервер, в том числе и те, что содержали текст пароля. Потом разработчики резонно решили, что такой принесет больше вреда, чем пользы, и с тех пор Profiler автоматически и безусловно исключает из профиля все вызовы хранимых процедур, имеющих дело с паролями. Так что не удивляйтесь, если приведенные ниже процедуры не отображаются при профилировании работы сервера: sp_adddistpublisher, sp_adddistributor, sp_addlogin, tion_agent, sp_addremotelogin, scriber, sp_changedistpublisher, sp_dsninfo, sword, sp_setapprole Если фильтр формируется из нескольких значений, их надо раз делять символом Так, фильтр, установленный на Text и сформу лированный как выделит все события, в тек сте которых есть слово Authors (в любом месте строки) и команда SE LECT (строка должна начинаться с этой Данные, содержащиеся в списке вкладки Data columns, можно от слеживать для выбранных событий и пересылать назначенному ис точнику (рис. 227). Выбранные данные должны соответствовать от слеживаемым событиям. В правой панели вкладки Data columns есть
www.books-shop.com
Microsoft SQL
2000, Новейшие технологии
две группы, организовать представление информации. Группа Groups создает упорядоченные наборы данных.
Рис. 227. Перехватываемые события можно группировать, т. е. сортировать.
Выбор данных для показанного выше профиля позволяет сгруп пировать результаты профилирования сначала по классу события, затем по имени приложения, а затем по имени пользователя. Если Вы рассчитываете видеть группировку в том виде, как в предыдущей версии, Вас ждет разочарование: события будут отображены с учетом критериев группировки, но «схлопывать» группы теперь невозможно. Описаний профиля в реестре больше не ищите — они хранятся в файле шаблона. В составе сервера теперь нет мастера по созданию профилей: для создания шаблона или профиля на базе существующе го шаблона обращайтесь теперь к меню. Воспроизведение и анализ ранее записанных событий Воспроизвести ранее записанные события можно как на сервере, где они были записаны, так и на любом другом. Чтобы воспроизведение было возможно, включите в профиль определенный набор событий.
www.books-shop.com
ГЛАВА 2; Управление сервером
89
Посмотрите стандартное описание профиля для последующего вос произведения — там собраны все нуж ные события и их данные. На основе этого шаблона Вы можете со здать собственные. Для воспроизведения откройте ранее записанный профиль (в меню File выберите команду Open и источник, куда был записан Источником может быть файл профилирования (включая файлы, за писанные SQL Trace версии 6.5), таблица или просто файл сце нария Загруженный профиль можно анализировать, накладывая фильтры и выполняя поиск, а можно воспроизвести. При выборе команды Replay основного меню Вас попросят подклю читься к серверу, на котором будет выполнено воспроизведение, а затем указать условия (рис. 228).
228. профиля.
Здесь задаются условия воспроизведения записанного
Параметры воспроизведения изменились. Теперь Вы можете только указать, что воспроизведение задействует единственный поток (пе реключатель Replay events in the order they were traced) или множество потоков (Replay using multiple threads), в последнем случае пошаговое исполнение и точки прерывания недоступны. Утилита профилирования прекрасно работает со сценариями, за писанными аналогичным инструментом предыдущих версий. Сохра ните сценарий, созданный SQLTrace.exe, поставляемой в составе вер сии 6.5 в текстовый файл, и Вы сможете загрузить его в SQL Server Profiler. Это позволит задействовать фильтрацию записей, воспроиз ведение на указанном сервере и группирование данных по одному из имеющихся критериев.
www.books-shop.com
gg
SQL
2000, Новейшие технологии
Программирование SQL Server Profiler В том виде, как мы только что его рассмотрели, SQL Server Profiler представляет собой графический интерфейс очень богатого по воз можностям программного компонента SQL Server. Его можно исполь зовать и программно. Для программного доступа сервер открывает целый набор хранимых процедур и функций. Я не стану перечислять их все, скажу только: если Вы чтото писали для программного уп равления процессом профилирования, Вас ждет немало работы по замене вызовов. Посмотрите раздел «Создание и управление профи лями и шаблонами» («Creating and Managing Traces and Templates») в документации — там приведен не только перечень новых процедур и функций, но и дано соответствие старых и новых средств. Однако одна процедура — sp_trace_create — достойна отдельного разговора: она способна помочь Вам при возникновении непонятных проблем. Процедура принимает параметр Применение команды: declare declare exec где
int int = sp_trace_create output, 8 работу в режиме "регистратора полета"
где 8 означает работу в режиме «регистратора создает файл профилирования blackbox.trc, расположенный в том же каталоге, что и файлы данных. Файл профилирования не превышает 5 Мб; по за полнении первого файла система создает следующий, потом еще один и т. д. При катастрофическом сбое сервера у Вас есть информация о том, что предшествовало сбою. Профиль отслеживает имя сервера и класс события. В отличие от работы в графическом интерфейсе программное созда ние очереди требует указания идентификатора класса события. Это оз начает что сценарий создания профиля может выглядеть примерно так: declare declare declare
Согласитесь, не самый понятный код на свете. К счастью, у Вас есть минимум два пути решения этой проблемы. Вопервых, в доку ментации расписаны коды всех событий, и Вы можете запомнить их или распечатать и повесить листок на стенку. Вовторых, создав про филь, Вы можете попросить Profiler написать сценарий для этого про филя. Остановите профилирование и выберите команду File/Script Trace. Результатом будет аккуратный сценарий, учитывающий Ваши события и их данные, равно как и условия фильтрации событий. Монитор производительности Стандартный монитор производительности (Performance monitor или System Monitor в Windows 2000) позволяет отслеживать не меньше параметров, чем SQL Server Profiler, но выполняет скорее пассивную роль. Основное отличие, помоему, в том, что Performance monitor отображает количественные характеристики процессов, но не каче ственные. Так, Вы можете посмотреть число прочитанных страниц, но никогда не узнаете, какой именно объект задействован. С другой стороны, это дает более широкий обзор, позволяет определить область потенциальных проблем, чтобы потом получить детальную картину средствами SQL Server Profiler. Кроме того, SQL Server Profiler не пред назначен для получения информации об ОС или оборудовании одно временно с отображением состояния компонентов SQL Server. Монитор производительности работает в режимах отображения (график — Chart и гистограмма — Histogram), оповещения (Alert), жур нала (Log) и отчета В режиме отображения можно вывести текущее состояние выбран ных программных или аппаратных компонентов системы. Для каж дого элемента наблюдения назначается коэффициент масштабирова ния и атрибуты форматирования. Для каждого компонента можно установить выдачу оповещения, когда наблюдаемое значение
www.books-shop.com
92
Microsoft SQL Server 2000, Новейшие технологии
сило или опустилось ниже установленного значения. Предупрежде ние может выдаваться созданием записи в журнал событий Windows и посылкой сетевого сообщения (аналог команды Net send ком пьютера> <текст сообщения>). Это показано на рис. 229 и 230.
Рис. 229. событие.
У администратора несколько способов зафиксировать
Puc. 230. Передача сообщения с одного компьютера на другой — самое простое решение. При назначении посылки сетевого сообщения как реакции на со бытие, убедитесь, что на посылающем и принимающем компьютерах запущена служба Messaging. Если для параметра нужно установить по роговые значения одновременно на превышение и опускание ниже установленной величины, запустите второй экземпляр монитора.
www.books-shop.com
ГЛАВА 2:
сервером
Монитор производительности умеет запускать приложения. Имя и параметры приложения назначаются при создании или редактиро вании описания предупреждения и вводятся в поле запустить про грамму на исполнение (Run this program). Можно также начать трасси ровку системы. Для этого нужно заранее создать описание трассиров ки и указать этот файл как параметр при выборе флажка Start perfor mance data log (Начать профилирование производительности). При создании оповещения, работающего под управлением SQL Server Agent можно применить особый тип оповещений — SQL Server perfor mance condition alert. Для оповещения этого типа в качестве парамет ра, за которым следует приглядывать, указываются те же объекты, что и для монитора производительности. Об оповещениях этого типа мы поговорим в главе Если Performance monitor используется для создания журнала заг рузки сервера, все замеры фиксируются в указанном Вами файле и потом могут быть использованы для анализа. Для считывания дан ных из журнала в контекстном меню Properties выберите команду Data from и укажите файл, куда производилась запись. Как и при работе в реальном времени, выберите интересующие объекты системы и по лучите их графическое отображение. Вы можете записать сколько угодно данных, но при анализе на мониторе Вам будет видно только 100 индивидуальных значений ранее сохраненной информации. Это значит, что для быстро меняющихся событий, наблюдаемых в тече ние длительного времени, Вы получите не просто усредненные, а об резанные до каждого nго значения, так чтобы весь диапазон измере ний был представлен 100 индивидуальными значениями. Диалоговое окно Time window (команда Edit\Time Window или комбинация позволяет вырезать часть сделанных изменений и отобразить их на графике без потери точности (рис. 231). Если же нужно построить график по всем индивидуальным изме рениям, перейдите в режим отображения и в меню File выберите Export chart. Из двух предлагаемых форматов файлов мне удобнее было работать с тем, что предполагает создание файла с использова нием символа табуляции для разделения замеров Второй фор мат применяет для разделения значений символ Результат экс порта можно открыть в Excel и построить график по любому из от резков измерения или по всему набору значений.
www.books-shop.com
94
Microsoft SQL Server 2000, Новейшие технологии
Рис. Выделение небольшого диапазона измерений позволяет получить график работы подсистемы без потери точности.
Еще один плюс монитора производительности: все процессы профи лирования можно запускать и останавливать не только по достиже нии указанного размера файла журнала, но и по определенному гра фику. Список параметров позволяет очень гибко настраивать систе му профилирования сервера (рис. 232). Что мерить и как анализировать При мониторинге сервера анализируется поведение основных облас тей системы, непосредственно влияющих на работу системы. Тща тельный анализ и исключение узких мест позволяют повысить про изводительность системы и отделить проблемы, возникающие изза некачественного дизайна БД или приложения, от ограничений обо рудования.
www.books-shop.com
ГЛАВА 2;
сервером
95
Puc. 232. Гибкая настройка монитора производительности позволяет организовать полноценную среду анализа возникающих проблем.
Работа с памятью По умолчанию сервер динамически распределяет память для кэши рования данных. Объем памяти, выделяемой под кэш, зависит от до ступного объема ресурсов и конкуренции за эти ресурсы. Если серве ру нужно больше памяти, он запрашивает ОС, чтобы выяснить, нет ли свободной физической памяти. Если есть, сервер использует ее для кэширования и сохраняет уже имеющиеся данные. В зависимости от активности сервер старается оставить ОС от 4 до 10 Мб свободной физической памяти, чтобы сократить или исключить обращение к файлу подкачки. Если серверу не хватает памяти, он начинает актив но использовать диск вместо того, чтобы читать данные из кэша. ВНИМАНИЕ! Если на компьютере одновременно работают несколько экземпляров сервера, описанный алгоритм действует для каждого. При использовании Performance monitor важно не только опреде лить список объектов, чье состояние Вы будете наблюдать, но и по
выходят ли их значения за рамки допустимых. Имейте в виду: речь идет о значении счетчика в течение длительного срока, кратков ременные пики пугать Вас не должны. Кроме того, значения ряда счетчиков следует анализировать совместно с другими. Счетчик Bytes
Описание
Ожидаемые значения
Available Отслеживает число байтов, доступных для исполнения процесса.
Memory: Pages/sec
Process: Page Faults/sec (для экземпляра SQL Server)
Значение счетчика всегда должно быть более 5 000 Кб. Более низкие значения указывают на общий недостаток физической памяти. Пора покупать дополнительную память. Значение этого счетчика в Отслеживает число страниц, которые Win идеале должно быть равно 0. dows 2000 считывает Так как идеал недостижим, реальным требованием яв или записывает при ляется отсутствие стабильно работе с файлом под высокого обращения к файлу качки для разрешения ненайденных страниц подкачки. Если значение (hard page счетчика регулярно превы шает 0, значит, Windows 2000 постоянно обращается к диску для удовлетворения запросов к памяти. Отслеживает число об Высокое значение счетчика ращений к диску, явля говорит о чрезмерном ис ющихся результатом от пользовании диска для обме на с памятью. Необходимо сутствия необходимых страниц в памяти. Стра определить процесс, деятель ницы вытесняются на ность которого вызывает проблему. диск при урезании па мяти, выделяемой ОС для работы конкретного процесса.
Помимо специальных счетчиков, отражающих общее системы, монитор производительности имеет набор счетчиков, отра жающих использование памяти процессом, в рамках которого испол няется SQL Server.
www.books-shop.com
ГЛАВА 2: Управление сервером Счетчик
Описание
97 Ожидаемые значения
Process: Working Отслеживает объем па Set (для экземп мяти, используемой ляра SQL Server) процессом SQL Server
Значение счетчика должно быть больше 5 000 Кб. Значе ние ниже 5 000 Кб означает, для каждого экземпляра что для сервера не осталось сервера. свободной памяти. Значение счетчика не должно SQL Server: Buf Отслеживает процент fer Manager: Buf страниц, которые сервер опускаться ниже 90%, так смог найти в буфере fer Cache Hit как он указывает на число кэша, не обращаясь к страниц, найденных в кэше. Ratio диску (для чтения страниц из БД). Этот счетчик не делает раз личий между физической памятью и памятью, помещенной в файле подкачки. SQL Server: Bu Отслеживает общее чис Если счетчик имеет низкие ло страниц в кэше, ffer Manager: значения, это может означать включая страницы БД, частые обращения к диску. Total Pages свободные и «украден Стоит подумать о покупке ные» у других процессов дополнительной памяти. страницы. Отслеживает общий SQL Server: Если счетчик постоянно по казывает высокое значение в объем динамической Memory Ma nager: Total сравнении с доступной фи памяти, используемой зической памятью, серверу Server Memory сервером. стоит добавить памяти. Помимо памяти, важным аспектом функционирования приложе ния является работа центрального процессора. В многопроцессорных системах надо отслеживать поведение индивидуальных процессоров. Для определения усредненного по всем процессорам значения заг рузки служит счетчик System: Processor Time. Если значение счетчика Processor: Time постоянно приближается к 100%, а счетчик System: Processor Queue Length пока зывает, что большое число приложений ожидает очереди на обработ ку обращений к процессору, или счетчик System: Context Switches/Sec имеет высокое значение, система перегружена. Когда Processor: Time приближается к 100%, а значение System: Context Switches/Sec — к 8000, подумайте о замене процессоров на более бы
www.books-shop.com
Microsoft SQL Server 2000, Новейшие технологии
98
добавлении дополнительных процессоров или переходе на нити (fiber — легкий субкомпонент потока, исполняющийся в режи ме пользователя и не требующий переключений между режимами ядра и пользователя, что экономит ресурсы). Нити снижают требова ния к ресурсам, так как переключение между контекстами происходит быстрее. Сервер выделяет по одному «настоящему» потоку (thread) на каждый из процессоров и в рамках этого потока выделяет каждому пользователю по нити в пределах, указанных параметром Maximum working threads. При переходе в режим использования нитей SQL Server: • вместо разбора потоков из пула ОС начинает разбирать нити, за бирая их из пула нитей; • вместо того, чтобы отдавать диспетчирование при переключении между нитями на откуп ОС, выполняет переключение между ни тями. В таблице перечислены счетчики, полезные при исследовании по ведения системы в целом и ее процессора (объекты System и Объект: Счетчик
Описание
Ожидаемые значения
Processor: % Processor Time
Отслеживает долю от общего времени, кото рую процессор тратит на обслуживание активных потоков.
Значение счетчика не долж но превышать 90%. Если счетчик регулярно показыва ет более высокие значения, снизьте нагрузку на сервер, повысьте ее эффективность или увеличьте мощность сервера.
Processor: % Privileged Time
Отслеживает процент времени, затрачиваемого процессором на обслу живание привилегиро ванных вызовов из ядра таких как запросы на выполнение операций ввода/вывода, поступаю щих от SQL Server.
Если значительную долю времени процессор тратит на обслуживание привилегиро ванных вызовов и в то же самое время счетчики, отсле живающие состояние жест ких дисков, показывают высокие значения, то дис ковая подсистема перегру жена и надо озаботиться оптимизацией ее использования.
www.books-shop.com
ГЛАВА 2;
сервером
System: Context Switches/sec
System: Processor Queue Length
Processor: % User Time
99
(продолжение) На многопроцессорном компьютере значение счет чика не должно превышать 8 при том что счетчик Processor: Processor Time должен быть не выше 90%. Если оба пороговых значе ния превышены, подумайте о переходе на нити. Отслеживает число Значение счетчика не потоков, ожидающих должно быть выше 2 в течение длительного вре исполнения. мени. В противном случае снизьте нагрузку на сервер, повысьте ее эффективность или увеличьте мощность сервера (например, добавьте процессоры в многопроцес сорную Позволяет определить нали Отслеживает процент времени, затрачиваемого чие процессов, чья работа процессором на испол мешает серверу получить нение пользовательских достаточное процессорного времени. процессов, таких как процесс самого SQL Server.
Отслеживает число переключений в секун ду между индивидуаль ными потоками.
Дисковая подсистема — еще один жизненно важный компонент, оказывающий исключительно большое влияние на работу сервера. Мониторинг дисковой подсистемы позволяет определить узкие мес та и повысить производительность сервера. Счетчик PhysicalDisk: Time
PhysicalDisk: Disk Reads/sec
Описание
Ожидаемые значения
Отслеживает процент Значение счетчика не времени, затрачиваемого должно превышать 90% в дисковой подсистемой течение длительного на обслуживание запро времени. сов ввода/вывода. Отслеживает интенсив Значение счетчика должно операций быть ниже, чем пропускная способность диска, заявлен ная
www.books-shop.com
Microsoft SQL Sewer 2000, Новейшие технологии
100
(продолжение)
Объект: Счетчик
Описание
Ожидаемые значения
Length
Отслеживает усреднен ное значение числа запросов на операции ввода/вывода, ожидаю щих своей очереди
Значение счетчика не долж но превышать удвоенного числа физических дисков подсистемы.
PhysicalDisk: Disk Writes/sec
Отслеживает интенсив ность операций
Значение счетчика должно быть ниже, чем пропускная способность диска, заявлен ная производителем.
Queue
Если по результатам мониторинга становится ясно, что дисковая подсистема перегружена, подумайте о: • настройке приложения или БД для уменьшения числа операций ввода/вывода (например, построении покрывающих индексов, модификации существующей схемы индексов, нормализации • повышении пропускной способности дисковой подсистемы за счет более современных дисков; • перемещении части файлов на другие диски или дисковые масси вы или на другой сервер (благо SQL Server 2000 обеспечивает не обходимую функциональность средствами связанных серверов и распределенных • добавлении дисков или дисковых массивов; • увеличении объема физической памяти для размещении большего числа данных в кэше. Монитор производительности должен стать стандартным инструмен том в арсенале администратора. Встроенные средства анализа В дереве объектов административной консоли сервера находится объект Current Activity. Если его раскрыть, станет видно, что админи стративная консоль предоставляет средства анализа текущего состоя ния сервера на данный момент (так называемый «моментальный сни Администратору предлагается три группы объектов: блокиров ки по объектам блокировки по процессам (Lock/Pro cess ID) и информация по индивидуальным процессам (рис. 233). Эта информация является статической, т. е. обновляется только по команде Refresh или нажатием клавиши F5 после щелчка объекта Current activity. Если надо постоянно держать окна открытыми, шел
www.books-shop.com
ГЛАВА 2;
сервером
101
правой кнопкой соответствующий объект или группу и в кон текстном меню выберите команду New window from бу дут выведены в самостоятельное окно, которое остается открытым до следующего обновления. Для объектов и процессов отображается информация о типах и режимах блокировок (на уровне БД, таблицы, ключа и т. д.) и о том, какой является блокировка (разделяемой, мо нопольной или иной). Правый щелчок соответствующей строки по зволяет посмотреть свойства объекта. Обычно в окне свойств отобра жается последняя исполненная команда или набор команд. Если со здать два соединения средствами SQL Query Analyzer и в обоих окнах ввести команду: begin tran update authors set
=
where
=
то в окне, описывающем состояние индивидуальных бу дет видно, что один процесс успешно заблокировал другой. Контек стное меню позволяет открыть окно свойств процесса, в котором бу дет видна блокирующая команда. Здесь же есть кнопки, позволяю щие убить процесс или послать сообщение (рис. 234).
233. Административная консоль позволяет получить информацию о текущих процессах и блокировках.
Рис. 234. Всегда можно посмотреть блокирующие процессы и получить информацию об использованных ресурсах.
www.books-shop.com
102
Microsoft SQL Server 2000, Новейшие технологии
Создание страховочных копий Оптимизация сервера, тщательно продуманная политика безопасно сти, грамотно спроектированный пользовательский интерфейс бес смысленны, если то, ради чего все затевалось, — база данных — пере стала существовать. Предотвращение потери данных — вот одна из главных задач системного администратора. Разработайте стратегию создания страховочных копий Как известно, реже всего соблюдаются именно прописные Очень часто мне приходилось выслушивать взволнованного пользова теля, который в ответ на вопрос: «У Вас есть копия базы данных?» — начинал мямлить чтото насчет копии недельной давности, а потом говорил, что предыдущую копию они вообще делали несколько меся цев назад. В такой ситуации не стоит рассчитывать, что удастся без потерь поднять «упавшую» базу. она изза аппаратной или программной ошибки, случайного или злонамеренного вызова коман ды DELETE, UPDATE без критерия (под ударом оказываются все за писи таблицы), наконец, пожара, кражи и прочих катаклизмов. Если в Вашей организации тщательно продумана и, акку ратно исполняется политика создания страховочных копий, Вы вос становите БД в кратчайшие сроки с минимальными потерями. Затраты, связанные с политикой копирования, включают время на разработку, реализацию, тестирование и развертывание. Хотя полно стью предотвратить потерю данных не всегда удастся, Вы сведете их к минимуму. Разрабатывая стратегию, учитывайте допустимое время недоступности системы и приемлемый объем потерь. Создавайте копии почаще Помимо предотвращения потерь данных, частое копирование обес печивает целостность данных даже при сбое системы. Альтернативы регулярному копированию просто нет. Главное внимание уделите пользовательским БД — там хранится основной объем информации. Не забывайте и о системных базах, со здавайте их копии при внесении модификаций. При создании копий учитывайте, что SQL Server позволяет выпол нять копирование, не прерывая работы пользователей. Процесс со здания копий — динамический и может быть выполнен над активно модифицируемой БД. При сбое носителя, потере или повреждении файлов Вы сможете реконструировать БД из страховочной копии.
www.books-shop.com
ГЛАВА 2:
no
Что При создании страховочной копии SQL Server копирует схему, дан ные и участки журнала транзакций, файловую структуру и фиксирует расположение файлов, с которых выполнялось копирование. Учас ток журнала транзакций содержит сведения, не зафиксированные в БД. Страховочная копия позволяет восстановить файлы в исходном каталоге вместе с наполняющими их объектами и данными. Куда Страховочную копию можно создать на диске (локальном или сете вом), ленте, именованном канале. всего для этого применяют дисковые файлы и ленты. Именованный канал поддерживается для совместимости с приложениями третьих фирм. Когда и как создавать копию, зависит от ситуации. Но в несколь ких случаях создание страховочной копии обязательно. Некоторые действия на уровне системы тоже влияют на процесс копирования.
Когда и как Системные БД хранят жизненно важную информацию о SQL Server и всех пользовательских БД. Регулярное копирование системных БД, особенно после внесения модификаций, — гарантия спокойного сна. После базы данных Master Master хранит информацию обо всех БД на сервере. Копировать ее надо после создания любого пользовательского объекта. Наличие копии Master значительно упрощает процесс восстановления после сбоев. Если копии Master, хранящей ссылки на пользовательские БД, нет, придется полностью перестроить все системные БД с помощью программы установки SQL Server. SETUP перестраивает их как еди ный набор. Перестроив Master, можно восстановить остальные сис темные БД из копии и ссылки на пользовательские базы. При исполнении некоторых системных хранимых процедур и вы ражений SQL Server автоматически вносит изменения в Master. Со здавать страховочные копии следует после: • исполнения команд CREATE DATABASE, ALTER DATABASE или DROP DATABASE, создающих, модифицирующих или уда ляющих БД; • того, как системная хранимая процедура модифици рует журнал транзакций; • того, как системные хранимые процедуры и модифицируют список удаленных серверов.
www.books-shop.com
Microsoft SQL Server 2000.
технологии
После модификации базы данных Msdb хранит информацию о заданиях, предупреждениях и операто рах, используемых службой SQL Server Agent. Если у Вас нет копии Msdb, при сбое системы придется перестроить все системные БД и заново создать все задания, предупреждения и операторы. После модификации базы данных Model Модификация Model позволяет создать стандартную конфигурацию для всех новых БД. Так как при перестроении Master или Msdb пользо вательские БД также перестраиваются, изменения, внесенные в Mo del, теряются. При наличии страховочной копии Вы восстановите Ваш доработанный вариант Model. Копирование должно быть регулярным Частота копирования зависит от объема информации и активности БД. Для систем оперативной обработки транзакций (OLTP), характе ризующихся значительным объемом модификаций, страховочные копии надо создавать чаще. Системы с незначительной активностью или используемые в основном для поддержки принятия решений ко пировать можно реже. Возможности диспетчера исполнения заданий позволяют автоматизировать создание страховочных копий, для чего следует выбирать время, когда сервер не слишком загружен. Копиро вание можно выполнять и в процессе стандартной работы, но время отклика системы может увеличиться. После создания новой базы данных Создав или наполнив БД, создайте страховочную копию. Без полной копии (Full database backup) использовать копии журнала транзакций нельзя — не будет отправной точки. После создания индексов Создав индексы, сделайте страховочную копию. Это не обязательно (индекс всегда можно построить заново), но так Вы экономите время при восстановлении базы. Создание копии после индексирования БД позволит сохранить в копии и данные, и индексные структуры. Учтите: журнал транзакций записывает лишь сам факт создания индексов — реальные модификации индексных страниц не фиксиру ются. При копировании только журнала транзакций и последующем восстановлении SQL Server восстановит индекс. На восстановление индекса может потребоваться больше времени, чем на восстановле ние из полной копии.
www.books-shop.com
ГЛАВА 2: Управление сервером После очистки журнала транзакций После очистки командой BACKUP LOG WITH TRUNCATE_ONLY журнал транзакций нельзя использовать для восстановления измене ний в БД, так как он не содержит информации об активности После выполнения операций, не отображаемых в журнале транзакций Операции, не фиксируемые в журнале транзакций, называются non logged operations. После выполнения такой операции нужно создать новую страховочную копию БД, так как при сбое системы восстанов ление из предыдущей копии самой БД и журнала может не вернуть БД в целостное состояние. Не восстанавливаются изменения, сделанные операциями, не ото бражаемыми в журнале: • BACKUP LOG WITH NO_LOG — SQL Server удаляет неактивную часть журнала транзакций без создания страховочной копии; сам факт урезания в журнале не отображается; • WRITETEXT или UPDATETEXT SQL Server модифицирует данные в полях типа text и по умолчанию не регистрирует эти мо дификации в журнале транзакций; указание параметра WITH LOG позволит регистрировать эти операции; • SELECT INTO или операции ввода данных средствами утилиты массивного копирования ВСР. При создании страховочной копии некоторые операции могут конф ликтовать с этим процессом: • создание или модификация БД командами CREATE DATABASE или ALTER DATABASE; автоматический рост или сжатие также нежелательны при создании страховочной копии; • создание индексов; • выполнение любых операций, не регистрируемых в журнале тран закций, включая массивную загрузку данных и команды SELECT INTO, WRITETEXT и UPDATETEXT. Если Вы пытаетесь создать страховочную копию, пока выполня ется одна из перечисленных операций, копирование не останавлива ется, но Вы заставляете сервер фиксировать дополнительную инфор мацию в динамике, параллельно с созданием Перед началом копирования создайте файл, куда будет записы ваться копия (постоянный или временный). SQL Server предоставля ет различные варианты создания копий.
Microsoft SQL Server 2000, Новейшие технологии Режимы создания страховочных копий Версия 8.0 поддерживает несколько режимов резервного копирова ния, позволяющих организовать создание страховочных копий со гласно требованиям скорости копирования, надежности сохранения и удобства восстановления. Основные отличия в том, как сервер вос станавливает и способе хранения. По умолчанию выбирается модель полного восстановления (Full Recovery Model). Следуя этой модели, сервер создает копии БД и всей информации из журнала транзакций, необходимой для восстановле ния БД. Сервер фиксирует в журнале все операции, включая опера ции массивных модификаций и создания индексов. Если журнал транзакций остался неповрежденным, сервер восстановит всю ин формацию, кроме транзакций, исполнявшихся в момент сбоя. Так как все транзакции, администратор может выполнить восстановление на любой момент времени. Поддержка именованных меток в журнале транзакций позволяет выполнить вос становление вплоть до именованной метки. Именованная метка со здается при использовании предложения WITH MARK команды BE GIN TRANSACTION. Метки полезны при выполнении критически важных транзакций, затрагивающих большой объем данных. Метка избавляет от необходимости гадать, во сколько началась транзакция, результаты которой Вы хотите отменить при восстановлении БД. Так как метки журнала транзакций требуют дополнительного ме ста для хранения, не злоупотребляйте ими. Основное ограничение этой модели восстановления — большой размер журналов транзак ций и соответствующее время на восстановление БД. Модель с массивных операций (Bulk_Logged Re covery Model) похожа на предыдущую тем, что для восстановления БД нужна копия самой БД и журнала. Однако этот режим требует меньше места в журнале для CREATE INDEX, массивной загрузки дан ных, SELECT INTO, WRITETEXT и UPDATETEXT. Журнал фикси рует только сам факт таких операций в виде флаговых битов в группах страниц (extent) вместо того, чтобы записывать все детали исполнения. Для сохранения информации об изменениях, внесенных всей опе рацией, отмеченные группы страниц фиксируются в журнале. Так что журнал хранит только окончательный вариант после модификации, это требует меньше места, и сами операции исполняются быстрее. Эта модель позволяет восстановить все данные, но теряется возможность частичного восстановления, например, на определенную метку.
www.books-shop.com
ГЛАВА 2: Управление сервером
Qу
Простая модель восстановления (Simple Recovery Model) рекомен дуется для небольших БД или тех, где данные меняются не очень ча сто. Модель использует полные или дифференциальные копии БД и позволяет восстановить их только на момент создания последней ко пии. Все изменения, сделанные после, теряются безвозвратно и дол жны быть выполнены заново. Основное преимущество этой модели — простота реализации и невысокие требования к размерам страхо вочной копии. Изменить модель восстановления БД (это можно сделать в любое время, только требует создания дополнительной страховочной копии на момент изменения) позволяет функция Она вызывается так: ALTER DATABASE SET RECOVERY
| SIMPLE |
Так, чтобы перевести
в режим Bulk_Logged Recovery:
ALTER DATABASE Northwind SET RECOVERY Постоянные файлы для хранения страховочных копий В первую очередь надо создать файл для хранения копии. Файл, со зданный до начала копирования, называется постоянным (permanent backup file), или устройством страховочного копирования (backup de vice). Постоянный файл создается командой: [,
[,
[, { ] Устройство может быть диском, лентой, именованным каналом, т. е. для описания типа устройства (Device type) принимаются аргу менты DISK, TAPE, PIPE. Плюсы постоянного файла Если Вы хотите многократно использовать файлы для хранения стра ховочных копий или автоматизировать процесс создания копий, го дятся только постоянные файлы. Они создаются средствами графи ческого интерфейса или хранимой процедуры Итак, щелкните правой кнопкой объект Backup devices и в контекстном меню выберите New backup device. Появится диалоговое окно с описаниями логического и физического имен создаваемого файла (рис. 235).
www.books-shop.com
Microsoft SQL Server 2000.
108
Описания постоянных файлов хранятся в таблице их может быть не более 64 (версия 7.0 поддерживала не более 32).
Рис. 235.
Новое устройство описывается очень просто.
Временные файлы для хранения страховочных копий Хотя постоянные файлы для хранения страховочных копий предпочти тельнее, Вы можете создавать и временные файлы командой BACKUP DATABASE, позволяющей не указывать имя постоянного файла. Частичный синтаксис команды: BACKUP DATABASE TO Где |
TAPE |
| Зачем нужны временные файлы Если Вы не планируете многократно использовать файлы для хране ния страховочных копий, создавайте временные файлы. Так делают, если создается единственная копия или тестируется операция копи рования. Использование для хранения копий SQL Server может создавать страховочную копию одновременно в не сколько файлов (параллельно). При этом данные распределяются по всем таким файлам. Набор копий (Backup set) — результат отдельной операции над одним или несколькими файлами. Этот способ позволя ет ускорить создание/восстановление страховочной копии (рис. 236).
www.books-shop.com
ГЛАВА 2: Управление сервером Но помните: все устройства, куда создается копия, должны быть одного типа (диск или лента). Для создания одного набора нельзя смешивать устройства на ленте и дисках, хотя временные и постоян ные файлы годятся для создании набора копий. Перечень файлов набора постоянен, и отдельные файлы можно использовать самосто ятельно только после форматирования. Если же Вы форматируете один элемент набора, набор становится бесполезным.
Media set — . набор файлов, содержащих один или более наборов страховочных копий
Backup set — результат одной операции копирования
Рис. 236.
Набор страховочных копий.
Например, если набор копий создан на двух файлах, все последу ющие операции по копированию, использующие этот набор, должны включать оба файла. Набор можно расширить другими файлами, и все же, если хотите использовать только один файл, его придется за ново форматировать. Создание страховочных копий на ленту Ленточные накопители удобны для страховочных копий — они недо роги и обладают высокой емкостью. Дополнительное преимущество: ленту можно хранить вне серверной комнаты. Создавая копию на ленте, используйте аргументы команды, специфические для этого способа. SQL Server не поддерживает удаленные ленточные накопи тели. При создании копии на ленту SQL Server записывает справоч ную информацию на метке ленты: имя БД, время и дату создания
www.books-shop.com
Microsoft SQL Server 2000. Новейшие технологии копии. Так как SQL Server использует стандартный формат Microsoft Таре Format, одну ленту можно использовать для хранения данных не только от SQL Server. Специфика копирования на Копирование на ленту похоже на процесс копирования на диск, но не во • Аргумент UNLOAD — SQL Server автоматически перематывает и выгружает ленту из накопителя по завершении копирования. Этот аргумент принимается по умолчанию и активен, пока Вы не ука жете • Аргумент BLOCKSIZE — позволяет изменить размер блока, указы ваемый в байтах при перезаписи ленты с применением аргументов FORMAT или SKIP и INIT. При создании страховочной копии на ленте SQL Server сам выбирает размер блока, но Вы можете прину дительно назначить размер блока аргументом BLOCKSIZE. • Аргумент FORMAT — записывает заголовок на всех томах (фай лах), используемых для создания копии. Если FORMAT задан при копировании на ленту, аргументы INIT и SKIP подразумеваются и могут быть опущены. • Аргумент SKIP — позволяет игнорировать заголовочную инфор мацию, которая может включать дату истечения срока хранения ленты и другую информацию. По умолчанию заголовки читаются. Типы страховочных копий В зависимости от потребностей и конкретной ситуации используется комбинация возможных типов копирования. Правильный подбор порядка и типов копирования позволяет ускорить создание копии и повысить надежность хранения данных. Полная копия базы данных Если Ваша БД нужна в основном для чтения, полной копии может оказаться достаточно для предотвращения потери данных. Полная копия служит стартовой точкой, от которой идет отсчет при восста новлении данных после сбоя системы. При создании полной копии базы данных сохраняются: • любые действия над БД, имевшие место в процессе копирования; • все незафиксированные транзакции, отмеченные в журнале; • участки журнала транзакций, сохраненные в копии, — они гаран тируют целостность восстановленных данных.
www.books-shop.com
ГЛАВА 2:
сервером
Дифференциальная копия Дифференциальная копия (Differential Backup) создается быстрее, чем пол ная; быстрее идет и Дифференциальная копия подхо дит для копирования часто модифицируемой БД, создавайте только если есть полная Для создания дифференциальной копии коман да BACKUP включает специальное предложение DIFFERENTIAL: BACKUP DATABASE TO [WITH DIFFERENTIAL] ]
|
При создании дифференциальной копии SQL Server копирует только те части базы, что изменились со времени создания полной копии, и незафиксированные транзакции, отмеченные в журнале. Если какаято запись была модифицирована несколько раз со време ни создания последней полной копии, дифференциальная копия со держит только последнее значение записи. В этом она отличается от копии журнала транзакций, когда сохраняется вся история измене ний данной записи. Копия журнала транзакций Копия журнала транзакций сохраняет все изменения в БД. BACKUP LOG | ТО [, ...n] [WITH [[,] | NOINIT}] [[,] [NAME = ]
|
Копия журнала транзакций может быть использована только в сочетании с полной копией БД. Журнал транзакций восстанавлива ется поверх восстановленной полной базы. Как SOL Server копирует журнал транзакций При создании копии SQL Server копирует журнал с последнего удач но выполненного выражения BACKUP LOG до конца текущего жур нала. Затем сервер урезает журнал до активной его части, начинаю щейся от самой старой незавершенной транзакции и продолжающей ся до конца журнала.
www.books-shop.com
2
Microsoft SQL Server 2000, Новейшие технологии
У команды BACKUP LOG двойное назначение: она применяется как для управления журналом, так и для создания копий. Чтобы под держивать объем журнала в разумных пределах, периодически созда вайте копию. Если даже после создания копии он занимает слишком много места, у сервера скорее всего очень старая открытая транзакция. При заполненном журнале транзакций пользователи не смогут нор мально работать с БД, а Вы — успешно восстановить БД после сбоя. Журнал надо очистить, создав полную копию базы или урезав его. BACKUP LOG ТО [WITH
| ...n] |
Очистить журнал транзакций, не создавая страховочной копии, мож но, задав аргумент TRUNCATE_ONLY — SQL Server удалит неактив ную часть журнала, освободив в нем место. Если очистить журнал перед созданием полной копии БД, страховочная копия займет мень ше места. Очищенный журнал не годится для восстановления БД — рекомендуется сразу создать полную копию БД. При катастрофичес ком наполнении журнала задайте аргумент NO_LOG. Используйте этот аргумент, только если журнал транзакций настоль ко полон, что не позволяет выполнить команду BACKUP LOG с ар гументом TRUNCATE_ONLY. При этом неактивная часть журнала урезается, а сама операция в нем не регистрируется (местато нет). Так как журнал не может более использоваться для восстановления БД после сбоев, немедленно создайте полную копию БД. Используется, если файлы БД повреждены или утеряны. SQL Server сохраняет весь журнал транзакций (все, что произошло с момента пос ледней команды BACKUP LOG), даже если доступ к самой базе невоз можен. При этом SQL Server не очищает журнал транзакций (в отли чие от аргументов WITH TRUNCATE_ONLY или WITH NO_LOG). Копия позволяет восстановить данные вплоть до момента Страховочная копия файла или группы файлов базы данных В главе 3 я расскажу об архитектуре хранения данных SQL Server 2000. Пока же отмечу, что БД состоит из одного или более файлов, кото рые можно объединить в группы. Соответственно изменениям архи
www.books-shop.com
ГЛАВА 2: Управление сервером хранения меняется и подход к созданию страховочных ко пий. Если у Вас очень большая БД, страховочная копия может вклю чать только некоторые из составляющих ее файлов. Это позволит со здать страховочную копию, когда время не позволяет выполнить ко пирование всей базы. BACKUP DATABASE [ TO [, ...n]]
|
Где =
|
=
При создании страховочной копии файла (группы файлов) самые важные можно копировать по одному. Для гарантии, что файлы регу лярно копируются, организуйте ротацию создания копий. Помимо индивидуальных файлов, регулярно копируйте журнал транзакций, чтобы при восстановлении файла из копии Вы могли восстановить целостность базы. Копируя индивидуальные файлы или группы, в команде создания копии можно указать неограниченное число имен (версия 7.0 позволяла указывать не более 16). Если БД включает несколько файлов или групп файлов, может ока заться, что некоторые файлы надо копировать единым блоком — на пример, при создании индексов. SQL Server автоматически определяет, создавался ли индекс с момента последнего копирования, и, если да, требует копировать весь набор задействованных файлов как единый блок. При создании индекса журнал транзакций содержит запись толь ко о самом факте индексирования и список страниц, использованных для создания индекса. При восстановлении БД и применении копии журнала транзакций SQL Server выполняет CREATE INDEX с исполь зованием исходных страниц (рис. 237). Чтобы SQL Server мог восстановить индекс, все файлы БД, содер жащие таблицы, охваченные индексом, должны быть в том же состо янии, в каком были при создании индекса. Если индекс и его табли цы созданы в пределах одной группы файлов, вся группа должна по пасть в копию единым блоком. Если индекс создается в одной группе файлов, а таблица находится в другой, обе группы файлов нужно ко пировать единым блоком.
www.books-shop.com
114
Microsoft SQL
2000, Новейшие технологии
Рис. 237. Размещение данных по индивидуальным файлам влияет на состав страховочной копии.
копирования базы данных Если БД невелика и затраты на создание страховочной копии укла дываются в разумные рамки, выполняйте полное копирование. Если БД используется в основном для чтения и модификации нечасты, небольшие потери, возможно, приемлемы. При регулярном создании только полной копии журнал транзак ций может переполниться, и БД станет неработоспособной. Во избе
www.books-shop.com
ГЛАВА 2;
сервером
жание этого периодически очищайте журнал транзакций. Это можно делать вручную командой BACKUP или автоматически, установив sp_dboption [, log on chkpt'] [, После на значения этого параметра журнал транзакций БД будет автоматичес ки сбрасывать все «грязные» страницы на диск и урезать неактивную часть журнала. Эта операция выполняется примерно раз в минуту. Для базы с активным параметром log on chkpt копирование журнала невозможно (там и копироватьто нечего). Стратегия полного копирования базы данных и последующего копирования журнала транзакций Помимо полного копирования надо создавать регулярные копии журнала транзакций для сохранения истории всех изменений БД с момента создания полной копии. Это самая популярная стратегия. Имея полную копию БД и копии журнала транзакций, Вы можете восстановить базу целиком и использовать копии журнала транзак ций для приведения БД в состояние, предшествовавшее сбою. Поте ряны будут только данные, не сохраненные с момента создания пос ледней копии журнала транзакций. Стратегия создания дифференциальных копий базы данных Если Вы используете дифференциальные копии БД, Вам нужны пол ная копия БД, копии журнала транзакций и сама дифференциальная копия. Последняя включает только ту часть базы, что изменилась с момента создания последней полной копии. При создании дифферен циальной копии SQL Server не копирует журнал транзакций, так что Вам надо позаботиться о регулярном копировании журнала. Для вос становления БД годится только последняя дифференциальная копия. Стратегия создания копий индивидуальных файлов или групп Этот подход применяется для очень больших БД, где информация распределена по многим физическим файлам. Вкупе с регулярным копированием журнала транзакций эта стратегия позволяет ускорить восстановление БД. Создание страховочных копий и Копирование на несколько физических устройств обычно идет быст рее, чем на одно. SQL Server позволяет ускорить создание копии за счет параллельной записи данных на все подключенные устройства. Скорость копирования зависит и от производительности устройств, на которое выполняется запись. Очевидно и то, что ленточные накопите ли обычно медленнее дисковых. Хотя SQL Server способен выполнять копирование при активно работающих пользователях, их присутствие может повлиять на длительность процесса. Ⱦɚɧɧɚɹɜɟɪɫɢɹɤɧɢɝɢɜɵɩɭɳɟɧɚɷɥɟɤɬɪɨɧɧɵɦɢɡɞɚɬɟɥɶɫɬɜɨɦ%RRNVVKRS ɊɚɫɩɪɨɫɬɪɚɧɟɧɢɟɩɪɨɞɚɠɚɩɟɪɟɡɚɩɢɫɶɞɚɧɧɨɣɤɧɢɝɢɢɥɢɟɟɱɚɫɬɟɣɁȺɉɊȿɓȿɇɕ Ɉɜɫɟɯɧɚɪɭɲɟɧɢɹɯɩɪɨɫɶɛɚɫɨɨɛɳɚɬɶɩɨɚɞɪɟɫɭ[email protected]
g
Microsoft SQL Server 2000, Новейшие технологии
Восстановление страховочных копий Если почемулибо Вам понадобилось восстановить данные из копии (вовсе не обязательно, что это следствие катастрофического сбоя БД), Вы должны иметь четко продуманный и протестированный план. В критической ситуации экспериментировать некогда — Вы должны быть готовы заранее. Автоматическое восстановление При сбое системы SQL Server способен автоматически восстановить целостность БД. Автоматическое восстановление происходит каждый раз при запуске SQL Server. Взгляните на выдержку из журнала сведения о стартовых процедурах. Starting up database Opening file Opening file 2 transactions rolled forward. 0 transactions rolled Starting up database Recovery Автоматическое восстановление гарантирует целостность баз дан ных. Этот внутренний механизм анализирует журнал транзакций и предпринимает соответствующие действия. Как видно из приведен ного фрагмента, SQL Server обнаружил две завершенные, но незафик сированные транзакции и выполнил окончательную фиксацию. SQL Server анализирует журнал транзакций, начиная с последней операции Checkpoint, до момента остановки SQL Server или сбоя. Точка выполнения checkpoint представляет собой нечто вроде заклад ки, отмечающей момент записи данных на диск. • Если журнал транзакций имеет записи о завершенных (Committed) транзакциях, не сброшенных на диск, SQL Server выполняет опе рацию «roll forward», записывая данные на диск. • Если журнал транзакций содержит записи о незавершенных тран закциях, SQL Server выполняет операцию «roll back». Эти транзак ции в базу данных не попадают. Частота исполнения Checkpoint зависит от величины интервала восстановления (Recovery Interval). Это значение выставляется в ми нутах и может быть от 1 до 32 767. Чем оно больше, тем дольше SQL Server будет восстанавливаться после нормального или нештатного
www.books-shop.com
ГЛАВА 2;
сервером
завершения работы. Слишком маленькое значение интервала восста новления может перегрузить сервер, так как он будет слишком часто заниматься записью на диск. Действуйте осмотрительно. По умолча нию интервал восстановления — 5 минут. SQL Server самостоятельно определяет частоту исполнения опера ции Checkpoint. Сервер анализирует интенсивность модификаций БД (для каждой индивидуально), определяет длительность восстановле ния (здесь и учитывается значение параметра Recovery interval) и ре шает, выполнять Checkpoint или подождать. Подготовка к восстановлению базы данных из копии Перед восстановлением БД нужно собрать сведения о страховочных копиях — это гарантирует, что копия содержит нужную информацию. Вы также должны быть уверены, что у Вас есть полный комплект файлов, составляющих копию. Проще всего получить сведения о страховочной копии через гра фический интерфейс: выберите имя постоянного на ко торое выполнялось копирование, и, щелкнув правой кнопкой, из контекстного меню выберите команду Properties. Появившееся диа логовое окно позволяет получить подробную информацию о страхо вочной копии. Щелкнув кнопку View contents, Вы получите дополни тельные сведения о копии. Аналогичную информацию можно получить командой RESTORE HEADERONLY FROM <имя постоянного устройствах Как это час то бывает, команды языка дают более подробные сведения, чем удоб ный графический интерфейс. Элемент описания
Значение pubs backup Первая копия 1
ExpirationDate
NULL
Compressed
0
Описание Имя устройства. Описание. Тип копии: 1 — БД, 2 — жур нал транзакций, файл, 5 — дифференциальная копия. Дата, после которой копию можно будет затереть при записи новой. Использовалась ли компрес сия (это значение всегда равно 0, так как SQL Server не поддерживает
www.books-shop.com
SQL
118
2000, Новейшие технологии (продолжение)
Элемент описания
Значение
Описание
Position
1
Положение копии в томе (этот параметр имеет смысл при копировании файлов).
DeviceType
102
Тип устройства (диск, лента, постоянное или временное): 102 — означает постоянное устройство на диске.
UserName
Кто выполнял копирование. NT_DIMAA
Сервер, выполнявший копирование.
DatabaseName
Pubs
Имя базы данных
DatabaseVersion
539
Версия базы данных (эта информация предназначена для внутреннего использо вания сервером).
DatabaseCreation Date
20000806 01:41:00.000 Дата создания копии.
BackupSize
1714688 7000000023400001
CheckpointLsn
Размер копии. Первый номер в последова тельности транзакций, зафиксированных в
7000000023600001
Последний номер в последо вательности транзакций, зафиксированных в журнале.
7000000023400001
Номер записи в журнале, созданной при выполнении операции Checkpoint.
О
Номер записи в журнале, созданный при выполнении последнего полного копиро вания журнала.
20001210 14:39:45.000 Начало BackupFinishDate
20001210 14:39:49.000 Окончание копирования. О
Порядок сортировки, напри мер, (ID = 106).
www.books-shop.com
ГЛАВА 2; Управление сервером
CodePage
227
119 (продолжение) Идентификатор набора сим волов, например, (ID = 5).
1049
Идентификатор порядка сор тировки символов Unicode (ID = 1033).
Unicode
196609
Идентификатор типа сравне ния строк в формате Unicode.
CompatibilityLevel
80
Уровень совместимости БД.
4608
Идентификатор поставщика ПО.
Software Version Major
7
Основная версия сервера.
Software Version Minor
0
Вспомогательная версия сервера.
Software Version Build
623
Номер сборки сервера.
MachineName
NT_DIMAA
Имя компьютера.
Flags
0
Бит О указывает, что в копии журнала сохранены данные, внесенные операци ями массивной модификации.
BindingID
Идентификатор привязки базы данных. Идентификатор пути
Collation
Правила разбора текста, используемых в БД.
Может, Вам понадобится не все, но приятно, что все это можно узнать. Самая важная информация относится к правилам разбора тек ста (Collation). Вместо того, чтобы начинать восстановление копии, которое заведомо закончится сообщением об ошибке, можно снача ла проверить, совпадают ли правила целевого сервера и копии. Если нужны сведения о списке файлов в наборе копий, исполь зуйте команду RESTORE FILELISTONLY. Она позволит избежать восстановления не той базы данных.
www.books-shop.com
20
Параметр PhysicalName Туре Size
Microsoft SQL Server 2000, Новейшие технологии Описание Логическое имя файла Физическое имя файла Тип (D — L — журнал) Имя группы файлов для каждого файла Размер (текущий) Размер (максимальный)
Еще один вариант команды — RESTORE LABELONLY — позво ляет получить сведения о метке носителя, хранящего копию. Для проверки качества копии служит RESTORE Успешное исполнение этой команды означает, что набор копий по лон и все его элементы нормально читаются. Структура данных ко пии при этом не проверяется. Установите режим use only Администратор с достаточными привилегиями (системный админис тратор или член роли db_owner) должен установить режим использо вания БД, закрывающий к ней доступ всем, кроме ее «владельца». Этот режим устанавливает команда sp_dboption, <имя базы use Создайте копию журнала Для гарантии целостности БД перед любой операцией восстановле ния стоит создать страховочную копию журнала транзакций. Восста новление журнала из этой копии и восстановление транзакционной целостности БД — последний этап процесса восстановления. Если ко пии журнала не делать, все модификации с момента предыдущего ко пирования журнала и выведения БД в режим Offline будут потеряны. Работайте в базы данных Master При восстановлении данных из страховочной копии необходимо рабо тать в контексте Master, что при исполнении команд средствами SQL Server Query Analyzer или вызове сценария из командной строки, не за будьте сделать Master текущей, дав команду USE MASTER. Что делает SQL Server в процессе восстановления При восстановлении данных из страховочной копии SQL Server авто матически предпринимает ряд действий, позволяющих гарантиро вать, что база восстановлена быстро и с минимальным воздействием на работу сервера.
www.books-shop.com
ГЛАВА 2:
сервером
Проверяет По команде RESTORE DATABASE SQL Server выполняет ряд прове рок, дабы убедиться, что страховочная копия не будет записана по верх существующей БД. Восстановление не выполняется, если: • БД, указанная для восстановления, уже существует и ее имя не совпадает с записанным в страховочной копии; • набор файлов БД на сервере отличается от набора файлов, запи санных в копии; • нет файлов, необходимых при восстановлении базы или группы файлов; при этом SQL Server сообщает об ошибке, указывая пере чень файлов, которые должны восстанавливаться единой группой (в рамках одной операции Заново создает базу данных и все связанные с ней файлы При восстановлении базы из полной копии SQL Server заново созда ет все нужные файлы и помещает их в каталоги, записанные при со здании страховочной копии. Параметры команды восстановления Восстановление БД можно выполнить через удобный графический интерфейс, но никогда не помешает и знание команд: RESTORE DATABASE \ [FROM [WITH FILE = [[,] MOVE TO REPLACE] ) [[,] {NORECOVERY | RECOVERY | STANDBY = ] где \ | TAPE | =
\ \
FILE Файл может включать несколько страховочных копий. Чтобы восста новить нужную, укажите ее номер. Номер копии можно узнать, вы полнив команду: RESTORE HEADERONLY FROM DISK =
имя
В полученном результате номер копии хранится в поле Position.
www.books-shop.com
22
Microsoft SQL Server 2000, Новейшие технологии
MOVE Страховочная копия хранит сведения о физическом расположении файлов, содержащих информацию БД. Сюда же восстанавливается копия. Для переноса базы на другой диск или в иной каталог служит аргумент Move to. REPLACE Аргумент служит для замены существующей БД версией, хранящейся в копии. Это позволяет восстановить базу если: • имя восстанавливаемой базы отличается от имени, записанного в копии; • набор файлов БД отличается от набора, содержащегося в копии; при использовании этого аргумента SQL Server игнорирует разли чия в размерах файлов. Инициализация процесса восстановления При восстановлении данных из копии работа сервера не особенно отличается от того, что происходит при автоматическом восстановле нии БД при запуске. Команда RESTORE дает Вам возможность уп равлять поведением сервера в той части, что относится к обработке незавершенных транзакций. По умолчанию сервер использует аргу мент RECOVERY, и тем самым процесс восстановления копии вклю чает откат (Rollback) незафиксированных транзакций и окончатель ную фиксацию транзакций, прошедших Commit. Аргумент NORECO VERY заставляет сервер игнорировать наличие незафиксированных транзакций. NORECOVERY используется при восстановлении из нескольких страховочных копий и указывается для всех копий, кро ме последней. Оба термина RESTORE и RECOVERY можно перевести как «вос становление», однако они описывают разные процессы. Восстанов ление БД из копии журнала транзакций (RESTORE) осуществляет по вторное внесение физических изменений, сделанных в базе. Восста новление (RECOVERY) подразумевает приведение базы в состояние транзакционной целостности, когда у нее нет зафиксированных, но незаписанных или незафиксированных и «повисших» транзакций. В конце восстановления БД с использованием копии журнала транзак ций в базе могут оставаться активные транзакции, требующие отката. Это значит, что восстановление (RECOVERY) требуется, только ког да все копии журнала транзакций были восстановлены (операция RESTORE завершена). По окончании восстановления транзакцион ной целостности и отката всех незавершенных транзакций Вы более не можете использовать копию журнала.
www.books-shop.com
ГЛАВА 2; Управление сервером Единственное исключение — аргумент WITH STANDBY команды RESTORE. Если он задан, сервер восстанавливает транзакционную целостность и сохраняет сделанные изменения в файле UNDO. Вы полняя следующую команду RESTORE LOG, SQL Server использует UNDOфайл для устранения влияния последнего восстановления целостности, что позволяет осуществить восстанов ление из копии журнала транзакций. Восстановление различных типов страховочных копий В зависимости от используемого типа копии следует выбирать наи более оптимальный подход. Восстановление базы данных из полной копии При восстановлении из полной копии SQL Server заново создает БД и все связанные с ней файлы и размещает их в исходных каталогах. Когда используется Полную копию имеет смысл восстанавливать при сбое физического носителя, повреждении, затронувшем БД в целом, или нечаянном удалении файлов базы. Полная копия нужна также при восстановле нии БД на другом сервере. Если все, что нужно восстановить, — един ственная полная копия базы, задайте аргумент RECOVERY, иниции рующий восстановление транзакционной целостности. Если же, помимо полной копии базы, Вы собираетесь восстано вить одну или более дифференциальных копий, копии журнала тран закций, задайте аргумент NORECOVERY, позволяющий отложить процесс восстановления транзакционной целостности до окончания процесса восстановления. Восстановление дифференциальной копии При этом SQL Server восстанавливает только те участки БД, что из менились с момента создания последней полной копии. База возвра щается в то же состояние, что имело место на момент создания диф ференциальной копии. Дифференциальные копии позволяют уско рить восстановление БД. Имея и дифференциальную копию, и копию журнала транзакций, лучше использовать дифференциальную копию. Оба варианта возвращают базу в состояние на определенный момент времени, но восстановить дифференциальную копию быстрее. Восстановление копии журнала транзакций При наличии копии журнала транзакций SQL Server использует его содержание для восстановления всех изменений, записанных в жур нале транзакций.
www.books-shop.com
SQL Server 2000. Новейшие технологии RESTORE LOG \ [FROM [, [WITH [[,] {NORECOVERY | RECOVERY | STANDBY = [[,] STOPAT = \ Когда использовать копию журнала Копия журнала транзакций обычно применяется для внесения изме нений, имевших место с момента создания последней полной или дифференциальной копий. Очень важно, что Вы можете использо вать копию журнала транзакций для восстановления БД на опреде ленный момент времени. Хотя дифференциальная копия и позволяет ускорить восстановление базы, для обеспечения целостности данных следует восстановить копии журнала транзакций, сделанные после создания дифференциальной копии. Перед использованием копии журнала транзакций восстановите полную копию БД. Чтобы восстановить несколько копий журнала транзакций, задайте аргумент NORECOVERY для всех копий, кроме последней. SQL Server отложит процесс восстановления транзакци онной целостности до завершения восстановления копий. Восстановление журнала транзакций на определенный момент времени При восстановлении копии журнала транзакций аргумент STOPAT позволяет вернуть БД в состояние на точно указанный На пример, в 12:34 незадачливый оператор выполнил команду: DELETE FROM и уничтожил все записи в таблице заказов. Знание момента катастро фы и наличие копии журнала транзакций позволит восстановить БД в состояние на 12:33. Все, что было потом, — история. Так как SQL Server восстанавливает БД по записям журнала тран закций, сделанным до указанного момента, укажите дату и (с точностью до минуты), и все операции, происшедшие позже, учиты ваются не будут. Восстановление копии индивидуальных файлов или группы файлов Восстановление индивидуальных файлов или групп — довольно ред кий вариант, но у него свои плюсы. RESTORE DATABASE
www.books-shop.com
ГЛАВА 2; Управление сервером [FROM [, где =
\
25
=
Восстановление индивидуальных файлов или групп позволяет ус корить восстановление очень большой БД. Это может понадобиться после повреждения или случайного удаления одного из файлов. Для приведения файла (группы файлов) в состояние, не противо речащее остальной части базы, следует восстановить все журналы транзакций, созданные с момента последнего полного копирования. При восстановлении SQL Server использует только те записи в жур нале транзакций, что относятся к восстановленному файлу. Если таблица и индекс размещены в разных группах файлов, эти группы надо копировать как единое целое. Точно так же должно вы полняться восстановление. Восстановленные файлы и группы поме щаются в исходные каталоги. Индивидуальные файлы можно восста навливать и из полной копии. Использование резервного сервера Чтобы сервер был постоянно доступен, можно рассмотреть исполь зование резервного (Standby) сервера: RESTORE | \ FROM л] [[,] MOVE TO [WITH NORECOVERY | RECOVERY | STANDBY = ] Резервный сервер можно применять для переключения на него пользователей при сбое основного или хранения БД, открытой толь ко для чтения и для поддержки принятия решений. Резервный сервер создается путем восстановления на нем полной копии БД, сделанной на основном сервере. Еще один способ переме щения базы на другой сервер — копировать туда нужные файлы и с помощью системной хранимой процедуры привязать базу к серверу. Файл БД версии 8.0 хранит необходимую информа цию о себе и может быть легко подключен к любому серверу. Версия 8.0 позволяет отключать/подключать базы данных из кон текстного меню All Tasks, вызываемого щелчком правой кнопкой имени зарегистрированного сервера или имени БД в консоли адми нистрирования. Для поддержания резервного сервера в состоянии полной готов ности Вы должны регулярно восстанавливать на него все копии жур Ⱦɚɧɧɚɹɜɟɪɫɢɹɤɧɢɝɢɜɵɩɭɳɟɧɚɷɥɟɤɬɪɨɧɧɵɦɢɡɞɚɬɟɥɶɫɬɜɨɦ%RRNVVKRS ɊɚɫɩɪɨɫɬɪɚɧɟɧɢɟɩɪɨɞɚɠɚɩɟɪɟɡɚɩɢɫɶɞɚɧɧɨɣɤɧɢɝɢɢɥɢɟɟɱɚɫɬɟɣɁȺɉɊȿɓȿɇɕ Ɉɜɫɟɯɧɚɪɭɲɟɧɢɹɯɩɪɨɫɶɛɚɫɨɨɛɳɚɬɶɩɨɚɞɪɟɫɭ[email protected]
Microsoft SQL Server 2000, Новейшие технологии нала транзакций, сделанные на основном сервере. Соответственно копии журнала должны создаваться по строгому графику. При вос становлении копии журнала транзакций всегда указывайте аргумент NORECOVERY, если не собираетесь выводить под рабочую нагрузку резервный сервер параллельно с основным. Если резервный сервер хранит базу, открытую только для чтения, пользователи смогут рабо тать с данными, что снизит нагрузку на основной. Резервный сервер можно использовать и для анализа качества информации. Если при восстановлении копии журнала транзакций указать аргумент STAND BY, сервер создаст специальный файл, позволяющий отменить сде ланные изменения. Анализ информации после восстановления копии журнала или исполнение команд DBCC позволят локализовать ошиб ку, а изменения, внесенные последней копией журнала транзакций, можно отменить. Такой механизм позволяет установить время порчи информации или базы и с помощью аргумента STOP AT восстано вить данные вплоть до этого момента. Замена основного сервера резервным Чтобы вывести резервный сервер под рабочую нагрузку, надо создать на нем полную копию БД с рабочего сервера. Для этого в первую очередь создайте копию журнала транзакций с аргументом NO_TRUNCATE, позволяющим включить все незавершенные транзакции с момента со здания последней копии журнала. Отключите рабочий сервер от сети. Восстановите последнюю сделанную копию журнала транзакций на ре зервном сервере и укажите аргумент RECOVERY. Сервер восстановит транзакционную целостность, и пользователи смогут не только читать, но и записывать информацию в Если база резервного сервера использовалась только для чтения и Вам не нужно восстанавливать дополнительные копии журнала тран закций, дайте команду RESTORE DATABASE WITH RECOVERY и резервный сервер можно использовать как рабочий. Портирование журнала транзакций Возможность портирования журнала транзакций (Log Shipping) по явилась еще в версии 7.0: набор утилит был представлен в Resource Kit. SQL Server 2000 эту функциональность поддерживает официаль но и позволяет передавать копии журнала на резервный сервер с тем, чтобы он смог заменить основной в случае сбоя. Резервный сервер постоянно находится в режиме восстановления (recovery mode) и при нимает журналы транзакций. При этом он позволяет выполнять не модифицирующие запросы и может быть использован для подготов ки
www.books-shop.com
ГЛАВА 2:
сервером
27
Восстановление поврежденных системных баз данных Если диск, где расположены системные БД, поврежден и Вы не мо жете запустить сервер, системные базы придется перестроить с помо щью утилиты Rebuildm.exe SQL Server. При перестроении заново со здаются БД Master, Model и Msdb. После этого надо восстановить Master из страховочной копии (бу дем надеяться, что она у Вас есть). Из страховочной копии восстано вите и Msdb. Это нужно для восстановления информации об опера торах, графике исполнения заданий и другой служебной информа ции. Восстановите и БД Model. Восстановив системные БД, хранимой процедурой sp_attachdb подключите пользовательские. При этом сведения о пользовательс ких базах фиксируются в Master. Все, что надо для подключения пользовательской БД, — составляющие ее файлы, страховочная ко пия не нужна; естественно, БД должна быть в «хорошем Использование графического интерфейса для создания и восстановления страховочных копий базы данных Для работы со страховочными копиями SQL 8.0 предлагает развитый графический Не хочу сказать, что использование кода для вызова хранимых процедур управления копированием потеряло но ММС делает работу с копиями удобной и наглядной, что часто помогает в стрессовых ситуациях. Создание страховочной копии Чтобы создать страховочную копию БД, щелкните ее имя правой кнопкой и в контекстном меню выберите All Раскро ется еще одно меню, в нем выберите команду Backup database, и по явится диалоговое окно (рис. 238). Вы можете указать тип страховочной копии (полная, дифферен циальная, копия журнала транзакций или копия индивидуального файла или группы файлов). Если Вы создаете копию индивидуаль ных файлов, их имена можно ввести в соответствующее поле или най ти на диске, щелкнув кнопку справа от поля ввода. Копия может быть создана сразу или в указанное время. Для назначения графика испол нения щелкните флажок Schedule, затем можно указать график ис полнения в поле справа от флажка. По умолчанию назначается со здание копии каждое воскресенье в полночь. Щелчок кнопки справа от поля ввода позволяет изменить график по Вашему усмотрению.
www.books-shop.com
Microsoft SQL
128
238.
2000. Новейшие технологии
Основные параметры страховочной копии.
Копия может быть создана на ленте или диске. Выбор носителя определяется щелчком переключателя Таре или Disk. Кнопка Select позволяет указать постоянный или временный дисковый файл для создания копии. Их можно назначить до 64, так как сервер способен параллельно копировать сразу на 64 устройства. При создании новой копии устройство может быть полностью перезаписано или новая копия добавлена к уже Это определяют переключа тели Append to media (Добавление копии) и Overwrite existing media (Перезапись носителя). Содержимое назначенных устройств или фай лов можно посмотреть. Если какаято информация была записана в файл, щелчок кнопки Contents выводит диалоговое окно (рис. 239). Вторая вкладка Options позволяет назначить дополнительные пара метры процесса создания страховочной копии. Полученную копию можно проверить на качество (флажок Verify backup upon если копирование выполняется на ленту, отметив флажок Eject tape after backup, Вы укажете серверу выгрузить ленту, когда копия будет создана. Здесь же можно указать имя набора копий и то, как долго ко пия будет считаться активной и не может быть перезаписана. Носи тель можно инициализировать, назначить ему имя и дать
www.books-shop.com
ГЛАВА 2:
сервером
129
Вы можете посмотреть содержимое выбранного файла. Восстановление из копии Чтобы получить доступ к диалоговым окнам управления процессом восстановления БД из копии, щелкните правой кнопкой интересую щую базу, в контекстном меню выберите команду All Tasks, в открыв шемся меню выберите команду Restore Database. Появится диалого вое окно (рис. 240):
Server помнит обо всех ранее созданных копиях каждой базы данных.
www.books-shop.com
130
SQL Server 2000, Новейшие технологии
По каждой базе, расположенной на сервере, хранится информация о ранее созданных копиях и их типах. Набор переключателей позволя ет выбрать восстановление из полной копии (Restore database), восста новление индивидуальных файлов или групп (Filegroups or files), вос становление с постоянных копий devices). В зависимости от выб ранного варианта диалоговое окно показывает, что было сделано ра нее и какие копии можно задействовать. Если копий много и нужно работать только с частью, флажок Select a subset of backup sets (Выб рать подмножество из набора копий) позволяет определить критерии, по которым будут отобраны копии. Это диалоговое окно доступно при выборе переключателя Filegroups or files в основном окне Restore database (рис. 241).
241. При необходимости можно использовать только часть копий. Кнопка Selection criteria (Критерии выбора) позволяет отредакти ровать ранее установленные критерии. Для каждой базы выводится список ранее созданных копий и их взаимосвязь, что показано тон кой линией и отступом. Так, в списке есть две полные копии БД Pubs и копия журнала транзакций. Последняя связана с полной копией и не может быть восстановлена без нее. Чтобы выделить нужные копии, щелкните флажок, расположенный слева в каждой строке списка.
www.books-shop.com
ГЛАВА 2; Управление сервером
131
Если выбрать режим восстановления с копий, вид ди алогового окна изменится (рис. 242). Здесь также предоставляется вы бор типов копий: полная, дифференциальная, журнала транзакций, файла или группы файлов. Вы указываете, с какого устройства восста навливать копию и номер набора, если в одном файле их несколько. Определившись с источником данных и типом восстанавливаемой копии, можно перейти на вкладку Options и задать дополнительные параметры процесса восстановления (рис. 243).
242. Внешний вид диалогового окна меняется в зависимости от выбранного типа восстановления.
www.books-shop.com
132
Microsoft SQL Server 2000, Новейшие технологии
Рис. администратор указывает дополнительные параметры процесса восстановления страховочной копии. Как видите, почти все аргументы команды Restore можно опреде лить в диалоговом окне. Для ленточного накопителя можно указать выгрузку лент после каждого восстановления (Eject tapes after restoring each backup). При восстановлении можно потребовать дополнитель ное предупреждение (Prompt before restoring each Копию мож но принудительно восстановить поверх существующей БД (Force restore over existing database) или восстановить под другим именем (Restore as Если выбрать последний флажок, станет доступ ным список БД на сервере, и Вы можете прославиться, записав ко пию Pubs поверх Master на рабочем сервере. Вы также можете ввести новое имя, и сервер создаст копию БД в другом месте и под другим именем. Три переключателя в нижней части окна позволяют опреде лить состояние БД после восстановления Заключение Администрирование — многоплановая задача, включающая разнооб разные действия по созданию новых БД, объектов в них и копирова нию. В следующей главе мы рассмотрим вопросы, связанные с созда нием новых баз данных и их объектов.
www.books-shop.com
Глава 3 Управление
базами
данных
Итак, мы рассмотрели основные элементы интерфейса. Теперь надо разобраться с особенностями новой архитектуры хранения данных SQL Server — без этого невозможно начать рассмотрение средств со здания баз данных, таблиц, схем и средств построения запросов и анализа работы SQL Server. Здесь же мы начнем разговор об объект ной модели SQL Server, позволяющей использовать внешние языки программирования, такие как Visual Basic, С, Visual FoxPro для мани пулирования компонентами сервера. Базы данных SQL Server и уровни совместимости Архитектурные решения, появившиеся в версии 7.0, в SQL Server 2000 получили дальнейшее Прежде чем обратиться к основным логическим компонентам базы данных, вкратце обсудим важнейшие аспекты физической структуры хранения. При создании базы данных сервер организует три типа файлов: • основной (Primary) файл содержит информацию, необходимую для инициализации БД; такой файл может быть только один; • вспомогательные (Secondary) файлы хранят данные, не умещаю щиеся в основном; использовать их не обязательно, но они позво ляют поместить БД на несколько физических не при меняя RAIDтехнологии; • в файлах журналов транзакций хранится информация, необходи мая для штатного восстановления БД; каждая БД должна иметь хотя бы один файл размещения журнала, всего же их может быть несколько.
www.books-shop.com
Microsoft SQL
2000, Новейшие
Хотя это не обязательно, Вы можете создавать дополнительные группы файлов для пользовательских данных. Файлы журнала тран закций не включаются ни в одну группу. Объекты БД могут быть созданы в любой группе файлов (эта часть несколько напоминает схему сегментов версии 6.x, но проще в ис пользовании и сопровождении). Более мелкие детали архитектуры хранения я пока опущу — им посвящены самостоятельные разделы. Создать новую БД можно тремя способами: средствами SQL, средствами графического интерфейса администратора и с по мощью одного из многочисленных мастеров. Начнем с TSQL, так как он наиболее полно описывает новые воз можности, предоставленные администратору. Команды удоб нее всего исполнять в SQL Query Analyzer. Синтаксис команды Create Database таков: CREATE DATABASE [ ON [ PRIMARY ] [ < filespec > [, < > ] [ LOG ON {< filespec > [ COLLATE [ FOR ATTACH ]
Спецификации индивидуальных групп файлов: группы FILEGROUP
= файла> [ , . . . п ]
Рассмотрим аргументы команды. • database_name Имя создаваемой БД. Оно должно быть уникаль ным в пределах сервера и соответствовать требованиям, предъяв ляемым к идентификаторам. Не ошибетесь, если используете толь ко латинские буквы, цифры и символы
www.books-shop.com
ГЛАВА 3; Управление
данных
ПРИМЕЧАНИЕ SQL Server позволяет создавать объекты с именами, использующими символы кириллицы:
create table insert into select * from
(поле (поле) values
Приведенные команды не вызывают у сервера возражений, но по добному искушению лучше не поддаваться. Точно сказать, когда у возникнут проблемы, я не могу, но будьте уверены, случится это почти наверняка. Особенно это замечание относится к нович кам, использующим SQL Server на платформе Windows 9x. • •
• •
•
•
•
ON Определяет начало описания файлов, на которых будет раз мещена БД. PRIMARY Определяет файл в первичной группе, на которой все гда располагается системный каталог. БД имеет только один пер вичный цайл. Если этот необязательный аргумент опущен, выби рается первый файл из перечисленных в Вместо этого символа укажите дополнительные файлы, в ко торых хотите разместить БД. LOG ON Задает начало списка файлов, определенных для раз мещения журнала транзакций. Если он опущен, файл создается автоматически, и его размер составляет 25% от суммарной вели чины перечисленных файлов хранения данных. Как теперь просто невозможно положить журнал и данные в один файл. FOR LOAD Остался для совместимости с версиями SQL Server 6.x. Теперь в этом параметре нет нужды, так как при восстановлении БД из резервной копии SQL Server 2000 прекрасно создаст новую БД. FOR ATTACH Позволяет подключить существующий набор файлов БД. Если подключаемая БД ранее была принудительно от ключена, проще вызвать процедуру sp_attach_db. ATTACH также используется, если подключаемая БД состоит из более чем 16 файлов. COLLATE Collation_name Имя порядка разбора текста — новая функциональность версии 8.0. Как Вы помните, при установке сервера администратор может указать нужный порядок разбора, и он будет распространяться на все вновь создаваемые БД, если в ко манде CREATE DATABASE не будет указано иного (см. главу 1). Поддержка правил разбора на более низком, чем сервер, уровне снимает ограничения на подключение БД, созданных с разными правилами, и предоставляет больше гибкости при хранении ин Ⱦɚɧɧɚɹɜɟɪɫɢɹɤɧɢɝɢɜɵɩɭɳɟɧɚɷɥɟɤɬɪɨɧɧɵɦɢɡɞɚɬɟɥɶɫɬɜɨɦ%RRNVVKRS ɊɚɫɩɪɨɫɬɪɚɧɟɧɢɟɩɪɨɞɚɠɚɩɟɪɟɡɚɩɢɫɶɞɚɧɧɨɣɤɧɢɝɢɢɥɢɟɟɱɚɫɬɟɣɁȺɉɊȿɓȿɇɕ Ɉɜɫɟɯɧɚɪɭɲɟɧɢɹɯɩɪɨɫɶɛɚɫɨɨɛɳɚɬɶɩɨɚɞɪɟɫɭ[email protected]
Microsoft SQL Server 2000, Новейшие технологии
• •
•
•
• •
формации на разных языках. Как мы еще увидим, разработчики SQL Server 2000 пошли до конца, и порядок разбора можно опре делять для индивидуальных полей таблицы. Логическое имя файла, используемое SQL Server для ссылки на файл, должно быть уникальным в пределах сервера. Путь и имя физического файла. Как и в предыду щей версии, для размещения БД «официально» можно использо вать только локальные диски сервера. Вообщето можно заставить сервер работать с удаленными дисками, но я не стану рассказы вать, как обмануть сервер, — не могу представить ситуацию, когда такое решение может оказаться разумным. Если Вы всетаки най дете способ поместить файл на удаленном сервере, не пытайтесь поместить там журнал — сервер должен иметь гарантированную возможность сброса на диск зафиксированных транзакций. Гово ря об «удаленных» дисках я имел ввиду стандартные разделяемые ресурсы, доступные по обычной сети. Вместе стем версия 8.0 име ет встроенную поддержку storage area network (SAN) — высокоско ростных надежных сетей для организации хранилищ большой ем кости, к которым обращаются один или более серверов. SIZE Задает начальный размер файла. Для указания килобайт или мегабайт можно использовать MB и KB, по умолчанию раз мер считается указанным в MB. Для первичного файла размер определяется размером БД Model, для остальных, если размер не указан, принимается 1 Мб для файлов данных и файлов, в размещается журнал. Определяет максимальный размер, до которого может вырасти файл. Если параметр не указан, файл растет, пока не за полнит все свободное пространство. При работе на Windows, ког да диск близок к заполнению, в журнал событий (Windows NT event log) записывается соответствующее UNLIMITED Позволяет файлу расти в пределах свободного ме ста на диске. Размер приращений файла. Если аргумент равен О, файл не будет менять указанный начальный размер. Размер при ращения указывается в Кб, Мб или По умолчанию размер прира щения — минимум — 64 Кб. Указанный размер округляется до величины, кратной 64 Кб. Величину приращения можно задать толь ко целым числом. Если хотите приращение в 10,5 Мб ум ножьте эту величину на 1 024 и укажите приращение как 10 752 Кб.
www.books-shop.com
ГЛАВА 3: Управление базами данных
ПРИМЕЧАНИЕ Хотя версия 8.0 позволяет автоматически увеличивать размер файла по мере необходимости, в реальности, когда сервер ра ботает под промышленной нагрузкой, имеет смысл сразу указать при мерный размер файла (файлов) БД, чтобы сервер не тратил лишних усилий на выделение места на диске. Кстати, подобная предусмотри тельность дает больше шансов, что файл будет размещен в непрерыв ной цепочке кластеров. Это же касается и файла журнала транзакций. Параметры автоматического увеличения и уменьшения файлов устанавливаются на уровне БД. В соответствии с ними файлы дан ных и журнала транзакций увеличиваются по мере надобности. За пись в файлы выполняется по принципу пропорциональности запол нения: чуточку в этот файл, чуточку — в другой. При указании атри бута автоматического уменьшения (это позволяет сделать хранимая процедура sp_dboption SQL Server поглядывает за размером файла и степенью его заполнения. Опустев более чем на 75%, файл автоматически сжимается (речь не идет о компрессии — просто уменьшается размер занимаемого дис кового пространства) до заполнения данными примерно на То же происходит с файлами журнала транзакций — только для сжатия файла журнал должен быть по большей части Если же пользователь не делает копию журнала и не урезает его, сжатие невозможно. Процесс, проверяющий, есть ли что «поджать» в журнале транзак ций, запускается примерно раз в 30 минут. «Увидев», что файл жур нала можно уменьшить, он определяет, до какого размера, и выстав ляет метку. Когда журнал созданием копии или прину дительным урезанием, файл уменьшается. Кстати, хотя процесс сжа тия базы данных и следит за тем, чтобы не мешать остальным про цессам на сервере, лучше запускать его, когда с БД никто не работа ет. Сжатие подразумевает реорганизацию страниц и является доста точно «дорогим» процессом. Кроме того, следует учитывать, что наи меньший размер БД, который может быть получен, — тот, с которого она начала расти. Если Вы создадите БД начального размера 200 Мб, затем удалите из нее все, кроме системного каталога, она все равно не сожмется меньше 200 Мб. Если надо сжать БД вручную, примени те команду DBCC для БД в целом, SHRINK FILE — для индивидуальных файлов как данных, так и журнала. За метьте: сжатие файлов журнала можно отложить до того, как сервер выполнит операцию Checkpoint или администратор создаст страхо вочную копию журнала. Дело в том, что сервер может манипулиро
www.books-shop.com
Microsoft SQL Server 2000, Новейшие технологии
138
вать размерами файлов журнала только в рамках неактивной части журнала. Значит, сжатие журнала можно выполнить в несколько при емов по мере уменьшения активной части. В отличие от версии 7.0, у которой урезание журнала требовало обязательного активной части «вручную», SQL Server 2000 применяет более продвинутый алгоритм, и старый прием может не понадобиться. Если же Вы все еще используете версию 7.0 и ис пытываете трудности с урезанием журнала транзакций, могу посове товать следующее. Находясь в контексте интересующей Вас БД, выполните в окне Query Analyzer команду DBCC LOGINFO. Результатом исполнения команды будет таблица вроде этой: Fileld
Нас интересует столбец Status, а в нем — поле со значением 2. Это активная часть журнала. Если строка со значением 2 не первая в таб лице, ужать журнал можно только частично. Как ни старайтесь, ак тивная часть встанет грудью на Вашем пути. Ее нужно переместить в начало файла с помощью большого числа мелких транзакций и пери одического копирования журнала с целью сокращения его активной части до минимума. Создайте в БД рабочую таблицу и начинайте за бивать ее данными в цикле по 100500 операций. После каждого цик ла делайте копию журнала командой Backup Log и снова справляй тесь о положении активной части командой DBCC LOGINFO. Как только активная часть журнала окажется наверху, выполните коман ды Но вернемся к созданию новой БД. Как и раньше, при этом ис пользуется шаблон Model. Базу Model можно модифицировать, как любую — значит, Вы заранее можете создать нужные объек ты, и они будут появляться в каждой вновь создаваемой БД. Среди них могут быть хранимые процедуры, пользовательские типы данных (userdefined data types) и т. д. Определяя аргумент можете указать любое расшире ние для файла. Рекомендуются mdf (для основного файла данных), ndf (для вспомогательных файлов данных) и (для файлов журнала).
www.books-shop.com
ГЛАВА 3;
базами данных
В результате команда для создания новой БД будет примерно такой: CREATE DATABASE ON PRIMARY (NAME = Book1_data, SIZE = 4, MAXSIZE = (NAME = SIZE = 4, MAXSIZE =
LOG ON (NAME = FILENAME = SIZE = 4, MAXSIZE = 200, FILEGROWTH = 1MB), (NAME = Book1_log1, FILENAME = SIZE = 4, MAXSIZE = 200, FILEGROWTH = 1MB) Заметьте: я указал максимально допустимый размер Этого хватит, так как она может увеличиваться до 200 Мб приращениями по 1 Мб; точно так же я задал минимальный размер журнала и разре шил обоим файлам расти до 200 Мб приращениями по 1 Мб. Все фай лы будут размещены на разных физических дисках. Если Вы не указали порядок разбора, будет использован тот, что принят для сервера на этапе установки. По умолчанию файлы входят в стандартную группу. При необходи мости я могу добавить группы файлов командой ALTER DATABASE: . ALTER DATABASE <имя БД> CREATE Затем можно добавлять файлы в группу: ALTER DATABASE ADD FILE
БД> файла> ТО FILEGROUP
Команда ALTER DATABASE у SQL Server 2000 получила ряд но вых атрибутов, в том числе COLLATE. Теперь Вы можете поменять порядок разбора БД, как говорится, «на лету». Имейте, правда, в виду, что «полет» может оказаться довольно долгим. Сервер по сути дела заново вводит все Ваши данные в таблицы, выполняет довольно мно го проверок и для массивной БД лучше использовать ВСР для выг рузки и загрузки данных, тогда как сама база должна быть пересозда на посредством сценариев. Вот, например, что делается на сервере при выполнении команды:
www.books-shop.com
Microsoft SQL Server 2000, Новейшие технологии alter database V o l c a n o collate Cyrillic_General_CI_AS alter database V o l c a n o collate insert
select
* from insert select *,
from insert
*,
[dbo]. [sysfilegroups] select
from
select * f r o m
insert [dbo]. insert insert
[dbo]. select * select
Это только часть команд — полный набор охватывает все пользо вательские таблицы. Очевидно, что затрагиваются индексы, в общем, как обычно, ничего бесплатно не делается, и лучше заранее подумать о порядке разбора. В ALTER DATABASE теперь можно ввести набор параметров, которые ранее были доступны только посредством процедуры sp_ dboption. Они вводятся через атрибут SET <описание параметрах Эти параметры можно разбить на несколько групп: параметры состояния БД, работы с курсорами, автоматического сопровождения БД, ANSI совместимости, способа восстановления. В число параметров состояния входят следующие. • Перевод БД в однопользовательский режим — SINGLE_USER. Перевод БД в режим ограниченного использования — RESTRI CTED_USER. В этом случае доступ к БД получают только члены ролей dbcreator или sysadmin (о ролях см. главу, посвя щенную системе безопасности). И, наконец, стандартный режим, не накладывающий дополнительных ограничений кроме тех, что вносятся системой безопасности. Этот режим называется MULTI_ USER. Параметры OFFLINE|ONLINE позволяют переводить БД из активного в неактивный режим (это необходимо для БД, рас положенной на съемных носителях). Для перевода БД в режим «только чтение» и режим «чтениезапись» служат параметры ONLY|READ_WRITE. Очевидно, что переход из режима доступности в режим ограниченного использования требует от ключения пользователей. Ранее администратору предлагалось, подождав, пока все выйдут из системы, перевести сервер в режим
www.books-shop.com
ГЛАВА 3: Управление базами паузы. Это не позволяло создавать новые подключения, но суще ствующие соединения все равно требовали Приме нение команды KILL было довольно грубым приемом, да и не все гда возможным: например, процесс, исполняющий расширенную хранимую процедуру, убивается не всегда. Теперь же в ALTER DATABASE, помимо параметров модификации, можно включить атрибут WITH <способ завершениях Есть три способа заверше ния: первый ROLLBACK AFTER [ SECONDS ], когда че рез п секунд все незавершенные транзакции будут автоматически откачены, а соединения разорваны. Второй, более резкий — ROLLBACK IMMEDIATE: все транзакции откатываются сразу. И третий, принимаемый по умолчанию: способ завершения не ука зан, и ALTER DATABASE будет неопределенное время ждать за вершения всех транзакций. Выполнив команду, администратор может идти домой, a ALTER TABLE закончит работу по заверше нии последней транзакции. Еще один способ завершения отно сится не к транзакциям, а к самой ALTER DATABASE — это NO_WAIT. Если задан этот параметр, команда пытается выпол нить указанные модификации и при встрече незавершенных тран закций сообщает об ошибке: Server: Msg 5070, Level 16, State 2, Line 1 Database state can not be changed while there are other users
currently using database Server: Msg 5069, Level 16, State 1, Line 1 ALTER DATABASE command failed. Группа параметров работы с курсорами включает CURSOR_ CLOSE_ON_COMMIT {LO Параметры, описывающие автоматические процедуры сопровож дения БД включают AUTO_CLOSE STATISTICS DATE_STATISTICS Уровень совместимости с ANSI стандартом определяется набором параметров ANSI_NULL_DEFAULT ANSI_PADDING NUMERIC_ROUNDABORT IDENTIFIER Последняя группа параметров определяет то, как БД будет работать с журналом транзакций и, следовательно, В тек
www.books-shop.com
142
Microsoft SQL Server 2000,
технологии
сте команды можно указать три возможных значения: RECOVERY Хотя слежение за операциями вводавывода с работой журнала транзакций непосредственно не связано, параметр TORN_PAGE_DETECTION также включен в эту группу. Режимы работы с — еще одно нововведение SQL Server 2000, и подробнее мы говорили о них в разделе, посвященном резер вному копированию, главы 2. Второй способ создания БД — средствами графического интер фейса (рис.
Puc. 31. При создании новой базы данных Вы указываете имена и местоположение файлов.
В этом диалоговом окне Вы задаете те же что и применяя языковые средства. В отличие от версии 7.0 указать дополнительные параметры использования базы теперь можно только после ее создания. В диалоговое окно свойств существующей БД включено несколь ко новых закладок (рис. 32). Окно свойств позволяет указать многие, но не все параметры команды ALTER DATABASE, поэтому полный контроль за работой БД доступен либо средствами Transact SQ L, либо через объекты SQL DMO.
www.books-shop.com
ГЛАВА 3: Управление базами данных
143
Рис. 32. В окне свойств созданной БД можно установить дополнительные параметры ее работы. И, наконец, третий путь — вызвать мастер создания БД. Все мас тера вызываются из через меню Приветствие мастера выглядит так (рис. 33):
Мастер помогает создать новую БД.
www.books-shop.com
SQL Server 2000, Новейшие технологии Как видите, мастер требует тех же параметров, только задает воп росы по одному за раз. Создавая БД, сразу подумайте, где разместить ее файлы. В первую очередь надо принять во внимание характеристику дисковой подсис темы. Если у Вас несколько физических дисков, разместите файлы данных отдельно от журнала. Если нужно дополнительно развести операции вводавывода, создайте один или более файлов, на которые поместите наиболее активно используемые или самые большие таб лицы и индексы для них. Эти файлы лучше положить на отдельный диск. При работе с дисковыми массивами использовать несколько файлов имеет смысл, только если дисковых массивов, обслуживае мых самостоятельными контроллерами, тоже несколько. Если же у Вас только один дисковый массив, примените RAID 1 или — наи более оптимальные с точки зрения производительности и надежнос ти хранения. Массивы RAID 5 дешевле (требуют меньше физических устройств), но запись на них идет медленнее. Производительность системы во многом зависит от того, насколько равномерно распреде лена нагрузка на дисковую подсистему и насколько оптимально по добран тип организации дисковой подсистемы. В любом случае несколько дисковых накопителей и/или диско вых массивов способны заметно повысить производительность сис темы. Принимая решение о размещении файлов БД на дисках, всегда руководствуйтесь принципом «чем больше дисковых накопителей/ контроллеров поддерживает операции вводавывода, тем лучше». Это связано с тем, что SQL Server способен выполнять операции ввода вывода параллельно. Одно из важных исключений из этого правила — работа журнала транзакций. В версии 8.0 журнал транзакций — это обычный файл ОС (в отличие от версии 6.x, где журнал транзакций был организован как таблица БД). Запись в журнал выполняется последовательно и синхронно, и можно сказать, что журнал работает в основном на за пись. Последовательная запись в журнал не позволяет оптимизиро вать его работу за счет распараллеливания операций записи (хотя при чтении журнала, например при репликации, группа дисковых нако пителей даст заметные преимущества в скорости вывода). В итоге основной заботой администратора является предохранение журнала в случае катастрофического сбоя системы. Учитывая подобную осо бенность журнала транзакций можно рекомендовать размещение журнала на дисковом массиве типа RAID Этот тип обеспечивает защиту от сбоев за счет и высокую производительность, так как используется чередование. Для тестового режима подойдет
www.books-shop.com
ГЛАВА 3; Управление базами RAID 0 — чередование, но этот режим не спасает от сбоев. Более де шевый тип организации дискового массива — RAID 1 (только зерка лизация) — также вполне достаточен для работы журнала опятьтаки в силу того, что запись выполняется последовательно. Файлы данных, запись и чтение из которых производится асинх ронно при том, что операции могут (и должны) выполняться парал лельно, размещайте, используя как можно больше физических носи телей. Самое быстрое, но и самое дорогое — уже упоминавшееся ре шение на основе совмещения конструкций RAID 0 и RAID 1, или RAID 10. Очень часто употребляется более приемлемое по цене ре шение на основе конструкции RAID 5. Уровни совместимости и поведение БД Понятие уровня совместимости появилось в версии 7.0 для поддерж ки кода, написанного для SQL Server 6.0/6.5. Соответственно версия 7.0 поддерживала уровни совместимости 60, 65 и 70. Версия 8.0, как следует ожидать, добавила уровень 80. Что же отличает две версии? Первое, с чем мне пришлось столкнуться, — установленный по умол чанию параметр SET ON. По привычке я стал использовать двойные кавычки, и посыпались сообщения об ошибках. Можно вернуть параметры на уровень 7.0, только имейте в виду, что часть новой функциональности SQL Server 2000, в частно сти, индексированные представления и индексы на вычисляемых полях, требует, чтобы этот параметр был равен ON. В части TSQL, ключевыми словами более не являются AVG, COMMITTED, CONFIRM, CONTROLROW, COUNT, ERROREXIT, FLOPPY, ISOLATION, LEVEL, MAX, MIRROREXIT, ONCE, ONLY, PERM, PERMANENT, PIPE, PREPARE, PRIVILEGES, RE PEATABLE, SERIALIZABLE, SUM, TAPE, TEMP, TEMPORARY, UNCOMMITTED, WORK. Их заменили COLLATE, FUNCTION, OPENXML. Это значит, что CREATE TABLE sum (fldl по зволительно, a CREATE TABLE Collate (fldl — нет. В целом отличия между версиями 7.0 и 8.0 не столь велики, как это было между 6.x и 7.0. И все же они есть, и по мере продвижения в глубь неизведанной территории я буду рассказывать о засадах на дороге и путях их обхода. Таблицы SQL Server Сотворив БД, можно приступить к таблицам. Для создания таблицы SQL Server предоставляет, как и раньше, два способа: TransactSQL и графический интерфейс, естественно, значительно переработанный. Ⱦɚɧɧɚɹɜɟɪɫɢɹɤɧɢɝɢɜɵɩɭɳɟɧɚɷɥɟɤɬɪɨɧɧɵɦɢɡɞɚɬɟɥɶɫɬɜɨɦ%RRNVVKRS ɊɚɫɩɪɨɫɬɪɚɧɟɧɢɟɩɪɨɞɚɠɚɩɟɪɟɡɚɩɢɫɶɞɚɧɧɨɣɤɧɢɝɢɢɥɢɟɟɱɚɫɬɟɣɁȺɉɊȿɓȿɇɕ Ɉɜɫɟɯɧɚɪɭɲɟɧɢɹɯɩɪɨɫɶɛɚɫɨɨɛɳɚɬɶɩɨɚɞɪɟɫɭ[email protected]
Microsoft SQL Server 2000. Новейшие технологии Итак, ТSQL. Основное определение таблицы включает несколь ко новых атрибутов, отражающих расширенную функциональность новой версии сервера. Посмотрим, что предлагает команда CREATE TABLE в новом варианте. Вопервых, для каждого поля новой таблицы можно указывать порядок разбора, вовторых, при наличии связей между таблицами, организованными внешними ключами, можно указать каскадное уда ление/модификацию данных, например: CREATE TABLE ( [ParentID] [char] (10) COLLATE SQL_Latin1_General_CP1251_CI_AS NOT NULL, [char] (10) COLLATE NULL, [Data2] [char] (10) COLLATE NULL, [char] (10) COLLATE NULL ) ON [PRIMARY] GO CREATE TABLE ( [char] (10) COLLATE NOT NULL, [Parentid] [char] (10) COLLATE NOT NULL, [Datal] [char] (10) COLLATE NULL, [Data2] [char] (10) COLLATE SQL_Latin1_General_CP1251_CI_AS NULL, [char] (10) COLLATE SQL_Latin1_General_CP1251_CI_AS NULL ) ON [PRIMARY] GO ALTER TABLE WITH NOCHECK ADD CONSTRAINT [PK_Parent] PRIMARY KEY CLUSTERED ( [ParentID] ) ON [PRIMARY] GO ALTER TABLE WITH NOCHECK ADD CONSTRAINT PRIMARY KEY CLUSTERED ( [Childld] ) ON [PRIMARY] GO ALTER TABLE ADD CONSTRAINT [FK_Child_Parent] FOREIGN KEY
www.books-shop.com
ГЛАВА 3:
базами данных
[Parentid] ) REFERENCES
47
(
) ON DELETE CASCADE ON UPDATE CASCADE
GO Включение каскадных модификаций/удалений в описание самой таблицы позволяет обойтись без триггеров. Но если логика каскадиро вания сложнее, чем простое удаление всех записей дочерней таблицы, вторичный ключ которой равен первичному ключу удаленной записи родительской таблицы, триггеры могут снова прийти на помощь. Назначив атрибут Identity при описании поля, можно создать поле с автоматическим приращением значений, начиная с величины, за данной в параметре seed, с шагом, указанным в параметре Increment. По умолчанию оба параметра равны При добавлении новой записи SQL Server смотрит на последнее значение, использованное для дан ной таблицы. Если один пользователь начинает транзакцию и встав ляет запись, второй делает то же самое, а первый тем временем «от катывает» транзакцию, то при попытке первого снова вставить за пись, поле с атрибутом Identity получит значение, как если бы все предыдущие транзакции были успешно завершены: Create table
(f1 int identity, f2 char
Пользователь А Begin Insert into ##test
Пользователь Б
values
Begin Insert into ##test
values
Commit Begin tran Insert into ##test Commit
values Select * from test f1 f2 3 Testl 2 (2 row(s) affected) Как видите, значение 1
www.books-shop.com
Microsoft SQL Server 2000, Новейшие технологии Чтобы лучше ориентироваться в значениях, добавленных в поле с атрибутом Identity, SQL Server 2000 предлагает одну глобальную пе ременную и две функции. Переменная @@Identity имелась еще в вер сии 6.5, она видна глобально в рамках конкретной сессии и не при вязана к какойлибо таблице, значение берется по результатам пос леднего выполненного выражения, цифру в поле с ат рибутом Identity. Функция SCOPE_IDENTITY возвращает последнее значение, введенное в поле с атрибутом Identity в рамках конкретно го набора команд (Scope). Так, при выполнении команд: INSERT VALUES GO INSERT identity_test1 VALUES SELECT
GO
SCOPE_IDENTITY покажет значение, введенное в таблицу iden Третья функция — IDENT_CURRENT — не ограничена ни обла стью видимости, ни сессией: она привязана к конкретной таблице и единственная из трех имеет обязательный параметр — имя таблицы: При указании ограничений, таких как Primary Key и Unique, авто матически создаются соответствующие индексы. Ограничение Pri mary Key по умолчанию создается как уникальный кластерный ин декс; указание ограничения Unique приводит к созданию уникально го некластерного индекса. Синтаксис команды создания новой таблицы включает большое количество параметров, наиболее интересны из них следующие. • column_name AS computed_column_expression Запись в таблице может включать виртуальное, полученное расчетным путем поле (определяется аргументом AS pression). Вычисляемые поля не хранятся в таблице, но динами чески вычисляются на основании других полей в той же записи. В состав выражения можно включать имя другого поля (кроме вы числяемого), константы, функции, переменные и любые их ком бинации, связанные одним или более операторов. В качестве вы ражения нельзя использовать вложенные выражения SELECT. Вычисляемые поля можно применять при построении запросов, включать в предложения WHERE, ORDER BY и других случаях,
www.books-shop.com
ГЛАВА 3:
Управление базами данных
49
стандартных выражений. Вычисляемые поля нельзя использовать для построения вторичных индексов и ограничений DEFAULT. В отличие от версии 7.0 вычисляемые поля могут индек сироваться. Ограничения на индексацию таких полей мы рассмот рим в разделе, посвященном индексам. Вычисляемое поле не может входить в список полей команд INSERT или UPDATE. • [ON Этим аргументом таблицу можно принудительно поместить в определенную группу файлов. Точно так же в группу файлов может быть помещен индекс, создаваемый командой CREATE INDEX или предложением PRIMARY или UNIQUE в команды CREATE TABLE. Если имя группы файлов не указано, индекс создается в той же группе, к которой принадлежит табли ца. Среди имеющихся групп файлов одна всегда используется для размещения новых объектов по умолчанию. Если имя группы пря мо не указано или если использовано указание DEFAULT, новая таблица будет размещена именно в этой группе файлов. • TEXTIMAGE_ON filegroup Если таблица включает поля типа Text или Image, этот атрибут позволяет поместить данные для этих полей в соответствующую группу файлов. Точно так же, как и с «обычными» данными, можно указать DEFAULT, и будет задей ствована соответствующая группа файлов. • ROWGUIDCOL Указывает, что соответствующее поле будет гло бально уникальным идентификатором записи. Таковым может служить только одно поле в таблице, оно должно иметь тип unique identifier (описание этого типа данных см. ниже) и может полу чить подобный атрибут. • NOT FOR REPLICATION Это предложение определяет, как поле с типом IDENTITY будет обработано в процессе репликации дан ных. Используйте его для того, чтобы на подписчике полю не было присвоено новое значение. Как уже говорилось, возможность размещения данных в группах файлов позволяет администратору оптимизировать операции ввода вывода, тем самым повышая производительность системы. Новые типы данных У SQL Server 2000 появилось не так много новых типов данных, как это было в версии 7.0, но какие! Один SQL_Variant чего стоит. Если Вам приходилось программировать на VBScript, Вы знаете, что он поддерживает только один тип данных — Variant. При присвоении
www.books-shop.com
Microsoft SQL
2000, Новейшие технологии
переменной типа Variant конкретного значения VBScript пытается определить так называемый «подтип», конкретно описывающий тип данных, хранящихся в переменной. Хотя такая вольность часто обо рачивается большими проблемами при программировании, посколь ку приходится писать дополнительный код для приведения данных к нужному типу или проверки, у программиста есть возможность в одну переменную поместить как численные данные, так и строку или дату. У SQL Server 2000 появился аналогичный тип — SQL_ variant. Поле такого типа способно хранить любую информацию. При данных в поле SQL Server вместе с собственно данными сохраняет еще набор метаданных, в числе которых сведения о базовом типе. Создадим таблицу и посмотрим, как это все работает. CREATE TABLE (intData charData sql_variant, sql_variant, DateData sql_variant, binaryData sql_variant, floatData sql_variant, varcharData sql_variant) Как видите, мы можем иметь сколько угодно полей нового типа в таблице и не указываем для них длину. В то же время сервер, нор мально создав таблицу, выводит предупреждение: ) The total row size (56147) for table exceeds the ) maximum number of bytes per row (8060). ) Rows that exceed the maximum number of bytes will not be added. Это напоминает ситуацию, когда мы объявляем в записи десяток полей типа varchar и суммарная заявленная длина превышает допус тимый размер записи. Получается, что поля типа — пе ременной длины, и проверка общей длины лежит на нашей совести. Идем дальше. DECLARE int, float, Set @intVar = 10 Set = Set = Set =
nChar (10), §dateVar Binary (5), Varchar(10)
www.books-shop.com
ГЛАВА 3:
базами данных
Set = 0x12345 Set = 123.456 Set = INSERT INTO ([intData], [charData], [nCharData], [DateData], [binaryData], [floatData], [varcharData])
INSERT INTO [charData], [nCharData], [DateData], [binaryData], [floatData], Действительно, поле может хранить данные разного типа. Туда нельзя помещать только информацию с типами text, ntext, image, Тип конечно, годится не только для описа ния полей таблицы, но и при объявлении переменных. Осталось понять, как манипулировать данными. Нам нужно их сравнивать, соединять, выполнять математические операции. Самый простой способ — принудительная конвертация функцией CAST. По моему, это самое надежное решение, не оставляющее пищи для пред положений. Ели же Вы решите применить этот тип «как есть», при дется запомнить множество правил. Возьмем такой пример. CREATE TABLE (intFld int, charFld INSERT testl VALUES (12345, DECLARE sql_variant SET = (select intFld from testl) SET = (select charFld from testl) SELECT SQL_VARIANT_PROPERTY ) возвращает Int SELECT SQL_VARIANT_PROPERTY ) возвращает Char IF > BEGIN PRINT больше END ELSE BEGIN PRINT больше END Что получаем? Оказывается, число больше строки. Почему? Да что все типы данных поделены на группы. И тип, располо
www.books-shop.com
Microsoft SQL Server 2000.
152
технологии
в более старшей группе, оказывается больше. Что же это за группы? А вот таблица: Тип данных
Группа типов
Примечания
datetime
datetime datetime approximate number approximate number exact number exact number exact number exact number exact number exact number exact number exact number Unicode Unicode Unicode Unicode binary binary uniqueidentifier
датавремя датавремя приблизительное значение приблизительное значение точное значение точное значение точное значение точное значение точное значение точное значение точное значение точное значение строка Unicode строка Unicode строка Unicode строка Unicode бинарная строка бинарная строка уникальный идентификатор
float real
decimal money
int
bit nvarchar nchar char binary
Из таблицы видно, что тип Int расположен выше типа Char, соот ветственно сравнение дает результат, показанный выше. Если типы принадлежат к одной группе, в игру включается критерий их положе ния внутри нее. Так, Int оказывается больше Smallint. Довольно мут ная ситуация, правда? Гораздо надежнее выполнить приведение типов: IF PRINT
AS int) = по)моему, они
AS int)
Как и следовало ожидать, значения переменных оказываются рав ными. Единственное, что мне приходит в голову, — использовать пря мое сравнение для определения подтипа данных. Заметьте, кстати, что все эти туманные правила действуют при любом сравнении, будь
www.books-shop.com
ГЛАВА 3:
Управление базами данных
то логические операторы, как показано в примере выше, группиро вание или сортировка посредством ORDER BY или GROUP BY, сюда же попадают индексы. Запутаться просто, и, честно говоря, я вообще не рекомендовал бы хранить в полях и переменных типа ничего, что может потребовать сравнения, вычислений или конкате нации. Строгие типы куда надежнее. Еще интереснее дело обстоит со строковыми данными. Тут учи тывается порядок разбора, «подложенный» под реальные данные. Как уже говорилось отдельные поля таблицы могут иметь разные порядки сортировки, и при помещении информации из этих полей в перемен ные типа SQL_variant вместе с ними перемещаются и метаданные. И тут такое начинается! Чтобы определить, «кто главнее», SQL Server 2000 сравнивает четыре целочисленных параметра в таком порядке: идентификатор языка (Locale ID — LCID), версия языка ver sion), флаги сравнения и идентификатор сортировки (sort ID). Bigint Несколько лет назад, когда инфляция у нас была не хуже, чем в Герма нии в 30е годы, нам высказали претензии: мол, SQL Server (тогда это была версия 4.2) не хранит достаточно большие числа, и поэтому за казчик выбирает Oracle. Позднее появилась поддерживающая до 38 разрядов, а теперь и SQL Server 2000 с типом Bigint, способным хранить числа в диапазоне от (9223372036854775808) до (9223372036854775807), под каждое число отводится 8 байт хранения. Table Тип данных Table представляет собой таблицу. Если угодно, можно назвать этот тип данных массивом, но это будет не совсем верно, так как, подобно любой таблице, переменная Table поддерживает коман ды SELRECT, INSERT, UPDATE, DELETE. Вот как объявляется та кая переменная, и что можно с ней делать: DECLARE INSERT SELECT FROM UPDATE DELETE FROM
char(15), Fld2 Values SET
=
В любом месте, где можно использовать таблицу, можно вызвать и переменную Table. Если честно, то сервер и воспринимает ее как таблицу. А как иначе, ведь это таблица и есть! Посмотрим, что дает нам SQL Server Profiler:
www.books-shop.com
Microsoft SQL Server 2000. Новейшие технологии declare Событие
ID 1742629251
Fld2 Имя 2
Вставив в тот же пакет команд SELECT * FROM tempdb..sysobjects ORDER BY id, Вы увидите в результатах выборки строку: name
id
#67DE6983
1742629251
она, наша переменная, — таблица. Что это значит? Вопер вых, при значительных объемах информации, помещенных в пере менную, скорость работы с ней не будет быстрее чем с временной таблицей. Вовторых, в нее можно положить сколько угодно инфор мации, не боясь переполнить память: ничего особенного сервер ско рее всего не делает — обычная таблица, имя которой создается про граммно и которая живет в пределах своей области видимости. Что использовать: переменные Table или временные таблицы? Докумен тация рекомендует первые, утверждая, что процедуры будут пе рекомпилироваться, как это имеет место при использовании вторых. Проверка средствами Profiler показала, что создание временной таб лицы ведет к перекомпиляции процедуры, а переменной типа Table — нет. Что значит «реже», я не знаю, оставляю тщательное тестиро вание Вам, пытливый читатель. Еще одно преимущество переменной — четко определенная область видимости. Срок жизни временной таблицы определяется жизнью соединения, в рамках которого она создана, — вещь довольно неконкретная. Переменная же живет в рам ках своего пакета команд: процедуры, функции и т. п. Модификация структуры таблицы Допустим, Вы не продумали схему БД, и через месяц выяснилось, что таблице А не нужны некоторые поля, а у таблицы В некоторые поля определены неправильно. Версия 8.0 позволяет изменить существу ющие таблицы. Вы можете все, ну, почти все — не только добавлять новые поля. Вот некоторые аргументы команды ALTER TABLE. • TABLE Имя модифицируемой таблицы. • WITH CHECK|WITH NOCHECK При добавлении новых огра ничений FOREIGN KEY или CHECK или активизации ранее от ключенных ограничений данные в таблице могут не проверяться на соответствие этим ограничениям. Если этот аргумент не ука
www.books-shop.com
ГЛАВА 3:
Управление базами
данных
зан, для новых ограничений подразумевается выполнение провер ки (WITH CHECK), для активизированных ограничений — отсут ствие проверки (WITH NOCHECK). • COLUMN Указывает, что данное поле будет модифици ровано (аргумент неприменим, если уровень совместимости задан меньше 7.0). Модификации не поддаются поля типа text, image, ntext или timestamp, а также типа ROWGUIDCOL. Модифицируе мое поле не должно быть вычисляемым или входить в состав вы числяемого поля. Не поддается модификации поле из статьи реп ликации. Поле, используемое для организации индексного клю ча, можно модифицировать, только если оно имеет тип varchar, nvarchar или причем Вы не меняете тип данных, а новая длина не больше существующей. Поле, использованное для орга низации статистики командой CREATE STATISTICS, также не модифицируемо. Сначала надо удалить статистику. Создаваемая автоматически статистика автоматически же удаляется параметром ALTER COLUMN. Нельзя модифицировать поля из состава пер вичного или вторичного ключей, ограничений CHECK или UNIQUE. Для последних исключением является случай, когда Вы только меняете длину поля с типом данных переменной длины. Поле, связанное со значением умолчания, можно модифицировать только с точки зрения длины, точности или числа хранимых деся тичных знаков, тип данных менять непозволительно. • CHECK|NOCHECK Позволяет активизировать или отключить ограничения. При отключенном ограничении последующие до бавления или модификации данных таблицы не проверяются на соответствие отключенному правилу. Этот аргумент используется только с ограничениями FOREIGN KEY и CHECK. Для отключе ния/активизации всех ограничений служит аргумент ALL. Кста ти, проверка не отключается, когда таблица модифицируется до бавлением ограничений PRIMARY KEY или UNIQUE. • TRIGGER Наряду с отключением ограни чений модификация таблицы позволяет активизировать или от ключить триггеры. Отключенный триггер продолжает существо вать как объект, но «бездельничает». Аргумент ALL позволяет ак тивизировать или отключить все триггеры таблицы. Добавление нового поля Добавить поле типа в качестве значения по умолча нию позволяет функция Добавляемое поле должно допус кать хранение значений NULL либо иметь значение по умолчанию.
Microsoft SQL Server 2000, Новейшие технологии В последнем случае специальный аргумент WITH VALUES позволит добавить значение по умолчанию для каждой существующей записи таблицы. Если новое поле не может иметь значения NULL, оно должно иметь значение по умолчанию, и при сохранении новой структуры новое поле во всех записях будет иметь это значение. При добавлении поля с атрибутом IDENTITY все записи новой таблицы будут иметь соответствующие значения. При расчете значе ния поля, если не указано иного, заполнение поля IDENTITY начи нается с 1, приращение также равно При модификации таблицы можно создать новые ограничения (PRIMARY KEY, UNIQUE, FOREIGN KEY, CHECK или DEFAULT) или индексы (CLUSTERED, NONCLUSTERED) для ограничений PRIMARY KEY или UNIQUE. По умолчанию PRIMARY KEY созда ет кластерный индекс, UNIQUE — некластерный. Так как кластер ный индекс может быть только один для конкретной таблицы, по пытка создания второго такого индекса невозможна, и при создании ограничения PRIMARY KEY создается некластерный индекс. Аргумент ON позволяет указать группу файлов, в которой будет создан новый индекс. Если создается кластерный индекс, вся таблица будет перемещена в указанную группу файлов. Это связано с особенностью организации кластерного индекса, у которого страницы нижнего уровня являются отсортированными страницами данных, а не указателями, как это имеет место для некластерного индекса. Добавляемое поле появляется во всех записях, существующих на момент модификации. Аргумент DEFAULT позволяет назначить но вому полю значение по умолчанию. Чтобы это поле в существующих записях сразу было заполнено некоторыми значениями, а не величи нами NULL, примените аргумент WITH VALUES. CREATE TABLE INSERT INTO INSERT INTO ALTER TABLE ALTER TABLE INSERT INTO SELECT * FROM
(3 row(s) affected) Как видите, значение по умолчанию использовано при добавле нии в таблицу модифицированной структуры новой записи, а благо даря аргументу WITH VALUES я сразу поместил строку «101» в поле тогда как поле во всех записях, созданных до мо дификации, получило значение NULL. Если добавляемое поле не может хранить значения NULL, аргумент DEFAULT обязателен, и все поля в существующих записях автоматически заполняются значе нием по умолчанию. Значение по умолчанию нельзя задать полям с типом Timestamp, имеющим атрибут Identity или уже имеющим значение по умолчанию. В последнем случае правило, определяющее значение умолчания, надо уничтожить — создать новое можно только потом. Модифицировать структуру таблицы можно средствами админис тративной консоли или командами TSQL. Если используется графи ческий интерфейс ММС, то в зависимости от выполняемой модифи кации серверу может потребоваться временная таблица. Если, ска жем, мы создали таблицу и просто добавили еще одно поле, то в про филе трассировки, помимо всяческих вспомогательных действий, бу дет видна команда: ALTER TABLE
ADD fld4 char(10) NULL
Если же мы удаляем поле из середины, то в профиле трассировки отображается гораздо более сложный набор команд (я снова опускаю выполняемые сервером многочисленные проверки: наличия связей между модифицируемой таблицей и иными таблицами в базе данных, наличия у таблицы триггеров и т. д.): ) Вначале создается временная таблица новой структуры CREATE TABLE ( char(10) int float(53) char(10) NULL
char(10)
www.books-shop.com
Microsoft SQL Server 2000, Новейшие технологии ) ON [PRIMARY] Затем в нее переносится вся информация из существующей таблицы IF EXISTS(SELECT FROM INTO fld2, fld5, fld6, fld4) SELECT fld2, fld5, fld6, fld4 FROM dbo.test Обратите внимание на то, что исходная таблица блокируется в монопольном режиме Существующая таблица удаляется DROP TABLE А временная переименовывается EXECUTE Все эти действия выполняются в рамках транзакции. Если Ваша таблица уже здорово заполнена данными, позаботьтесь о месте для создания временной таблицы. Если данных действительно много, возможно, разумнее использовать или DTS. То же происходит и при добавлении нового поля не в конец, а куданибудь в середину структуры. Если же модификация осуществляется средствами скажем из Query Analyzer, трассировка разных вариантов модификации не по казала использования временных таблиц, но и возможности языковых средств немного меньше. Так, Вы не можете вставить новое поле в су ществующую структуру. Графический интерфейс, как показывает трас сировка, тоже использует «дым и зеркала», чтобы добиться нужного результата, но по крайней мере Вам не надо писать весь код руками. Изменения могут касаться не только структуры таблицы, но и ра боты триггеров (их теперь можно а также ограничений, которые можно удалить или добавить. Графический интерфейс построения таблиц и представлений Практически все, что можно сделать средствами TSQL, доступно и в новом (снова новом!) графическом интерфейсе модификации таблиц (рис. 34). В основном окне административной консоли щелкните объект Databases и затем — символ +. В раскрывшемся списке БД щелкните символ + около БД Pubs. Щелкните объект Tables. Появит ся список таблиц в БД (он довольно велик, так как включает систем ные таблицы). Выберите какуюнибудь пользовательскую таблицу (имена системных начинаются с и щелкните ее правой кноп кой. В появившемся меню выберите команду Design и появит ся окно с текущей структурой таблицы.
www.books-shop.com
ГЛАВА 3:
Управление базами данных
159
Рис. 34. Модифицированный интерфейс выглядит более компактным и удобнее в работе. Здесь можно добавлять поля (их теперь может быть до 1 024), ме нять тип данных существующих полей и выполнять иные модифика ции. Для назначения новых и изменения существующих ограниче ний и создания индексов щелкните кнопку Properties (вторая Появится диалоговое окно с четырьмя вкладками. На вкладке Tables можно поменять владельца таблицы, группу файлов, в которой нахо дится сама таблица и данные из полей Text или Image, назвать табли цу другим именем (рис. 35).
www.books-shop.com
160
Microsoft SQL Server 2000. Новейшие технологии
35. На вкладке Tables Вы указываете имя ее владельца, группу файлов, куда входит и т. д. Хотя версия 8.0 и позволяет создавать очень широкие таблицы, это не значит, что при работе с ней можно игнорировать правила норма лизации и обычный здравый смысл. Чем уже запись, тем больше их поместится на странице, тем больше записей сервер сможет держать в памяти, тем быстрее он будет отрабатывать запросы. На вкладке Relationship указываются имена вторичных ключей и таблицы, связываемые вторичными ключами (рис. 36).
www.books-shop.com
3:
Рис. 36.
Управление базами данных
161
На этой вкладке описываются связи между таблицами.
На этой же вкладке указываются каскадные модификации для операций удаления и модификаций связанных таблиц. На вкладке Indexes/Keys (рис. 37) описываются первичные и обычные индексы, которые строятся для таблицы. Здесь же указыва ется комбинация полей, составляющих индекс, процент заполнения страниц, тип индекса (уникальный или кластерный), его имя и т. д.
www.books-shop.com
162
3 7.
Microsoft SQL Server 2000, Новейшие технологии
Здесь Вы описываете индексы таблицы.
Последняя вкладка — Check Constraints. Теперь работа с ограниче ниями вынесена на самостоятельную страницу. Здесь Вы огра ничения, присваиваете им имена и описываете логику проверки Для заданных ограничений указывается, активны ли они (если пометить флажок Check existing data on creation, существующие данные будут предварительно проверены на соответствие описанным ограничениям) и будут ли задействованы при выполнении команд Insert и Update (по метив флажок Enforce constraints for INSERTS and UPDATES, Вы ука жете выполнение проверки новых данных на соответствие описанно му ограничению) и при репликации (флажок Enforce constraint for replication). Представить себе связи БД со сложной схемой элементов доволь но трудно. Для облегчения визуализации схемы БД SQL Server 2000 снабжен инструментом, позволяющим создавать диаграммы (Database diagram), позволяющие получить визуальное представление связей между
www.books-shop.com
ГЛАВА 3:
Рис. 38.
Управление базами данных
Работа с ограничениями вынесена на отдельную вкладку.
Вы можете создать диаграмму вручную или вызвать мастер, а по том доработать. Мастер появляется при попытке создать новую диаг рамму и просит указать перечень нужных таблиц. Вы можете потре бовать, чтобы для всех выбранных таблиц были добавлены связанные с По умолчанию глубина связей равна 1, т. е. для каждой таб лицы будет добавлена только имеющая с ней прямые связи. Глубину можно увеличить. Мастер также предложит расположить таблицы на рабочей поверхности. Делает он это аккуратно, но неэкономно. Если у Вас много таблиц, возможно, Вы справитесь с этой задачей лучше. От ключив мастер, Вы останетесь один на один с пустой рабочей поверх ностью, куда добавите все интересующие Вас таблицы. Аналогичным инструментом снабжен Visual Studio. Основа инст румента — рабочая поверхность, на которой размещаются таблицы и связывающие их отношения. Поместить таблицу на рабочую поверх ность можно тремя способами: перетащить уже созданную или, щел кнув правой кнопкой мыши в пределах окна, выбрать в появившемся меню команду New table и создать новую таблицу, которая будет тут же включена в схему. Третий путь удобен, когда уже помещенная в
www.books-shop.com
Microsoft SQL
2000, Новейшие технологии
схему таблица связана с другими. Щелкнув правой кнопкой выбран ную таблицу, выберите в контекстном меню команду Add related tables — к выбранной таблице будут добавлены все, связанные с ней. По вторив нужное число раз эту операцию, Вы получите полную схему Вашей Схему БД можно распечатать, здесь же будет показано разбиение на страницы. Команда Arrange tables располагает таблицы не очень экономно. Для каждой таблицы в схеме можно указать степень дета лизации отображения. Можно применить нестандартный (Custom) список отображения, когда для каждой таблицы выводится практи чески полная информация о структуре. Здесь же можно удалять и добавлять поля. Дополнительные сведения (перечень индексов, ог раничений и отношений) покажет диалоговое окно Properties, вызы ваемое из контекстного меню. Увы, это окно не снабжено кнопкой Save или хотя бы ОК: изменения сохраняются, когда Вы выбираете команду Save selection в контекстном меню. Можно работать с не сколькими таблицами сразу: редактируемая и несохраненная таблица отмечается звездочкой, добавление полей производится нажатием клавиши поле удаляется клавишей Del. Если Вы мо дифицировали таблицу, то, щелкнув рабочую поверхность конструк тора диаграмм и выбрав в контекстном меню команду Save change script, Вы вызовете соответствующее диалоговое окно. Пометив в нем флажок Automatically generate script on every change (Автоматически создавать сценарий при каждом изменении), Вы восстановите воз можность сохранения изменений в виде команд TSQL. Команда Zoom to selection помещает выбранную таблицу в центре рабочей области. Одно меня удивляет: почему до сих пор разработчи ки не озаботились проведением линий связи между таблицами от поля «один» к полю «ко многим». Ведь решили же они эту неимоверно сложную задачу в конструкторе представлений! Созданные таблицы можно просмотреть и отредактировать прямо из ММС. Для этого, щелкнув правой кнопкой имя таблицы, выбери те в контекстном меню команду Open table. Вы можете чтобы в окно вывода результатов были помещены все в таблице данные или только первые N записей. В последнем случае выберите команду Return top... — это позволит указать, что нужны только пер вые 100, 200 или более записей. В окне вывода результатов добавле ние и модификация записей осуществляется простым вводом текста. К сожалению, указать критерии отбора сразу нельзя, так что для таб лицы с несколькими миллионами записей подобный способ работы может оказаться довольно медленным, особенно если Вам нужны за писи откудато из середины. Открыв таблицу, Вы можете построить
www.books-shop.com
ГЛАВА 3:
Управление базами данных
165
более сложный, чем SELECT *, запрос с указанием всех дополнитель ных ограничений. Лучше открывать не саму таблицу или группу таб лиц, а создать для них представления. Вам предложат работать тем же инструментом, но Вы начнете работу сразу, не тратя свое драгоцен ное время на ожидание, когда же таблица будет открыта. Инструмент построения представлений позволяет создавать весь ма сложные запросы (рис. 39).
39.
Графический инструмент построения запросов.
Расположенные в верхнем левом углу окна кнопки позволяют от крыть панель с графическим представлением запроса (Diagram перечнем выводимых в нем полей, условий выборки, группирования (Grid pane), панелью отображения собственно SQLвыражения (SQL pane) и панелью, отображающей результаты исполнения запроса (Re sults рале). Щелчок кнопки с восклицательным знаком (!) приводит к исполнению запроса. Если Вы не уверены в правильности синтакси са, в контекстном меню, вызываемом щелчком правой кнопкой па нели с текстом SQLпредложения, выберите команду Verify SQL syntax, и команда будет проверена. При построении более сложного запроса можно перенести из списка таблиц нужную, и для нее сразу будет показана связь с имеющимися таблицами. Если щелкнуть пра вой кнопкой ромбик посредине линии связи, в контекстном меню будет доступна команда Select all rows from левой правой формирующая левое, правое или полное соедине Ⱦɚɧɧɚɹɜɟɪɫɢɹɤɧɢɝɢɜɵɩɭɳɟɧɚɷɥɟɤɬɪɨɧɧɵɦɢɡɞɚɬɟɥɶɫɬɜɨɦ%RRNVVKRS ɊɚɫɩɪɨɫɬɪɚɧɟɧɢɟɩɪɨɞɚɠɚɩɟɪɟɡɚɩɢɫɶɞɚɧɧɨɣɤɧɢɝɢɢɥɢɟɟɱɚɫɬɟɣɁȺɉɊȿɓȿɇɕ Ɉɜɫɟɯɧɚɪɭɲɟɧɢɹɯɩɪɨɫɶɛɚɫɨɨɛɳɚɬɶɩɨɚɞɪɟɫɭ[email protected]
Microsoft SQL Server 2000, Новейшие ние (Left/Right/Full Join). Если ни одна из команд не выбрана, фор мируется внутреннее соединение. Команда Properties выводит диало говое окно с более конкретными параметрами условий объединения. В этом окне можно указать не только равенство ключей родительс кой и дочерней таблицы, но и отношения «больше», «меньше», «мень ше или равно» и т. п. Подведя указатель к имени поля таблицы в верхней панели, Вы получите пояснение относительно типа и размерности данных этого поля. Поля, включаемые в результат, можно выбрать поразному: отме тить в верхней панели основного окна, перетащить в панель Grid pane или перечислить в панели, где формируется SQLпредложение. Как Вы помните, указать критерии отбора при открытии таблицы нельзя. Чтобы не ждать понапрасну, вообще не открывайте таблицу — используйте представления. Представления: простые и распределенные Версия SQL Server 2000, естественно, поддерживает представления. Только теперь они обрели дополнительную функциональность, позво ляющую задействовать их не только как средство изоляции пользова теля от фактических таблиц или механизм стандартизации интерфейса БД с внешними приложениями, но и как механизм, обеспечивающий вкупе с технологией связанных (Linked) серверов практически неогра ниченное масштабирование БД. Обычные (почти обычные) представления Вы увидите новые свойства представлений, появившиеся у SQL Server 2000, щелкнув кнопку Properties инструментальной панели конструк тора представлений. Представление может быть привязано к схеме БД — флажок Bind to Schema (рис. 39). Привязанное к схеме представ ление накладывает дополнительные требования к таблицам или дру гим представлениями, входящим в определение SELECT. Их нельзя удалить или модифицироваить, если модификация затрагивает опре деление SELECT, например: CREATE TABLE int, Fld2 Fld3 datetime) CREATE VIEW With AS SELECT Fld1, Fld2 FROM ALTER TABLE Testl DROP COLUMN Fld1 Выдает ошибку "The object is dependent on column ALTER TABLE Testl DROP COLUMN Fld3 Эта команда исполняется без проблем
www.books-shop.com
ГЛАВА 3;
базами данных
И еще. Если представление создается с привязкой к схеме, объек ты, на которые ссылается определение SELECT, должны именовать ся с указанием владельца: объектах Для расширения возможностей сервера при решении задач обра ботки больших массивов данных, включающих вычисления, SQL Server поддерживает создание индексов на представления. Это создает так называемые материализованные представления (Mate rialized view). Обычное представление — всего лишь определение SELECT, хранящееся в системном каталоге, привязанное к имени, и дерево исполнения запроса. Физические данные каждый раз при зап росе извлекаются заново. Если же мы создаем индекс на представле ние, сервер создает физическое представление данных на диске и ис пользует его, как любой другой индекс. Но помните: индексировать представление можно, только если Вы выполните целый ряд требо ваний. Но об этом подробнее в разделе, посвященном индексам. Распределенные представления Как мы уже говорили, при установке SQL Server 2000 Вы можете по ставить более одного экземпляра сервиса. Все эти серверы способны работать одновременно, и такой набор позволяет выполнять экспе рименты или настраивать систему администрирования на единствен ном компьютере. Сейчас я собираюсь с помощью двух имеющихся на моем компьютере серверов продемонстрировать одну из интересней ших особенностей новой версии — распределенные представления. Допустим, у нас образовалась одна или более таблиц очень большо го размера. В SQL Server «очень большой» означает действительно ОЧЕНЬ — сотни миллионов записей. Сервер, на котором обрабаты вается эта таблица, начинает сдавать. Как быть? Начиная с версии 2000 у администратора есть выход из ситуации, если соблюден ряд условий: у Вас есть еще один сервер (лучше дватри), первичный ключ таблицы поддается логическому разбиению на группы, и Вы готовы пойти на увеличение административной нагрузки. Что я имею в виду? Разбить таблицу на несколько и объединить их представлением, которое будет отвечать на запросы пользователей. Делается это так. После тщательного анализа распределения значе ний первичного ключа администратор решает, на какие части будет разбита таблица. Идеальный вариант — таблица типа отчета о прода жах, в которой данные легко группируются по датам. В такой таблице части определяются наиболее естественно: по если у Вас серверов, по кварталам, если машин 4, или по полугодиям, если все, что Вы можете себе позволить, — это отобрать компьютер у секретар ши начальника и поставить на него экземпляр SQL Server 2000. Как
www.books-shop.com
1 gg
Microsoft SQL Server 2000. Новейшие технологии
бы то ни было, Вы поставили необходимое оборудование и начинае те дробить таблицу. Колоссальных размеров таблица Customers из БД к примеру, неплохо бьется пополам с учетом того, что у меня вообще один компьютер, зато два экземпляра сервера. Итак, из одной таблицы Customers я создаю две: и Custo mers_MZ. В данном случае не так важно, что таблица может быть раз бита на неравные части, но когда речь идет о сотнях миллионов запи сей, стоит хорошенько подумать и прикинуть не только текущий со став данных, но и потенциальный рост: после того как Вы создадите распределенное представление, ошибки могут привести к перегрузке одного сервера в ущерб остальным. Итак, создадим новую БД на вто ром сервере, ее параметр Collation должен в точности совпадать с па раметром на другом сервере. Различия могут привести к тому, что сервер, с которого передавался запрос, получит полный комплект данных для локального выполнения фильтрации по условию. В но вую базу мы переносим записи таблицы Customers, критерию SELECT FROM customers WHERE > т. е. начинающиеся на Назовем две БД и Чтобы один сервер «видел» другой, используем техноло гию связанных (linked) серверов. Создадим на сервере 2 связанный сервер указывающий на сервер Поскольку пользовате лям безразлично, на сколько частей разбита таблица, к которой они направляют запросы, мы создадим представление и назовем его, как и исходную таблицу — Customers. Представление формулируется так: CREATE VIEW SELECT * FROM UNION ALL SELECT * FROM
AS
Как видите, объединение двух подзапросов создает на выходе пол ный образ исходной таблицы. Как же оптимизатор поймет, что зап рос типа SELECT * FROM customers WHERE customerid следует направлять на удаленный сервер? Это обеспечивает ограни чение Check. В нашем случае для таблицы локального сервера оно формулируется так: ALTER TABLE CHECK
>=
WITH NOCHECK ADD and <=
Внутренняя организация представления учитывает это ограниче ние, и оптимизатор понимает, что куда идет. При создании ограни чения следует учитывать некоторые ограничения (милая тавтология,
www.books-shop.com
ГЛАВА 3:
Управление базами данных
'
gg
да?) на его формулировку. Check должно распространяться не более, чем на одно поле таблицы, его нельзя указать для поля, допускающе го хранение NULL, и формулировка может включать только преди каты <=, >=, >, =, BETWEEN, AND, OR. Выполнив запрос через распределенное представление, мы полу чим примерно такой план исполнения: ) Текст запроса: SELECT * FROM ) WHERE = OR
= Col1012,
Index Как видно, оптимизатор на основе анализа условия и формули ровки ограничения Check принял решение, куда направлять части запроса, и создал один удаленный и один локальный запрос. Информационные представления Помимо диаграмм, SQL Server 8.0 предлагает еще одно средство для анализа метаданных базы — информационные представления (Infor mation schema view). Для каждой БД строится набор представлений (View), позволяющих получить сведения об ограничениях, правилах, триггерах и других элементах, создающих целостное представление о связях и правилах обработки информации на уровне всей БД. Это рекомендованный способ. В документации сказано, что прямые об ращения к системным таблицам могут привести к тому, что прило жение придется переписывать при изменении структуры таблиц сис темного каталога БД. При этом описанные представления не имеют привязки к системным таблицам, и приложение останется работос пособным даже при серьезных модификациях системных таблиц в следующих версиях SQL Server. Метаданные можно получить посред ством следующих представлений. Имя представления
Описание Выводит список ограничений CHECK, владельцем которых является текущий пользователь. Выводит список полей, владельцем которых является текущий пользо ватель, применяющих в определении пользовательские типы данных.
www.books-shop.com
170
Microsoft SQL Server 2000. Новейшие технологии (продолжение)
Имя представления
Описание
Выводит список привилегий, данных текущему пользователю или данных им. COLUMNS Выводит список полей, доступных текущему пользователю. Выводит список таблиц и полей, USAGE владельцем которых является текущий пользователь, имеющих наложенные ограничения. Выводит список таблиц, владельцем которых является текущий пользова тель, имеющих назначенные ограничения. Выводит перечень пользовательских типов данных, связанных с ограниче ниями, к которым текущий пользователь имеет доступ. DOMAINS Выводит перечень пользовательских типов данных, к которым текущий пользователь (от имени которого строится обращение) имеет доступ. Выводит список полей — ключей, к KEY_COLUMN_USAGE которым текущий пользователь имеет доступ. PARAMETERS Новинка SQL Server 2000. Выводит по одной записи для каждого пара метра пользовательских функций или хранимых процедур, доступны теку щему пользователю в текущей базе данных. Для функций представление также возвращает строку с информа цией о возвращаемом значении. REFERENTIAL CONSTRAINTS Выводит список ограничений FOREIGN KEY, владельцем которых является текущий пользователь.
www.books-shop.com
ГЛАВА 3:
Управление базами данных
ROUTINES
171 (продолжение) Введено в SQL Server 2000. Выводит по одной строке для каждой пользова тельской функции или хранимой процедуры, доступной текущему поль зователю в текущей базе данных. Столбцы с информацией о возвращае мом значении относятся только к функциям, для хранимых процедур эти столбцы имеют значение NULL.
ROUTINE COLUMNS
Введено в SQL Server 2000. Выводит по одной строке для каждого столбца, возвращаемого функциями, у которых в качестве выходного параметра ис пользуется переменная типа таблица. По сути дела это представление возвращает подробное описание полей переменной — таблицы.
SCHEMATA
Выводит перечень БД, доступных текущему пользователю. Выводит список ограничений на уровне таблиц, владельцем которых является текущий пользователь. Выводит список привилегий, данных текущему пользователю.
Выводит список представлений, владельцем которых является текущий пользователь, и поля, задействованные при определении представлений. Информационных представлений в этом списке нет, так как их владелец
VIEW TABLE USAGE
Выводит список представлений, владе льцем которых является текущий поль зователь и таблицы, задействованные при определении представлений. Ин формационные представления в этот список не попадают, так как их владе лец INFORMATION_SCHEMA.
www.books-shop.com
Microsoft SQL
2000. Новейшие технологии (продолжение)
Имя представления
Описание
VIEWS
Выводит список представлений, доступных текущему пользователю.
Текст кода представлений можно получить, применив одно из них: SELECT или проанализировав содержание файла расположенно го в каталоге Install и используемом самим сервером при установке. Вызывая информационное представление, укажите INFORMA представлениях При анализе результатов, возвращаемых представлением, имейте в виду, что имена полей соот ветствуют стандарту ANSI. Таблица показывает соответствие между терминами по стандарту ANSI и терминами SQL Server: SQL Server БД (database) владелец (owner) объект (object) пользовательский тип данных (userdefined data type)
Соответствует объекту по стандарту ANSI каталог (catalog) схема (schema) объект (object) домен (domain)
Информационные представления создаются для каждой новой БД. Индексы Обсудив создание и модификацию таблиц, кажется, самое время по говорить о том, без чего не работает ни одно приложение, занима ющееся управлением и хранением данных, — об индексах. Я не соби раюсь сейчас вдаваться в детали организации индексных файлов, а расскажу о новых возможностях. С точки зрения организации и использования индексов SQL Server 2000 наследует и развивает функциональность версии 7.0: • некластерный индекс хранит указатель не на страницу данных, как в версии 6.x, а на ключ кластерного индекса (если он • при построении плана исполнения запроса оптимизатор способен задействовать более одного индекса на таблицу, участвующую в запросе; оптимизатор может строить пересечение индексов для определения результирующего набора записей.
www.books-shop.com
ГЛАВА 3:
Управление базами данных
Что из этого? Кластерный индекс получил еще большее значение, и скорее всего каждая таблица должна его иметь. Если же его все таки нет, некластерный индекс содержит указатель на идентифика тор записи (Row ID). Последний формируется из идентификатора файла, номера страницы и номера записи на странице. С другой сто роны, полезность кластерного индекса как средства оптимизации раз мещения страниц данных практически сведена на нет новой архитек турой хранения, рециркулирующей страницы. Теперь кластерный индекс выполняет только работу, непосредственно связанную с ис полнением запросов. Поскольку кластерный индекс может быть в таблице только один и на него будут «оглядываться» остальные индексы, состав ключа нужно выбирать особенно тщательно. Ключ индекса должен быть как можно уже, иначе Вы рискуете получить слишком массивные некла стерные индексы, у которых на страницу умещается лишь небольшое число ключевых значений. При этом теряется одно из главных пре имуществ индекса — ссылки на большое число записей, размещен ные на небольшом числе страниц. Сервер вынужден читать больше страниц с диска, в памяти их помещается меньше, неизбежно паде ние производительности. Тут хочу особо отметить, что при работе с SQL Server 2000 гораздо большее значение приобретает оптимизация дисковой подсистемы. Это связано с существенным сокращением чис ла параметров, которые ранее требовали тщательной настройки. Па мятью сервер управляет теперь сам, выделением блокировок, объектов и прочего — тоже. Чем же заняться администратору? Да особо нечего, знай создавай страховочные копии. Хаха. Квалифицированные ад министраторы будут нужны всегда. Однако я совершенно серьезно полагаю, что при оптимизации производительности следует уделять самое серьезное внимание работе дисковой подсистемы. Что же де лать при определении индекса? Если у компьютера диск один, то не много. Если несколько самостоятельных дисков или дисковый мас сив, дело другое. При выборе ключа стоит позаботиться, чтобы его значения были болееменее равномерно распределены. Это позволит избежать ситуаций, когда все новые добавления попадают на опреде ленную область диска и тем самым образуется «горячая точка». Есте ственно, подобный подход имеет смысл, только если файлы группы, на которой размещен индекс, расположены на нескольких дисках или дисковом массиве. Если индексный ключ сам по себе не обеспечива ет равномерного распределения, его можно дополнить случайной со ставляющей, которая равномерно распределит значения ключа, но не будет использоваться при обслуживании запросов. Применение клю чей кластерного индекса для формирования некластерного наклады
www.books-shop.com
Microsoft SQL Server 2000, Новейшие технологии вает на кластерный индекс дополнительные требования по стабиль ности. Как это понять? При работе с версией 6.x определение схемы индексов напоминало балансирование на проволоке. С одной сторо ны, они нужны для выполнения операций выборки, с другой — при модификации данных все индексы должны быть адаптированы к вне сенным изменениям, что создавало немалые накладные расходы. В итоге разработчик был вынужден искать компромисс между обеспе чением высокую скорость исполнения операций SELECT (индексы в основном помогают) и необходимостью не замедлять исполнение операций UPDATE (тут индекс помогает при поиске записей, соот ветствующих критерию обновления, мешает, замедляя выполнение самой операции) или INSERT. Версия 8.0 снимает остроту пробле мы, но только если модификации не затрагивают ключ кластерного индекса. В этом случае некластерный индекс будет затронут в мини мальной степени, так как его основной указатель, связывающий его ключ с ключом кластерного индекса, остается неизменным. Индексов может быть больше, и, как я уже говорил, оптимизатор запросов может задействовать более одного индекса при обработке запроса к Это хорошо видно при анализе плана исполнения. Создадим несложный пример: CREATE TABLE test CHAR(10), fld2 CREATE INDEX ON test CREATE INDEX ind2 ON test (fld2) Теперь заполним таблицу данными и выполним запрос: SET SHOWPLAN_TEXT ON SELECT * FROM test WHERE
like
OR fld2 LIKE
Оптимизатор создает такой план исполнения: |)Hash Match(Union) )Index SEEK:([test].[fld1] BETWEEN
BETWEEN
AND
ORDERED)
AND
ORDERED)
Как видите, оптимизатор использует оба индекса для поиска на бора индексных ключей, удовлетворяющих указанному критерию, а затем строит их пересечение, чтобы определить на
www.books-shop.com
ГЛАВА 3;
базами данных
бор записей. «Ну и что?» — спросите Вы. А то, что теперь можно и должно создавать столько индексов, сколько нужно. Только вот ка ких? В силу того, что индексов может быть много, оптимизатор спо собен использовать несколько за раз, и наличие индексов почти не влияет на скорость обновления таблиц, у администратора или разра ботчика может появиться искушение создать индексы на все возмож ные комбинации полей. Вряд ли это будет правильно: возможности по построению пересечения индексов скорее подталкивают к созда нию более узких и простых, нежели сложных составных индексов. Если индекс построен по комбинации полей а зап рос сформулирован как: SELECT Fld3,
FROM
WHERE Fld2 =
индекс поможет мало, поскольку критерий поиска использует поле из середины составного ключа. Это может выглядеть так: CREATE TABLE test CHAR(10), fld2 CREATE INDEX ON test fld2) SELECT * FROM test WHERE fld2 = SELECT * FROM test WHERE = на план исполнения. Первый запрос: Index Второй запрос: Index ORDERED) В первом случае сервер сканирует индекс, что хоть и лучше сканиро вания таблицы (всетаки индексные страницы заполнены обычно боль шим числом записей), но ненамного, тогда как второй запрос полнос тью использует индекс и стоимость исполнения запроса почти в 10 раз меньше. Возвращаясь к проблеме правильного подбора индексов, хочу сказать, что версия 8.0 предлагает целый набор средств, позволяющих определить оптимальную схему индексов для конкретной нагрузки сер вера. Подчеркну: конкретной нагрузки. Универсально оптимальной схе мы индексирования нет — ее состав должен соответствовать запросам, которые предстоит обрабатывать серверу. Об инструментах анализа и оптимизации схемы индексов мы поговорим чуть позже.
Отмечу также, что SQL Server 2000 позволяет создавать индексы по таким полям, которые ранее были недоступны для индексирова ния. Я имею в виду поля типа Bit и вычисляемые поля. Полезность индекса по полю, которое может иметь только два значения, мне представляется довольно сомнительной, кроме случаев, когда одно из значений занимает лишь небольшую часть записей. А вот вычисляе мые поля — дело другое. Индекс снимает необходимость каждый раз производить вычисления и должен заметно ускорять выполнение зап роса. Только имейте в виду: выражение должно быть детерминиро ванным, т. е. при одном и том же наборе входных параметров оно должно всегда возвращать одинаковый результат. Для этого из выра жения надо исключить все недетерминированные функции, поля типа Float, а при создании таблицы параметр ANSI_NULL должен быть активен (значение ON). Сама команда создания индексов по вычисляемым полям должна выполняться в определенном окруже нии. Это окружение создается набором команд SET, описанных в следующем разделе. Важно также помнить, что все команды моди фикации данных тоже должны выполняться в рамках соединения, настроенного должным образом. Индексы на представление Прежде чем говорить о принципах организации индексированных представлений и требованиях к окружению для созданий таких пред ставлений, я хотел бы сказать об области их применения. Нужно чет ко понимать, что ничего не дается бесплатно и совокупная трудоем кость всегда остается примерно на одном уровне. Все, что происхо дит, — это перераспределение трудозатрат. Точно так же с индекси рованными представлениями. На определенных типах запросов этот вид представлений может значительно (на порядок и более) повысить производительность системы. С другой стороны, затраты на поддер жание индексов могут заметно замедлить исполнение других запро сов (в первую очередь модификаций). Что же такое индексы на представление? Это новая концепция индексирования, хотя ранее Вы могли слышать такие слова как «ма териализованное представление», «агрегированные таблицы» и под. Как уже говорилось, определение представления — не что иное как набор метаданных, задающих критерии выборки. При создании ин декса на представление его содержимое получает физическое пред хранящееся на долговременной основе, подобно любому индексу. В определении представления могут присутствовать такие атрибуты, как суммы, средние значения и другие агрегаты. Как и любой другой, индекс на представление автоматически
www.books-shop.com
ГЛАВА 3:
базами данных
ется актуальным при внесении модификаций в таблицы, определен ные в формулировке представления. Более того, оптимизатор, зная о наличии такого индекса может его использовать, даже если запрос обращен не к представлению, а к его таблице. При индексировании представления помните, что первый из индексов (их может быть не сколько) должен быть кластерным и уникальным (CLUSTERED, UNIQUE). Создание кластерного индекса формирует структуру, очень похожую на обычную таблицу, создаваемую при формирова нии «обычного» кластерного индекса. А требование уникальности обусловлено необходимостью эффективно поддерживать набор ин дексов на представлении. Проиндексированное представление похоже на обычную таблицу. После создания первого кластерного индекса можно создать набор некластерных, при удалении кластерного индекса автоматически уда ляются все некластерные (подобно тому, как удаление таблицы авто матически уничтожает все ее индексы). Теперь вернемся к тому, о чем говорилось в самом начале раздела, и посмотрим, на что годны индексированные представления. Несом ненно, они полезны при извлечении агрегированных значений, со единении крупных таблиц при аналитической обработке данных. Очевидно, что индексированные представления не заменяют сервера, но могут служить переходным этапом на пути от базы с ак тивно меняющимися данными к настоящему хранилищу. Индекси рованные представления полезны при выполнении повторяющихся по структуре и составу полей запросах. Итак, индексированные представления лучше всего подходят для работы с относительно статичными данными. База, в которую посто янно вносятся изменения или которая подвергается массивным мо дификациям, с точки зрения производительности только пострадает от дополнительных индексов, требующих сопровождения. Нет осо бого смысла строить индексированные представления на уникальных ключах. Сами посудите: основное преимущество индексации пред ставления в том, что физически представленные на диске данные — это просуммированные, или иначе сгруппированные данные, причем количество записей, возвращаемых представлением, гораздо меньше количества записей в базовых таблицах. Если запрос в формулировке представления возвращает столько же записей, сколько их есть в ба зовой таблице, мы вряд ли получим преимущество от индекса на та ком представлении. Не стоит индексировать представления, создава емые на так называемых «расширенных соединениях». Подобного рода соединения возвращают больше записей, чем имеется в базовых
www.books-shop.com
Microsoft SQL Server 2000, Новейшие технологии таблицах. Создание индекса на таком представлении потребует очень много места и времени. Теперь рассмотрим условия, которые необходимо соблюсти, что бы сервер вообще позволил нам построить индекс на представление. Они связаны как с описанием самого представления, так и с окруже нием, в рамках которого создается представление. Окружение опи сывается командами SET, и для создания индекса у представления: • значение ON должны иметь параметры ANSI_NULLS, ANSI_ PADDING, ANSI_WARNINGS, ARITHABORT, CONCAT_ •
параметр должен иметь значение OFF. Заметьте также, что аналогичный набор параметров должна иметь любая сессия, обращающаяся к представлению, иначе индекс не бу дет использован. Как всегда, лучше один раз увидеть, чем сто раз ус лышать или прочитать). Вот пример: Выставляем необходимые параметры SET ON
go SET ANSI_PADDING ON
go SET
ON
go SET ARITHABORT ON
go SET CONCAT_NULL_YIELDS_NULL ON
go SET QUOTED_IDENTIFIER ON
go SET
OFF
go представление, привязанное к схеме Включение в состав описания также обязательно CREATE VIEW WITH SCHEMABINDING as SELECT AS * Quantity) AS AS BigCount FROM Details] GROUP ProductID
go www.books-shop.com
ГЛАВА 3:
базами данных
Создаем индекс на представление CREATE UNIQUE CLUSTERED INDEX (Productld) go
on TestlndexView
Теперь посмотрим на планы исполнения. Если мы воспроизведем окружение, аналогичное тому, что требуется для создания индекса: ) Нам нужно поменять только одну параметр, все остальные Query Analyzer по умолчанию выбирает правильно SET ON GO SELECT * FROM TestlndexView WHERE Productld = 20 GO План исполнения будет такой, как и ожидалось. Индекс создан не зря: StmtText |)Clustered Index Seek ORDERED FORWARD) Теперь «испортим» окружение: SET QUOTED_IDENTIFIER OFF GO SELECT * from TestlndexView WHERE Productld = 20 GO StmtText [Expr1002]=SUM([Order Details]. )Clustered Index Details]. Невесело: получаем, по сути дела сканирование таблицы. Если оценить затраты на исполнение второго запроса, то число чтений больше в 8 раз, а стоимость исполнения — на порядок Словом, надо тщательно планировать код приложений, если пред полагается, что они будут к индексированным представ лениям. Тут на первый план выходят хранимые процедуры, так как
www.books-shop.com
Microsoft SQL Server 2000. Новейшие технологии только они гарантированно обеспечить «среду обитания» зап роса. Согласитесь, практически невозможно гарантировать, лю бое приложение, которое будет к БД, правильно выста вит все а потом Ваши пользователи начнут жаловаться, что их запросы обрабатываются слишком медленно, и заведут старую песню о том, что «если бы мы выбрали Oracle, все работало бы намно го А корень зол — в несоблюдении условий. Но зачем эти мучения? А затем, что мы имеем дело с агрегатами, и возвращаемые результаты при одном и том же входном наборе пара метров всегда должны быть одинаковы. Скажем, представление вклю чает конкатенацию двух строк. В случае результат сложения двух текстовых полей может быть разным в зависимости от параметра CON CAT_NULL_YIELDS_NULL. Если не гарантировать одинаковое ок ружение, то «Text»+Null в одном случае вернет «Text», а в другом — To же относится и к арифметическим выражением. Более того, в состав представления нельзя включать недетерминированные функ ции, например GETDATE(), которая сейчас один резуль тат, а через секунду уже другой. Правило такое: формулировка пред ставления и параметры окружения должны быть таковы, что сохранен ное физическое представление всегда возвращает одинаковый резуль тат при одних и же входных параметрах. Для проверки столбца таб лицы на детерминизм можно использовать здравый смысл или функ цию с параметром Set
ON
go CREATE VIEW TestView With Schemabinding
AS SELECT Fld1, Fld2 from GO CREATE UNIQUE CLUSTERED INDEX Index_View on TestView (Fld1,
GO Set Quoted_Identifier OFF
GO INSERT TestView (Fld1, Fld2) Values (13,
Go )INSERT failed because the following SET options have incorrect settings:
www.books-shop.com
3:
Управление базами данных
Создание хранимых процедур и триггеров Хранимые процедуры и триггеры обеспечивают значительную долю той которая обычно связывается с сервером БД. В этом смыс ле SQL Server не исключение. Язык программирования Transact SQL позволяет описать очень сложную логику манипулирования и про верки данных, а новые возможности версии 8.0 еще больше расши ряют число задач, решение которых по плечу флагманской СУБД Microsoft. Хранимые процедуры Хранимая процедура — это модуль, написанный на Transact SQL и хранящийся среди прочих объектов БД. Поскольку хранимая проце дура проходит предварительную компиляцию и оптимизацию, она эффективнее аналогичного набора команд, исполняемых с клиента. Хранимая процедура вызывается по имени, как программный модуль в любом языке программирования, и может принимать параметры и возвращать результаты. В коде хранимой процедуры могут использо ваться не только операции извлечения и модификации данных, но и логика ветвления, переменные и другие языковые конструкции, де лающие хранимые процедуры мощным средством реализации логики обработки данных. Хранимые процедуры могут быть 4 типов: системные (System), ло кальные (Local), временные (Temporary) и удаленные (Remote). Эта классификация разделяет процедуры по области видимости — с точ ки зрения кода, который могут содержать процедуры разных типов, различий нет. Системные хранимые процедуры использует сам сервер для выпол нения разного рода действий по ведению БД и администратором. Си стемные процедуры всегда начинаются с префикса и хранятся в БД Master. Процедур этих масса, но, если Вам понадобиться создать собственную, создайте ее с именем, начинающимся с поместите в Master, и она будет доступна любому пользователю сервера. ВНИМАНИЕ! Если Вам захотелось внести изменения в системную хра нимую процедуру, сделайте эти изменения в копии, сохраните ориги нальную процедуру под другим именем, но не трогайте исходный код. Хотя системные процедуры непосредственно редактировать не позво лено (рис. 310).
www.books-shop.com
182
Microsoft SQL
2000, Новейшие технологии
Теперь окно Properties хранимой процедуры типа System не дает возможности редактировать ее текст.
Локальные хранимые процедуры создаются в пользовательских БД. Если Вы создаете процедуру с именем, начинающимся с или Вы получаете временную хранимую процедуру, помещаемую в БД Tempdb. Процедуры, имена которых начинается с двух символов #, — глобальные, они видны любой сессии с данным сервером. Про цедуры с одним # — локальные и видны только из соединения, в ко тором созданы. Когда соединение, в котором создана процедура, зак рыто, процедура автоматически уничтожается. Удаленные процедуры могут вызываться с иного, чем текущий, сервера, с которым клиентское приложение установило соединение. При этом текущий сервер является промежуточным звеном. Удален ную процедуру можно также вызвать прямо с сервера В для выполне ния работ на сервере В. Есть еще один тип хранимых процедур, принципиально отличный от перечисленных, — расширенные хранимые процедуры (Extended stored procedures). Это DLL, как правило, написанные на С, и называются они хранимыми только потому, что их имя хранится в БД SQL Server. Сами DLL хранятся в виде файлов в соответствующем каталоге ОС. Расширенные хранимые процедуры вызываются по имени, но на ис полнение запускается не TSQL, а Скод.
www.books-shop.com
ГЛАВА 3;
базами данных
Зачем нужны хранимые процедуры Хранимые процедуры предоставляют ряд преимуществ. • Код, описывающий логику процесса обработки данных, хранится в одном месте, его проще поддерживать и модифицировать. • Для вызова хранимой процедуры у пользователя должны быть со ответствующие права, что позволяет обеспечить централизованное управление системой безопасности. Можно установить дополни тельную защиту от неправомерных действий пользователя, запре тив ему непосредственную работу с таблицами и предоставив толь ко право на исполнение хранимой процедуры. • Хранимая процедура может запускаться автоматически при старте сервера и выполнять административные действия или проверки. Кстати, чтобы планы наиболее часто исполняемых хранимых про цедур были уже размещены в кэше, когда клиентское приложение захочет к ним обратиться, можно при старте сервера запустить про цедуры на исполнение. Назначение атрибута «стартовать автомати чески» выполняет хранимая процедура Хранимые процедуры запускаются после полного завершения старта сервера. Чтобы сократить число пользовательских соединений (каждая процедура требует одного соединения), логично применить един ственную процедуру, которая стартует автоматически и вызывает ос тальные. Хранимые процедуры заметно сокращают объем данных, пересы лаемых по сети. При вызове процедуры передается только ее имя и, возможно, параметры. Ясно, что гораздо «дешевле» передать команду: Execute чем что)нибудь вроде: SELECT au_lname, FROM authors WHERE IN (SELECT au_id FROM (SELECT title_id FROM titles WHERE type =
WHERE
IN
Чем сложнее код в теле хранимой процедуры, тем очевиднее ее преимущества. При создании хранимой процедуры выражения проходят провер ку на правильность синтаксиса. При первом исполнении хранимой процедуры процессов запросов SQL Server:
www.books-shop.com
Microsoft SQL Server 2000. Новейшие технологии •
проверяет наличие объектов, на которые имеются ссылки; при создании процедуры объектов может не быть: версия 7.0 исполь зует отложенное разрешение имен (delayed name resolution); • проверяет соответствие типов данных, объявленных для переменных. Следующий этап — оптимизация. Если процедура успешно про шла синтаксический разбор, оптимизатор запросов SQL Server ана лизирует индивидуальные выражения в теле процедуры и создает план исполнения, обеспечивающий наиболее быстрое (по мнению оптимизатора) исполнение. Для принятия решения оптимизатор при нимает во внимание: • размер таблиц; • присутствие и характер индексов, распределение данных в полях, составляющих ключи индексации; • условия выборки (операторы и значения), сформулированные в предложении WHERE; • наличие в SQLпредложениях объединений и аргументов GROUP BY или ORDER BY. При последующих запусках процедуры используется план испол нения, размещаемый в кэше. Для создания хранимых процедур и триггеров версия 8.0 предла гает удобный интерфейс. Как видите, применяется цветовое выделе ние конструкций языка (рис. Если бы еще можно было регули ровать то, насколько далеко нажатие клавиши табуляции отодвигает строку, все было бы просто замечательно. Не помешал бы и отлад чик, да и возможность отображения номеров строк пришлась бы кста ти, но это уже роскошь. Итак, в предлагаемое окошко помещаем код, и, прежде чем со хранить процедуру, можно щелкнуть кнопку Check syntax — SQL Server проверит на правильность синтаксис. В отличие от предыду щей версии теперь не нужно заранее создавать все объекты, на кото рые ссылается код в процедуре. Сообщение об ошибке выдается толь ко при исполнении или компиляции процедуры. Примечание Установка совместимости со стандартом ANSI (в частно сти, SET ANSI_NULLS, SET CURSOR_ CLOSE_ON_ COMMIT) сохраняется при создании или компиляции хранимой процедуры. Так что, чтобы обеспечить гарантированное по ведение независимо от параметров сервера, на котором будет испол няться Ваш код, не поленитесь поставить чтото вроде SET CURSOR_ CLOSE_ON_COMMIT ON в начале кода процедуры.
www.books-shop.com
ГЛАВА 3: Управление
185
языка не только выделяются цветом. У нас есть возможность тут же проверить синтаксис процедуры.
Если Вы внимательно читали раздел, посвященный индексам, Вы должны были заметить присутствие в плане исполнения конструкции такого вида: Что это? Я уже пару раз упоминал о том, что теперь оптимизатор способен рассматривать гораздо более сложные схемы исполнения запросов. Увы, бесплатных обедов не быва ет, так что и в здесь приходится расплачиваться существенным замедле нием построения плана исполнения. Если речь идет об очень сложных запросах, то тут версия 8.0 оставит предыдущие позади. Если же мы го ворим о большом количестве относительно несложных запросов, харак терных для систем онлайновой обработки транзакций, то замедление может сказаться на реакции системы. «Зная» об этой опасности, сервер принимает соответствующие суть которых — в попытке повторно использовать ранее созданные планы. Для этого серверу нужно както унифицировать представление плана, чтобы оптимизатор мог выпол нить сравнение. Это делается путем автоматической параметризации запроса, когда это возможно. В результате критерии поиска представля ются параметрами и при исполнении груп пы запросов типа:
SQL Server 2000, Новейшие технологии SELECT SELECT SELECT
FROM TEST WHERE FLD2 = FROM TEST WHERE FLD2 = FROM TEST WHERE FLD2 =
сервер только меняет значение параметра, а план остается тем же. Проанализировать интенсивность, с которой сервер пытается выпол нить автопараметризацию запросов, поможет монитор производи тельности, который теперь позволяет отслеживать состояние объекта SQL Server: SQL Statistics Object. Этот объект включает несколько па раметров, относящихся к автопараметризации: Параметр
Описание
AutoParam Attempts/sec Общее число попыток выполнить автопара метризацию для похожих, но не полностью одинаковых запросов. Failed AutoParams/sec Число неудачных попыток выполнить автопа Если эта величина мала (в сравнении с общим числом попыток), все ОК. Safe AutoParams/sec Число «безопасных» попыток автопараметризации. Unsafe AutoParams/sec Число «рискованных» попыток автопарамет ризации, относящихся к таблице, харак теристики которой препятствуют повторному использованию ранее созданного плана. Но оптимизатору, как бы он ни был «умен», иногда не помешает по мочь. Это можно сделать несколькими способами. Вопервых, полезно всегда применять полную нотацию при именовании объекта: <имя БД>.<имя владельца объектах Вовторых, в случае динамически создаваемых SQLвыражений следует выполнить не хо рошо известную по предыдущим версиям команду EXECUTE, а но вую системную хранимую процедуру sp_executesql — нечто вроде мак рокоманды, обеспечивающей принудительную параметризацию ис полняемого выражения. Динамическое построение SQLвыражений может быть необходимо, например, когда в БД есть таблицы, имена которых формируются из постоянной составляющей и переменной составляющей, которая представляет название компании, год, квар тал или нечто подобное. Мы не можем создать хранимые процедуры с жестко прописанными именами таблиц во всех возможных вариан тах — вместо этого мы передаем единственной процедуре параметры,
www.books-shop.com
ГЛАВА 3: Управление базами данных позволяющие динамически построить имя таблицы и, соответствен но, сформулировать запрос. CREATE PROCEDURE char(2), char(2), AS DECLARE SET = FROM + @CC + EXECUTE GO EXECUTE
char(12)
+
Balance WHERE Account_Name >
В теле процедуры мы формируем нужный набор переменных, при сваиваем им значения и передаем их с входными параметрами про цедуре sp_executesql. Заметьте: вызов sp_executesql включает не толь ко значение параметра, но и его объявление, включая тип и размер ность. Такой подход требуется не только в хранимых процедурах, но и триггерах и других конструкциях, Но повтор ное использование планов исполнения — не панацея. Допустим, у нас есть который в параметризированном виде выглядит как: SELECT Fld1,
From
WHERE KeyFld >
Для таблицы, имеющей 1 000 000 записей и монотонно возрастаю щее значение ключевого поля, повторное использование плана с пара метром 20 после построения плана для запроса с параметром 999990, очевидно, не оптимально. И как быть? По ситуации. Тем более, что в Вашем распоряжении гораздо больше инструментов анализа работы сервера. Недокументированные хранимые процедуры Недокументированные, неподдерживаемые, но все равно полезные. Приведенная в этом разделе информация — результат моих изыс каний, который нельзя рассматривать как официальное описание хранимых процедур, их параметров и возвращаемых результатов. С выходом очередного Service Pack процедуры могут быть изменены или удалены. Если чтото работает не так, то техническая поддержка по вопросам прямых вызовов недокументированных процедур не ока зывается. С другой стороны, мне всегда казалось по меньшей мере странным нежелание разработчиков документировать весьма полез ные аспекты работы приложений, особенно в той части, когда опре деленная функциональность языка носит исключительно информа
www.books-shop.com
j
Microsoft SQL Server 2000, Новейшие технологии
характер и не способна повредить системе (как, например, описанная выше команда DBCC LOGINFO). Начнем с имен. Мы рассмотрим несколько «стандартных» проце дур, т. е. тех, что написаны на чистом TSQL, и несколько «расширен ных», про которые известно, что они реализованы в форме динами ческих библиотек (DLL). Стандартные нам доступны в ис ходных текстах, тогда как представляют собой классический «черный ящик». И еще пара предупреждений. Вопервых, недокументирован ных процедур очень много, но большая часть отвечает за разного рода вспомогательные действия вроде обеспечения репликации и подобных аспектов работы сервера. Вовторых, НИКОГДА не редактируйте сис темные процедуры напрямую. Отройте текст, выполните команду CREATE PROCEDURE с указанием иного имени и работайте с копи ей. Это относится и к ситуации, когда Вы обнаружили ошибку в коде, осознали, что способны улучшить функциональность процедуры и т. д. Итак, приступим. Сначала обратимся к большой группе процедур, расположенных в БД Master и начинающихся с префикса «SP_MS». Если применить команду SELECT * FROM sysobjects WHERE name LIKE результатом исполнения запроса будет более 450 строк. Значительная часть этих процедур не годится для непосред ственного использования, но есть несколько таких, что могут оказать ся весьма полезными для Ваших приложений. Проверяет наличие файла в определенном каталоге. Синтаксис вы зова таков: • Первый параметр — полный путь без указания имени файла, вто рой — имя файла. Сама процедура представляет собой «оболочку» расширенной процедуры и, если указанный файл найден, возвращает 1, в противном случае — 0. Пример вызова: declare execute select
int = sp_MSexists_file ) returns 1
Если Вы решите использовать непосредственно, пере дайте ей полный путь и включите в строку имя самого файла. Можно также передать только путь до каталога: xp_fileexist
go xp_fileexist
go www.books-shop.com
ГЛАВА 3:
Управление базами данных
gg
Результатом исполнения этих двух команд будут такие наборы: File Exists File is a Directory Parent Directory Exists Файл существует Переданный путь Существует каталог более является каталогом высокого уровня 1 0 1 File Exists File is a Directory Parent Directory Exists 0 1 1 Это позволяет проверять, что было передано в качестве парамет ра: путь к файлу или к каталогу. Эта оболочка расширенной процедуры xp_oledbinfo вызывается так: execute Если вместо второго параметра передать NULL, результатом ис полнения будет таблица: Information Type Value Тип информации Значение DBMS Name Microsoft SQL Server DBMS Version 08.00.0100 Database Name master SQL Subscriber TRUE Как видите, параметр может принимать значения: «DBMS name», «DBMS Version», «Database Name» и «SQL Subscriber». И стандартная и расширенная процедуры работают не только для SQL Server 2000, но и для так называемых «связанных серверов». Если в качестве связанного сервера я использую БД Visual FoxPro, а сам связанный сервер назван OLEDB», я могу выполнить команду: sp_MSget_oledbinfo и она вернет следующий набор данных: Information Type Value DBMS Name DBMS Version Database Name
Microsoft Visual FoxPro 07.00.0000 FILES\MICROSOFT VISUAL STUDIO\VFP98\SAMPLES\ DATA\TESTDATA.DBC SQL Subscriber TRUE В данном случае в качестве версии БД берется версия OLEdB Visual FoxPro (надеюсь, что вскоре после выхода этой книги Вы сможете поставить себе следующую версию VFP, в состав
www.books-shop.com
Microsoft SQL Server 2000, Новейшие технологии которой входит полноценный Если в качестве источника информации Вы берете системную таблицу SYSSERVERS, то там SQL Server хранит данные о строке соединения, имени про вайдера OLEdB и пр. xp_dsninfo Почти идентична xp_oledbinfo. Только вместо имени (связанного) сервера Вы передаете ей имя DSN. Возвращается точно такой же на бор информации. Синтаксис вызова:
xp_enumdsn Возвращает список DSN, определенных в системе. Вызовите ее без параметров и получите полный список системных DSN, зарегистри рованных на SQL Server Информация включает имя DSN и описание, аналогично тому, что Вы видите после запуска утилиты ODBCAD32. sp_MSindexspace Эта очень полезная процедура позволяет узнать, какой объем занят индексами таблицы, чье имя передано как параметр. Почемуто не работает, если Вы не находитесь в той БД, где расположена интересу ющая Вас таблица.
Эта команда возвращает следующую информацию: Index ID Идентификатор индекса
Index Name Имя индекса
Size (KB) Размер (Кб)
Comments Комментарий
1
UPKCL_ auidind
8
2
aunmind
16
Size excludes actual data (Размер чает собственно дан ные, речь идет о кластерном индек се). (None)
информацию о БД, чье имя передано как параметр, и описывает каждый файл этой БД.
Где: • с Default — входит ли файл в состав группы файлов, назначенной по умолчанию: 1 — да, 0 — файл входит в состав группы файлов, определенных пользователем; • cDBFile — что содержит файл: 1 — файл с данными (таблицы, ин дексы), 0 — файл с журналом транзакций; • cSize — размер файла в Мб, расчет выполнен, исходя из размера страницы — 8 Кб; • cMaxSize — наложено ли ограничение на максимальный размер БД; если да, указывается максимальный размер, • cGrowth — если БД позволено расти, указывается размер разового приращения; • — тип приращения: 1 — значение cGrowth выражено в Мб, 0 — в процентах; • cFGName — имя группы, в которую входит описываемый файл; • cName — логическое имя файла; • cFileName — физическое имя файла.
Предназначена для создания уникальных имен для создаваемых Вами объектов. Принимает два параметра: строку, используемую в качестве базового значения (seed), и целое число, используемое как счетчик. Отметим, что процедура гарантирует уникальность имени только в пределах одной Так, команды: use pubs 90 execute go use
1
www.books-shop.com
g2
SQL Server 2000. Новейшие технологии
go execute go
1
Возвращают hellol 55 для обоих баз данных. Второй параметр Вам нужно менять самостоятельно, так как вызов с одинаковым парамет ром будет всегда возвращать одно и то же имя. Возвращает большое количество полезной информации, включая вер сию БД (это внутренняя версия, определяемая архитектурными осо бенностями хранения exec exec БД
) для всех БД сервера ) для конкретной
Предоставляет сведения об индексах таблицы, чье имя передано в качестве параметра. Если опустить второй параметр, sp_MShelpindex возвращает информацию обо всех индексах таблицы. Если нас инте ресует только определенный индекс, передадим его имя как второй параметр. Синтаксис вызова таков: execute sp_MShelpindex Команда: execute возвращает: name
status
...
Full+ ding
18450 1
0
...
PRIMARYO
0
Computed Is Table 0
1
Orders
Как видите, процедура возвращает имя индекса, его статус, исход ное значение параметра fillfactor, определенное на момент создания индекса, список полей, формирующих индексный ключ (до 16 по имя группы, в которую входит файл с индексом (заметьте: тут группа названа сегментом, как в SQL Server 6.x), используется ли ин декс для полнотекстового поиска, в какую сторону отсортирован ключ (по возрастанию или по убыванию), входят ли в состав ключа вычис ляемые поля.
www.books-shop.com
3: Управление
данных
Возвращает информацию о свободном месте на диске. Если процеду ру вызвать без параметров, она вернет информацию о всех дисках компьютера.
При работе в составе приложения, чтобы можно было использо вать результат исполнения хранимой процедуры, создадим глобаль ный курсор или временную таблицу, заполняемые данными по ре зультатам работы хранимой процедуры: CREATE TABLE (name char(10), lo_free int, high_free int, m_type int) INSERT INTO tfAvailablemedia EXEC SELECT * FROM Еще одну процедуру, возвращающую сходный набор информации, — — тоже можно (или нужно) вызывать без парамет ров, она возвращает следующий набор данных: drive
MB free
С
184
D
258
Е
1655
F
1011
G
753
Принимает в качестве параметров строку с именем каталога и дис ком, а возвращает список подкаталогов более низкого уровня и глу бину вложения: xp_dirtree Как видите, результат исполнения процедуры позволяет восста новить дерево каталогов (рис.
www.books-shop.com
Microsoft SQL Server 2000, Новейшие технологии
Конечно, Windows Commander способен на большее, но и SQL Server 2000 может немало. При построении результата запроса процедура начинает поиск с каталога, указанного в качестве параметра, и перемещается по дере ву, пока не исчерпает глубину дерева. Сходная процедура — — принимает в качестве парамет ра строку с именем диска и каталога и возвращает список каталогов непосредственно под указанным. Синтаксис вызова таков: xp_subdirs Манипулирование системным реестром
Несколько расширенных хранимых процедур открывают разработчи кам доступ к системному реестру: xp_regaddmultistring xp_regdeletekey xp_regdeletevalue xp_regenumvalues xp_regread xp_regremovemultistring xp_regwrite Некоторые из них позволяют выполнять запись в реестр, другие читают оттуда информацию. Говоря о реестре, хочу еще раз погро зить пальцем, предупредив, что одно неловкое движение и... Вы по
www.books-shop.com
ГЛАВА 3: Управление базами данных
195
жалеете, что под рукой нет дискеты с Fdisk.exe. В то же время чтение — операция, ничего не модифицирующая, — особого риска не несет, так что начнем с процедуры Она используется для перечисления значений указанного ключа, например: execute следующую информацию (рис. 313). Процедура xp_regread работает более направленно и позволяет считывать из реестра определенное значение ключа. Пример вызова: declare EXECUTE
int
OUTPUT, select as "Max rows per server" Результат исполнения команды: Max rows per server 100
приложения на SQL Server 2000 можно получить любую информацию из системного реестра. Ⱦɚɧɧɚɹɜɟɪɫɢɹɤɧɢɝɢɜɵɩɭɳɟɧɚɷɥɟɤɬɪɨɧɧɵɦɢɡɞɚɬɟɥɶɫɬɜɨɦ%RRNVVKRS ɊɚɫɩɪɨɫɬɪɚɧɟɧɢɟɩɪɨɞɚɠɚɩɟɪɟɡɚɩɢɫɶɞɚɧɧɨɣɤɧɢɝɢɢɥɢɟɟɱɚɫɬɟɣɁȺɉɊȿɓȿɇɕ Ɉɜɫɟɯɧɚɪɭɲɟɧɢɹɯɩɪɨɫɶɛɚɫɨɨɛɳɚɬɶɩɨɚɞɪɟɫɭ[email protected]
j
SQL Server 2000, Новейшие технологии
Шифрование Еще при работе с версией SQL Server 4.x разработчики умоляли Mic rosoft создать некоторый механизм шифрования, позволяющий скрыть данные от любопытных взоров. Тщетно: до сих пор SQL Server не имеет официальных средств шифрования. Вы, наверное, знаете, о функции Она способна при нять строку в качестве параметра и вернуть зашифрованное значе ние. Но проблема в том, что для одной и той же строкипараметра она возвращает разные значения, если вызвать ее несколько раз. С другой стороны, процедура в версии 7.0 возвращает одинаковые результаты для разных, но не сильно отличающихся строк. Вот пример: DECLARE char(5) DECLARE SELECT = SELECT = EXECUTE output EXECUTE xp_repl_encrypt @password2 output SELECT SELECT Этот код создает две одинаковые строки. А вот тестирование вер сии 8.0 показало, что процедура возвращает другую строку, гораздо длиннее, и разные входные строки создают разные зашифрованные результаты: DECLARE Varchar(64) DECLARE Varchar(64) SET = SELECT = EXECUTE output EXECUTE xp_repl_encrypt @password2 output IF BEGIN SELECT "Equal" END ELSE BEGIN SELECT "Not equal" END
www.books-shop.com
\
ГЛАВА 3:
Управление базами
Этот код возвращает «Not equal». Посмотрите повнимательнее, возможно, Вы сможете применить эту процедуру для однонаправлен ного шифрования данных — во всяком случае мне не удалось найти процедуру, возвращающую исходную строку. одну новую для версии 8.0 процедуру использует Query Ana lyzer для поиска объектов сервера: exec
= = 1, = 1,
= [*], = NULL,
= 0, = NULL
= 2,
Процедура принимает в качестве параметров искомую строку, в которую можно включать символы и тип объекта, имя БД (в приведенном выше примере будет выполнен поиск по всем БД сер вера, нужно ли учитывать регистр при поиске указанной строки, сколько строк с результатами выводить, если будут найдены соответ ствующие объекты). Процедура прекрасно документирована. Вот ее заголовок: ) искомая строка, по умолчанию NULL; имя по умолчанию текущая БД, можно передать имя в качестве параметра или « (для поиска по всем БД); тип по умолчанию 1 (пользовательская таблица), может быть иной код типа объекта или 4096 (для поиска по всем объектам), см. также Примечания; число выводимых строк результата; по умолчанию выводится 100 строк результата поиска; если передан 0, выводится весь набор; учитывать регистр при поиске, по умолчанию 0; параметр используется, только если сервер настроен на работу с данными с учетом регистра; статус исполнения, по умолчанию 0 = не отображать статус исполнения, 1 = показывать % исполнения; имя расширенного свойства, по умолчанию NULL; значение расширенного свойства, по умолчанию NULL; Примечания
Представление = 4 Процедура = 8 Процедура репликации = 16 Расширенная процедура = 32 Триггер = 64 Функция = 128 Ограничение ссылочной целостности = 256 Журнал = 512 Столбец = 1024 Индекс = 2048 Искать все = 4096 Возвращаемые значения О = успех 1 = ошибка в передаче параметров 2 = результирующий набор был урезан Интересно, что Query не позволяет выполнить поиск всем возможным вариантам объектов. Кажется, разработчики Micro soft специально поддерживают независимых программистов, остав ляя «дырочки» в своих приложениях. Как узнать необходимые расширенной процедуре Прежде чем говорить о расширенных процедурах, отмечу новые воз можности процедуры sp_help. Теперь, если передать ей в качестве параметра имя хранимой процедуры, в результатах исполнения будет не только дата создания, владелец и прочая малоинтересная инфор мация, но и список параметров с указанием типа, порядка, размер ности и Теперь о расширенных процедурах. Параметры узнать нельзя — можно только подглядеть в каталоге \Install файлы с расширением SQL и попытаться найти там вызовы интересующей Вас процедуры. Триггеры Триггер — это особый вид хранимых процедур, исполняемых при попытке модификации данных в таблице, к которой он привязан (рис. Триггер запускается автоматически при возникновении одного из трех возможных событий (Insert, Update, Delete). Обойти триггер нельзя, каков бы ни был способ обращения к таблице. В от
www.books-shop.com
ГЛАВА 3;
Управление базами данных
личие от обычной хранимой процедуры триггер не вызывается непос редственно — он реагирует только на события. Версия 8.0 поддержи вает два типа триггеров. Первый — — это то, с чем мы имеем дело уже очень давно. В контексте Microsoft SQL Server их можно называть «обычными». Они срабатывают после того, как моди фикации «почти» записаны в таблицу: команда, вызвавшая срабатыва ние триггера, должна успешно завершиться. Второй тип — INSTEAD OF — исполняется вместо вызвавшей его команды. Теперь команда создания триггера выглядит так (полужирным на чертанием выделены новые аргументы команды): CREATE TRIGGER ON [ WITH ENCRYPTION ] { [,] [ INSERT ] [, ] [ UPDATE ]} [ WITH APPEND ]
[ NOT FOR REPLICATION ] AS
[ [
UPDATE ( column ) UPDATE ( column ) ] ] |IF ( ( )
) ]
} ] ]
Исполняется после успешного завершения вызвавшей его команды. Триггер и SQLвыражение, вызывающее его на исполнение, рассмат риваются сервером как одна транзакция, которую можно откатить изнутри триггера. В теле триггера можно использовать команду ROLLBACK TRANSACTION, даже если нет явно определенной тран закции (присутствует команда BEGIN TRANS ACTION). Выражение, исполнение которого вызвало запуск триггера, рассматривается как начало неявной (Implicit) транзакции. Но транзакцию можно опре делить и явно.
www.books-shop.com
200
Рис.
Microsoft SQL Server 2000. Новейшие технологии
Триггеров может быть сколько угодно.
Обычно триггер включает набор команд, предназначенных для выполнения определенных действий над данными или проверки не которых условий. Если он не может выполнить поставленную задачу или проверка показывает, что заданное условие не выполняется, триг гер откатывает транзакцию. Если триггер вызван изнутри пользова тельской транзакции, ROLLBACK TRANSACTION откатывает всю транзакцию. Если триггер вызывается из пакета команд (Batch — имеется модификатор GO), отменяется весь пакет. Этот код позволит создать 3 триггера, которые будут срабатывать при удалении записи, 2 — на модификацию и 3 — на добавление записи. CREATE TRIGGER ON authors FOR DELETE as Print delete GO CREATE TRIGGER ON authors FOR UPDATE as Print update GO CREATE TRIGGER trig2 ON authors FOR DELETE as Print delete GO CREATE TRIGGER trig6 ON authors FOR INSERT as Print insert GO CREATE TRIGGER ON authors FOR DELETE as Print delete GO CREATE TRIGGER ON authors FOR INSERT as
www.books-shop.com
3:
Управление
данных
Print insert GO CREATE TRIGGER trig4 ON authors FOR UPDATE as Print update GO CREATE TRIGGER ON authors FOR INSERT as Print insert GO Теперь попробуем модифицировать запись в таблице: BEGIN UPDATE authors SET COMMIT
=
WHERE
=
Оба триггера сработают. Trigger update #1 Trigger update #2 (1
affected)
Версия 8.0 не позволяет явно устанавливать порядок исполнения триггеров. Теоретически раньше (в версии 7.0) его можно было уста новить порядком создания, но на самом деле никакой гарантии это не давало. Функция принимающая в качестве параметров идентификатор объекта (в данном случае таблицы) позво ляла узнать, что на этот счет думает сервер. Вторым параметром были TriggerDeleteOrder, или TriggerUpdateOrder. Теперь эти параметры всегда NULL. Если Вы хотите получить определенный порядок исполнения, со здайте единственный триггер и заставьте его вызывать хранимые про цедуры. Если теперь удалить триггер и заново создать его с тем же текстом, порядок исполнения будет таков: #1, #3, #2. Если БД имеет уровень совместимости, выставленный хранимой процедурой sp_dbcmptlevel и равный 60 или 65, при попытке создания еще одного все имеющиеся триггеры будут уничтожены: exec pubs, 65 go create trigger trig9 on authors for update as Print update Останется только триггер, срабатывающий при исполнении UP DATE, — trig9.
www.books-shop.com
202
Microsoft SQL Server 2000, Новейшие технологии
Хотя изменение режима совместимости на 60 или 65 приводит к созданию множественных триггеров, ранее созданные триггеры в БД остаются и продолжают работать. А значит, даже при переводе БД в режим 60 или 65 исполнение команды UPDATE, показанной выше, даст тот же результат (если мы не попытаемся создавать новые триг геры). Чтобы создать новый триггер в дополнение к существующим, используйте предложение WITH APPEND. Это позволит создавать новые триггеры даже в БД с уровнем совместимости 60 или Возможность создания множественных триггеров активно приме няется при организации репликации сведением (о репликации см. соответствующую главу). Говоря о репликации, следует отметить спе циальный атрибут команды CREATE TRIGGER — NOT FOR REP LICATION. Он запрещает исполнение триггера, если таблица моди фицируется в процессе репликации данных. А если надо определить хоть какойто порядок исполнения триг геров? Версия 8.0 предлагает системную хранимую процедуру sp_set triggerorder, принимающую три параметра: имя триггера, порядок его исполнения и операция, по которой будет учитываться заданный по рядок: , ,
= ] = ]
= ] ) может быть "First", "Last", "None" ) "INSERT", "UPDATE", "DELETE"
Как видно из набора значений второго параметра, триггер может быть первым, последним или исполняться без определенного порядка. Триггер может быть очень мощным инструментом проверки дан ных перед записью в таблицу. До выхода SQL Server 2000 чаще всего триггеры использовались для реализации каскадных модификаций. Теперь это не столь актуально, сервер поддерживает каскадирование посредством декларативной ссылочной целостности. Скорее всего основная работа триггеров сместится в сторону проверки бизнеспра вил. Можно обратить более пристальное внимание на атрибуты: [ [
IF UPDATE позволяет определить, было ли модифицировано ука занное поле таблицы. AND и OR позволяют строить сложные комби нации для проверки и выполнения соответствующих действий.
www.books-shop.com
ГЛАВА 3: Управление базами данных
203
Атрибут IF COLUMNS_UPDATED позволяет получить список мо дифицированных полей в форме битовой маски. Сравнение этой мас ки с предопределенной величиной позволяет выполнить соответству ющие действия, если определенные были модифицированы. Instead of+триггер Этот тип, как следует из названия, предназначен для замены коман ды, вызвавшей триггер на исполнение. Такие триггеры могут быть созданы не только для таблицы, но и для представления. В последнем случае базовые таблицы представления могут быть модифицированы из кода триггера, тем самым делая представление модифицируемым. Instead of триггеры создаются на те же самые операции INSERT, DELETE, UPDATE что и «обычные», но в отличие от последних Instead ofтриггер может быть только один для каждой операции. Логика триггера может быть любой, он способен манипулировать данными из таблиц Inserted и Deleted, и главное отличие в том, что он исполняется вместо, а не следом за операцией, вызывающей триг гер на исполнение. Пользовательские функции Кажется, я уже несколько раз использовал выражение «пользователь ская функция», и у Вас наверняка возник вопрос, о чем идет речь. А о том, что SQL Server 2000 теперь поддерживает новый тип объектов БД, которые представляют собой именованный код на TSQL, но в отличие от хранимых процедур этот код может использоваться точно так же, как функции в других языках программирования. Итак, рас смотрим пользовательские функции. Как и положено функции, эта конструкция принимает набор па раметров и возвращает некоторое значение. Применение пользова тельских функций тесно связано с новыми переменными типа Table, но в качестве возвращаемого скалярного значения может выступать любой тип данных, поддерживаемый SQL Server 2000, кроме Text, nText, Image и Timestamp. Как обычно, входные параметры при оп ределении функции должны быть строго типизированы. Для привяз ки функции к объектам БД можно включить предложение WITH SCHEMABINDING, что имеет тот же эффект, что и для представле ний: прежде чем модифицировать структуру объекта, надо либо уда лить функцию командой DROP, либо модифицировать командой ALTER FUNCTION без указания SCHEMABINDING. Привязка к схеме БД нужна для индексирования результатов (при создании вы числяемых полей Как Вы помните, функция может возвра щать единственное значение, таблицу или переменную типа Table. С
www.books-shop.com
Microsoft SQL
2000, Новейшие технологии
точки зрения кода, определяющего тело функции, они могут вклю чать ряд выражений TSQL или единственную команду SELECT. В первом случае функция обязана иметь выражение Пример многострочной функции: CREATE FUNCTION RETURNS nchar(20) AS BEGIN RETURN + + + + convert(nvarchar(20), datepart(yy, END
Функции второго типа, единственное выражение, возвращают таблицу, и команда RETURN совмещена с выражением SELECT. Вот пример такой функции: CREATE FUNCTION RETURNS TABLE AS RETURN (SELECT title, qty FROM sales s, titles t WHERE s.stor_id =
and t.title_id = s.title_id)
Если возвращаемое значение представляет собой переменную — таблицу, в заголовке функции надо поместить описание переменной, а заполнение возвращаемой переменной данными выполняется ко мандами INSERT и UPDATE. В конце функции — команда Return: CREATE FUNCTION RETURNS TABLE(title AS BEGIN INSERT SELECT title, qty FROM sales s, titles t WHERE s.stor id =
qty
and
id = s.title_id
www.books-shop.com
ГЛАВА 3: Управление базами данных
205
RETURN
END Я уже упоминал о концепции детерминизма — этот аспект имеет важное значение при разговоре о пользовательских функциях. Детер минизм необходим для индексирования результатов работы функции и сохранения семантики независимо от выбранного плана исполне ния. Как и в случае с представлениями, Вы можете сформулировать недетерминированную функцию, результаты работы которой не бу дут индексироваться. Проверка детерминизма выполняется на этапе создания функции, и SQL Server 2000 помечает функцию на предмет ее соответствия. Функция считается детерминированной, если она не обращается к другим объектам БД за пределами собственной области видимости, т. е. это могут быть только переменные типа Table, ло кальные по отношению к функции, не включающей вызовов к неде терминированным функциям (встроенным или пользовательским) и привязана к схеме БД. Использование функций подчиняется правилам. Так, она не мо жет выполнять обновления таблиц, объявлять глобальные курсоры, создавать объекты БД, открывать и закрывать транзакции. С другой стороны, функции могут модифицировать локальные переменные типа и объявлять локальные курсоры. Все эти ограничения свя заны с необходимостью избежать побочных эффектов при использо вании функций. Вызов пользовательских функций требует указания владельца. Их можно вызвать в любом месте, где применяется скалярное выраже ние: в списке команды SELECT, предложении WHERE, определении CHECK, DEFAULT. Функции, возвращающие таблицу, можно выз вать из предложения FROM команды SELECT. Кроме того, скаляр ные функции может вызвать команда EXECUTE. Дополнительная информация об объектах БД Описанные выше средства позволяют получить много информации о той или иной БД. Однако при администрировании системы часто не хватает сведений, которые можно получить описанными выше инст рументами. Рассмотрим еще два инструмента, позволяющих анали зировать взаимосвязи объектов БД и генерировать сценарии созда ния объектов. Расширенные свойства До последнего времени, т. е. до версии 7.0 включительно, все, что можно было определить для объекта БД, ограничивалось формули
Microsoft SQL Server 2000, Новейшие технологии соответствующей команды CREATE <тип объектах Сервер хранил некоторый объем метаданных, но к ним не было «официаль ного» доступа, и никто не гарантировал, что следующая версия будет в состоянии эти метаданные читать и использовать. Версия 8.0 разре шает создавать набор пользовательских (или расширенных — extended) свойств для многих объектов БД. Количество таких свойств не огра а содержимое хранится в переменной типа SQL_Variant и может включать до 7 500 символов. В таблице перечислены объекты, для которых можно создать расширенные свойства. Объекты разде лены на три группы: уровень 0 — самый высокий, уровень 2 — самый низкий, что образует иерархию. уровня 0 Объект уровня 1 Пользователь
Объект уровня 2
Таблица
Поле, индекс, ограничение, триггер Представление Поле, триггер INSTEAD OF Представление, Поле, индекс, триггер INSTEAD привязанное к схеме OF Хранимая процедура Параметр Правило (Rule) Значение умолчания (Default) Пользовательская Поле, параметр, ограничение функция Пользовательская Поле, параметр, ограничение функция, привязанная к схеме
Пользовательс кий тип данных Создавать и редактировать расширенные свойства можно в графи ческом интерфейсе Query Analyzer или средствами системных храни мых процедур и Синтаксис процедуры таков: [
= ]
www.books-shop.com
ГЛАВА 3;
базами
[ [
207
= ] = = ] = = ] = = ]
[ [
Как видно, при создании расширенного свойства для объектов уровня 1 или 2 нужно квалифицировать имена объектов более высо кого уровня иерархии. Для поля таблицы это будет имя самой табли цы и имя ее владельца. Сходный синтаксис используется и для двух других хранимых процедур: удаления и модификации расширенных свойств. Список расширенных свойств можно получить, вызвав фун кцию ( = ] , , , , , ,
|[
= = = = = =
] ] ] ] ] ]
Более простой путь: открыть Query Analyzer, в окне Object Browser выбрать нужный объект и, щелкнув правой кнопкой в контекст ном меню выбрать команду Extended properties. Появится диалоговое окно, где можно произвести все необходимые манипуляции (рис. 315).
www.books-shop.com
208
SQL Server 2000, Новейшие технологии
315. Средствами Query Analyzer можно модифицировать и создавать расширенные свойства объектов. Расширенные свойства можно рассматривать как робкие попытки придать объектность стандартным составляющим БД. Их примене ние позволяет стандартизировать, например, маски ввода данных для полей таблицы, альтернативные имена полей и т. п. Хотя мне кажет ся, что клиентское приложение, которое будет запрашивать всю эту информацию, прежде чем начать построение пользовательского ин терфейса или работу с реальными данными, будет дополнительно нагружать сеть и сервер. В общем, как все новое, этот аспект функ циональности должен пройти проверку временем и практикой. Взаимосвязь объектов В сложной БД важно понимать взаимосвязь объектов. Так, при уда лении объекта или пользователя из БД Вам сначала надо удалить все зависимые от него объекты. Хранимая процедура sp_depends и конст руктор графических схем отчасти решают эту задачу, но первая, как любой инструмент командной строки, недостаточно гибок, а вторая (схема) отображает только таблицы. Чтобы получить таблицу взаи мосвязи, откройте дерево объектов в ММС, щелкните правой кноп кой нужный объект и в контекстном меню выберите команду All Tasks\Display dependencies.
www.books-shop.com
ГЛАВА 3:
Управление базами данных
Рис. объектов.
209
Для сложной схемы БД важно понимать
В левой панели появившегося диалогового окна (рис. 316) ото бражаются объекты, зависимые от выбранного объекта, в правой — те, от которых зависит сам объект. Для каждого зависимого объекта указывается глубина зависимости: 1 — объект содержит непосред ственную ссылку на другой объект, 2 двумя объектами есть промежуточный, двустороннюю зависимость и т. д. Дваж ды щелкнув объект, Вы получите сведения о зависимостях для него. В раскрывающемся списке в верхней панели перечислены все объек ты БД. Анализируя зависимости, помните: очки расположены около имени представления, маленькая табличка — у имени таблицы, а пря моугольник с волнистыми линиями обозначает хранимую процедуру (рис. 317). Представление
Значение умолчания Правило (Rule)
Пользовательская Рис.
Значкисимволы для основных объектов БД.
Генерация сценариев Часто при сохранении созданного или модифицированного объекта БД Вам предлагается создать сценарий, выполняющий те же действия средствами TSQL. Для этого служит диалоговое окно (рис. 318),
www.books-shop.com
210
Microsoft SQL Server 2000, Новейшие технологии
появляющееся по щелчку правой кнопкой объекта и выбору из кон текстного меню All Tasks\Generate SQL Scripts.
318. На этой вкладке Вы указываете перечень объектов, для которых надо создать сценарии. На вкладке General Вы выбираете объекты, требующие генерации. Результаты предварительной генерации (кнопка Preview) можно со хранить в файле. Та же кнопка позволяет создать несколько сценари ев с разным составом объектов. На вкладке Formatting (рис. можно указать предварительное уничтожение, создание объектов, а также будет ли дополнительно со здан текст команд создания/удаления для всех объектов, зависимых от выбранного. Назначение флажка Generate the CREATE com mand for each (Выполнить генерацию команды CREATE для каждого объекта) очевидно. Флажок Generate the DROP com mand for each object (Выполнить генерацию команды DROP для каж дого объекта) пригодится при работе с существующей БД, когда Вам просто нужно удалить объекты и все зависимые от них. Пометив фла жок Generate scripts for all dependent objects (Создать сценарий для всех зависимых объектов), Вы избежите ситуации, когда хранимая проце дура будет создана, а связанные с ней таблицы — нет. При создании сценария, включающего зависимые объекты, код генерируется в по рядке зависимости. Стоит также выбрать флажок Include descriptive headers in the script file (Включить описательные заголовки в текст сце нария). Перед переносом объектов БД на сервер SQL Server 7.0 вы делите флажок Only script 7.0 compatible features — это гарантирует от
www.books-shop.com
ГЛАВА 3:
базами данных
211
града сообщений об ошибках. Флажок Include extended properties (Вклю чить в генерацию описание расширенных свойств) обеспечивает гене рацию команд с использованием процедур со здающих расширенные свойства объекта.
Рис. 319. Здесь можно определить дополнительные параметры форматирования создаваемого текста.
Флажки этой вкладки позволяют включить описание пользователей, триггеров и индексов.
www.books-shop.com
Microsoft SQL Server 2000. Новейшие технологии
212
На вкладке Options (рис. 320) задаются дополнительные парамет ры процесса создания сценариев. Пометив флажки в разделе Security scripting options, Вы создадите определения пользователей, их роли и права. Раздел Users не позволяет создавать сценарии для индивиду альных пользователей. Но это можно сделать при создании сценари ев для других объектов. Учтите, правда, что для создания сценария надо выбрать хотя бы один «физический» объект БД (таблицу, пред ставление и т. п.), и то, что пользователи будут создаваться с пустыми паролями: exec
Полученный сценарий можно просмотреть (рис. 321). На этой же вкладке можно установить генерацию кода создания ин дексов, триггеров, первичных и вторичных ключей. Формат текстового файла задается в разделе File format. Если Вы хотите редактировать файл вручную или использовать при пакетной обработке утилиту Isql.exe, вы бирайте формат ANSI. Формат Unicode требует программ просмотра или редактирования, поддерживающих эту кодировку (Notepad и SQL Query Analyzer чтение и сохранение в формате OEM формат использует ASCIIсимволы, и для просмотра и редактирования текста нужна утилита, способная правильно показывать подобный файл (это может быть Norton Commander или его аналог либо замечательная утилита Windows Commander). Теперь можно подумать, что делать с нулевыми паролями созда ваемых пользователей. Проблему решить довольно просто, прибег
www.books-shop.com
3:
Управление базами данных
213
к OLEинтерфейсу, предоставляемому SQL Server, — SQLDMO. Чуть позже мы познакомимся с этим набором объектов поближе. Query analyzer Хотя визуальные средства разработки уже давно стали стандартом де факто при создании приложений, лично у меня инструменты, снаб женные графическим аналогом командной строки, вызывают самые теплые чувства. Проницательный читатель уже решил, что я имею в виду Visual FoxPro. Правильно! Но не совсем. Такие же теплые чув ства вызывает у меня Query Analyzer в составе SQL Server. В книге о версии 7.0 я высказал сожаление относительно ограниченности средств разработки, предоставляемых самим комплектом SQL Server. Дей ствительно, вплоть до версии 7.0 Query Analyzer был не более чем ко мандная строка, помещенная в графическое окно, средством разра ботки его можно было назвать с большой натяжкой (с точки зрения удобства он лишь слегка опережал
Несмотря на все старания, мне не удалось показать и десятой доли новых возможностей на одной картинке. Это общий вид Query Analyzer с открытым окном Object Browser, окном поиска объектов и окном исполнения запросов. Версия 8.0 сделала значительный шаг по пути предоставления дей ствительно удобной среды разработки, хотя до полного
www.books-shop.com
Microsoft SQL Server 2000. Новейшие технологии разработчиков, привыкших к Visual Studio, все же да лековато. И все же: что мы имеем на сегодня? Рассмотрим 322. Сразу видно, что Query Analyzer здорово изменился. Так как инст румент стал гораздо богаче и, как следствие, полезнее, рассмотрим его подробнее. Левая панель называется Object Browser. Ясно, что тер мин «объект» здесь употреблен несколько вольно, но с точки зрения SQL Server 2000 список вполне очевиден. Список объектов включает все пользовательские и системные БД и составляющие их компонен ты. Для каждого объекта внутри БД показаны его базовые свойства, в том числе и зависимость одних объектов от других. Любой объект можно перетащить в панель составления запроса, вместо того чтобы набивать его имя вручную. Объекты нельзя модифицировать напря мую, как в основном административном интерфейсе ММС, но щел чок объекта правой кнопкой выводит контекстное меню, где (если это имеет смысл) есть три команды, начинающиеся со слова Script. Эти команды также имеют меню следующего уровня, и все вместе позволяют поместить в файл, буфер обмена или новое окно Query Analyzer текст примерно такого содержания: UPDATE SET WHERE <Search Этот шаблон — результат выбора команды Script Object to a New Window As/Update после щелчка таблицы Точно так же можно создать шаблон для удаления или добавления записи, созда ния, удаления или модификации объекта. Для объекта можно создать набор пользовательских свойств, о которых я говорил в разделе «Расширенные свойства Ди алоговое окно поиска позволяет найти объект определенного типа по имени или значению пользовательского свойства. Кстати, поиск поддерживает частичное соответствие, так что указание критерия или позволит найти таблицу Authors в БД Pubs. Для поиска используется уже упомянутая хранимая процедура mas ter. и Query Analyzer автоматически заменяет символ на для указания критерия поиска по неполному со ответствию. Поддерживается и символ подчеркивания. В все, как при написании условия для оператора LIKE. Кроме списка БД и объектов их составляющих, Object browser включает список основных функций TSQL, сгруппированных по на значению. Для каждой функции можно посмотреть список входных
www.books-shop.com
3:
Управление базами данных
и выходных параметров, а выбор в контекстном меню команды Script Object to Clipboard As/Execute помещает в буфер обмена шаблон типа: SELECT * FROM
>, varchar, >,
>, int, >)
что очень удобно при написании кода. В следующей версии SQL Server Query Analyzer, возможно, будет поддерживать Intellisence, как это сделано для приложений в составе Visual Studio, но пока этого нет. Было бы совсем здорово, если бы перетаскивание функции со здавало тот же самый шаблон в окне написания запроса, но пока пе ретаскивается только имя функции. Дополнительное удобство предоставляется программируемыми «горячими» клавишами. В меню Tools есть команда Customize, вызыва ющая диалоговое окно, где можно связать горячие клавиши с вызова ми часто используемых хранимых процедур. По умолчанию вызывает SP_who, a CTRL+2 — процедуру SP_Lock. Комбинаций до вольно мало (от CTRL+0 до CTRL+9), и новые заводить нельзя. Но и на том спасибо. В отличие от версии 7.0, где доступ к индексам и ста тистике был возможен по правому щелчку графического плана ис полнения, версия 8.0 получила специальные команды в меню Tools. Для создания стандартных блоков кода предусмотрена концепция шаблонов (Template). В меню Edit есть команда Insert Template, выбор которой открывает диалоговое окно с перечнем каталогов, содержа щих шаблоны кода. Сам шаблон представляет собой обычный тек стовый файл, где наряду с исполняемыми конструкциями языка име ются параметры. Выглядит это так: ) Add
Server login
sp_addlogin = = = = =
= Xpassword, sysname, N'
GO Этот код добавляется в окно Query Analyzer, и Вам остается толь ко заменить параметры на реальные значения. Чтобы облегчить эту задачу, в меню Edit есть еще одна команда — Replace Template Para meters. Она выводит диалоговое окно с всеми представленными в
шаблоне параметрами и полями для ввода реальных Инте ресно, что окно замены не делает различия между параметрами внут ри шаблона и любым текстом в формате параметра, Тип дан ных параметра, Значение умолчаниях На рис. 323 видно, что пос ледний параметр я ввел сам. Параметры могут очень пригодиться при программировании на TSQL. Вы вставляете блоки параметров, и позже Ваша процедура или триггер становятся универсальным шаб лоном, который можно сохранить именно как шаблон и использо вать многократно, не боясь забыть внести изменения везде, где надо. Шаблоны можно сохранять где угодно, но по умолчанию каталог с шаблонами располагается по адресу \Program Files\Microsoft SQL Как я уже говорил в главе при установке нескольких экземпляров сервера Setup создает один базовый каталог с набором разделяемых компонентов сервера и несколько каталогов для индивидуальных экземпляров сервера. Шаблоны считаются раз деляемым ресурсом. Окно ввода запросов и программирования поддерживает заклад ки, устанавливаемые командами в меню Edit. При сохранении кода в файле закладка не сохраняется. Как и раньше, из Query Analyzer можно вызвать мастер настройки индексов. Считается, что он должен работать лучше, чем в предыду щей версии, но я бы не стал возлагать на него особых надежд, кроме ситуации, когда у Вас есть записанный средствами SQL Profiler про филь работы сервера или Вы имеете дело со сложным запросом.
323. Параметры можно применять как в стандартных шаблонах, так и в Вашем собственном коде. Кстати о профиле. Теперь Вы можете получить профилирование кода прямо из Query Analyzer. Для этого нажмите или в меню Query выберите команду Show Server Trace. Набор дан ных, выводимой в профиле, довольно ограничен, но это может
www.books-shop.com
ГЛАВА 3: Управление базами данных
217
для быстрого анализа. Еще более интересна возможность выво да статистики о работе клиента. Это делается по Тут информация подробнее (рис.
Теперь Вы снова можете посмотреть статистику исполнения кода. Если Вы работали с версией 6.5, то знаете, что там имелась сход ная функциональность, хотя, конечно, объем информации был весь ма мал. В версии 7.0 это пропало, а теперь появилось снова, но уже в новом качестве... Философия развития однако. Теперь вернемся к списку объектов какойнибудь БД и, найдя там хранимую процедуру, щелкнем правой кнопкой ее имя. Посмотрим в самый низ контекстного меню, а там... магическое слово Debug! Те перь можно не обращаться к отладчикам Visual Studio — у нас есть собственный инструмент. Выберем эту команду, и на экране появляется диалоговое окно, предлагающее ввести входные параметры процедуры (если они есть). После ввода параметров Query Analyzer переходит в режим отладки, и тут Вы получаете вполне сносный инструмент, показывающий зна чения локальных переменных, стек вызовов, позволяющий расста вить точки прерывания (рис. 325).
www.books-shop.com
Microsoft SQL Server 2000, Новейшие технологии
218
Рис. 325.
Наконецто и на нашей улице отладчик.
Список глобальных переменных можно пополнять и к тем, что пока заны по умолчанию (они видны на рис.) добавить сколько угодно сво их (ну, не совсем своих, а из существующего списка). Очевидно, что сам принцип исполнения процедур SQL Server 2000 не позволяет мо дифицировать код на этапе исполнения, но ведь это не Visual Basic. Query Analyzer стал еще удобнее и полезнее. А дополнив его фун кциональность новыми средствами Windows 2000, мы получим впол не современную среду отладки и разработки приложений. Для тести рования Ваших БД от имени разных пользователей можно запускать Query Analyzer командой Эта команда позволяет запустить но вый процесс в контексте иного, чем текущий зарегистрированный в системе, пользователя. Так, команда SQL порож дает новый процесс, и Query Analyzer будет исполняться в контексте пользователя MyUser, зарегистрированного в домене dimaa.dom. Символы, используемые при создании графического плана Изображение Название операции Assert
Пояснение Проверка на соответствие правилам обеспечения ссылочной целостности
www.books-shop.com
3:
Управление базами данных
BookMark Lookup
219 (продолжение) Поиск закладки (bookmark) определяе мой идентификатором записи или ключом кластерного индекса
Clustered index delete
Удаление элемента из кластерного индекса
Clustered index insert
Добавление нового элемента в кластерный индекс
Clustered index scan Сканирование кластерного индекса Clustered index seek Поиск по кластерному индексу Clustered index update
Модификация элемента кластерного индекса
Collapse
Рекомбинирование расщепленных записей (Split rows) после завершения обновления
Compute Scalar
Выполнение оценки выражения
Concatenation (Конкатенация)
Сканирование и возврат множественных (Concatenation) наборов записей, часто используется в операциях UNION ALL
Constant Scan
Виртуальная основная таблица [исполь зуемая для определения представления содержащая единственное значение
Deleted scan
Сканирование специальной таблицы Deleted, используемой триггерами
Filter (Фильтр)
Отсечение записей, не соответствую щих определенному условию
Hash Match
Конвертация или хеширование входных значений и сравнение со значениями в хештаблице для поиска соответствий
Hash Match Root
Оператор координации множественных хеш операторов, расположенных непосредственно под ним.
HashMatchTeam
Множественные хешоператоры, рабо тающие совместно и использующие одно и то же поле или набор полей
Index Spool
Операция создания временного файла, содержащего набор индексируемых для последующего выполнения операции поиска (SEEK)
www.books-shop.com
SQL Server 2000, Новейшие технологии
220
(продолжение) Изображение Название операции Пояснение Операция сопровождения индекса при удалении записей из таблицы Операция сопровождения индекса при добавлении записей в таблицу Сканирование индекса для каждого значения, указанного в качестве аргумента (Argument) Операция с использованием индекса для выборки записей на основании выражения сравнения или указанного диапазона Index Spool
Операция по динамическому созданию в для получения возмож ности повторного поиска посредством SEEK вместо нового сканирования входных данных Операция сопровождения индекса при модификации таблицы Сканирование таблицы inserted, на которую указывает триггер Чтение журнала Передача одновременно более двух отсортированных наборов для выпол нения логических операций объедине ния и
(Вложенные циклы)
Parallelism
Проход для каждой записи во внешнем (левом) наборе по всему внутреннему (правому) набору; возможно для вы полнения запросов с объединением (InnerJoin, LeftOuterJoin, LeftSemiJoin и Множественные операции в тельных потоках
www.books-shop.com
ГЛАВА 3:
Управление базами данных
221 (продолжение) Сканирование таблицы, используемой в качестве параметра. Часто использу ется при выполнении операций INSERT в рамках хранимой
RemoteDelete
Удаление записи на удаленном сервере Добавление записи в таблицу на удаленном сервере Запрос на удаленный сервер
RemoteScan
Сканирование данных на удаленном сервере
RemoteUpdate
Модификация записи на удаленном сервере Оператор выполняет сканирование входного набора данных и возвращает число записей в наборе, не интере суясь самими данными. Используется в ситуации, когда процессор запросов интересует число записей, нежели данные в них.
Sequence
«Широкие» обновления, обычно при обслуживании индекса
Sort
Сортировка входного массива записей перед созданием выходного массива Выполнение агрегирования на сортиро ванном входном для функций агрегирования
TableDelete
Удаление записей из таблицы Добавление записей в таблицу
TableScan
Сканирование таблицы (если Вы полу чили такой символ, посмотрите все ли у Вас хорошо с индексами и формулировками
TableSpool
Создание временной таблицы для хранения промежуточных результатов
TableUpdate
Модификация данных в таблице
Top
Обработка и возврат только указанного числа записей
www.books-shop.com
Microsoft SQL
222
2000, Новейшие технологии
Ниже показаны графические изображения, используемые при по строении плана с использованием курсоров Изображение Название операции Dynamic
Пояснение Работа с динамическим курсором Получение записей из курсора
Keyset
Работа с Keyset курсором
Population Query
Операция пополнения рабочей таблицы при открытии курсора
Refresh query
Помещение актуальных данных в буфер курсора
Snapshot
Работа со статическим курсором
Получить информацию в текстовом виде позволяет команда SET ON — она выводит дерево исполнения, аналогич ное тому, что появляется в графическом виде, а кроме того, отобра жает такую информацию: Имя элемента
Описание Номер выражения в текущем пакете команд. Идентификатор узла в текущем запросе. Текст выражения TSQL или описание операции. В этом столбце содержится физический оператор (описы вающий реализацию алгоритма исполнения выражения) и может содержать логический оператор (описывает реля ционную операцию, используемую для выполнения запроса).
Parent
Идентификатор узла шага более высокого уровня.
PhysicalOp
Физическая реализация алгоритма для текущего узла. Используется только для строк типа
LogicalOp
Логический оператор, представляющий узел. Используется только для строк типа
Argument
Дополнительная информация о выполняемом операторе. Содержимое столбца зависит от физического оператора.
Values Список значений, представленных оператором. Это могут быть вычисляемые выражения текущего запроса или величины, полученные от внутренних механизмов исполнения запроса. Эти значения могут использоваться в дальнейшем.
www.books-shop.com
ГЛАВА 3: Управление
223
(продолжение) Оценка числа записей, которые могут быть получены в результате исполнения оператора. Оценка затрат на выполнение операций вводавывода для данного оператора. EstimateCPU
Оценка затрат процессорного времени для данного оператора.
AvgRowSize
Оценка размера строки (в оператор.
проходящей через
Оценка стоимости исполнения текущей и всех дочерних операций. OutputList
Список полей, отображаемых текущей операцией.
Warnings
Список предупреждений, относящихся к текущей опера ции. Если среди предупреждений встречается «NO значит, оптимизатор не смог использовать статистическую информацию по причине ее отсутствия. В результате оптимизатор был вынужден исходить из предположений общего характера, что вполне могло привести к построению плана, далекого от оптимального.
Туре
Тип узла. Для родительского узла каждого запроса указывается тип выражения TSQL: SELECT, INSERT, EXECUTE и т. д. Для дочерних узлов, представля ющих план исполнения, указывается тип
Parallel
Если в этом столбце 0, оператор исполняется без параллелизма; если сервер исполняет оператор с использованием нескольких процессоров, этот столбец имеет значение
Estimate Executions
Оценка числа исполнений оператора при выполнении запроса.
Часть столбцов, отображаемых при включенном режиме вывода полного плана исполнения запроса, показана ниже (рис. 326). Получить сокращенный вариант плана исполнения позволяет команда Set on, которая отображает только элементы Parent и StmtTxt.
www.books-shop.com
224
Microsoft SQL Server 2000. Новейшие
Рис. 326. Текстовое представление плана исполнения запроса занимает довольно много места, зато посмотреть значения индивидуальных полей Вы можете без мыши, а иерархическая форма представления дает достаточно хорошее отображение процесса. Прямо из панели с графическим планом исполнения можно полу чить доступ к списку индексов и статистике участвующих в зап росе. Как ни странно, но разработчики решили организовать доступ к этой информации из графического плана исполнения. Введите некото рый запрос, нажмите и щелкните правой кнопкой один из сим волов, изображающих работу с таблицами или индексами (обычно с них начинается диаграмма). В контекстном меню две команды: Manage Indexes и Manage Statistics, открывающих то или иное диалоговое окно. Так как догадаться о подобной возможности довольно трудно, в версии 8.0 аналогичные команды доступны из основного меню
www.books-shop.com
ГЛАВА 3: Управление базами данных
225
327. Диалоговое окно управления индексами. Точно такое же доступно и из административной консоли. Стоит ли вручную управлять статистикой? По ситуации. Вообще то сервер сам способен определить, создавать ли статистическую вы борку, и выполнить все необходимые действия. Если Вы откроете диалоговое окно, после того как БД была некоторое время хотя бы под тестовой нагрузкой, я практически могу гарантировать, что в списке объектов, выводимых при использовании процедуры sp_help будет строка, начинающаяся с чегонибудь похожего на Это и есть статистический набор, автомати чески создаваемый сервером. Хотя он и отображается вместе с «нор мальными» индексами, это та же статистика, известная нам по пре дыдущим версиям сервера. Ну, почти та же. Теперь размер статисти ческой выборки можно указывать при ее создании. Таблицы разме ром менее 8 Мб сервер всегда сканирует полностью. В остальных слу чаях Вы контролируете ситуацию. Создание статистики вручную вы полняется командой CREATE STATISTICS. Объем статистической выборки теперь не ограничен только одной страницей (Distribution page), как в предыдущей версии. Кроме того, статистика может быть создана как на индексированных, так и на неиндексированных по лях. Это позволяет использовать компромиссные подходы с приме нением комбинации индексов и статистики. В целом версия 8.0 об ладает значительной автономией, так как позволяет выполнять авто
матическое создание и обновление статистических выборок. Вклю чает/отключает режим автоматического обновления статистики про цедура sp_autostats. Чтобы определить, не пора ли обновить статисти ку, сервер контролирует объем изменений, сделанных над полями из состава индексного ключа или для которых собиралась статистика. Эта информация хранится в поле rowmodctr таблицы Sysindexes. Каж дый раз после обновления статистического набора значение этого поля меняется на 0. Кстати, теперь статистику можно строить и для представлений.
328. Диалоговое окно управления статистикой. Это единственное место, откуда можно до нее добраться. Все вроде хорошо, только теперь у нас нет графического интер фейса, позволяющего увидеть шаги распределения (Distribution Steps). Получить эту информацию позволяет многомудрая DBCC с парамет ром SHOW_STATISTICS. Если для таблицы Orders БД Wind мы создадим кую выборку по трем полям: CREATE STATISTICS
ON
и выполним команду DBCC SHOW_STATISTICS то получим: Statistics for collection
www.books-shop.com
ГЛАВА 3:
Управление базами данных
Updated
Rows
Rows Sampled
227 Steps
Дата Число Число записей, Число обновления записей отобранных для шагов в таблице получения статистики
3
830
830
Average Length
Columns
Плотность
Средняя длина поля
Столбцы
1.2048193Е3
4.0 14.0 18.0
OrderlD,
1.2048193Е3 1.2048193Е3
Average key length
Плотность Средняя длина ключа 1.2048193
18.0
E3
9:06РМ All density
Density
Как видите, таблица показывает избирательность (плотность) зна чений для всех возможных комбинаций ключевых полей. Далее выводится информация по индивидуальным шагам. Версия 7.0 выводила список начальных значений для диапазонов каждого шага. Версия 8.0 выводит таблицу: RANGE_ROWS EQ_ROWS RANGE ROWS Верхнее зна чение ключа в диапазоне
Число • Число записей записей в диапазоне шага, где зна чение ключа равно верхнему в диапазоне
Число уни кальных зна чений в диа пазоне, включая верхнее значение
Среднее число пов торяющихся зна чений в не включая верхнее значение (вычис ляется как / DISTINCT_ RA NGE ROWS для DISTINCT RA NGE_ROWS > 0)
10248
0.0
0 827
0.0 1.0 0.0
11076
827.0
11077
0.0
1.0 1.0 1.0
0
www.books-shop.com
228
Microsoft SQL Server 2000. Новейшие технологии
Команды DBCC INDEXINFO из версии 7.0 теперь нет, а жаль. Может, Service pack вернет ее нам. В главе, посвященной административным утилитам для работы с SQL Server 2000, Вы найдете программу, позволяющую получить све дения об избирательности индексных ключей. Возвращаясь к статистике, могу сказать, что в процессе реальной работы имеет смысл периодически анализировать статистику, кото рую сервер создал автоматически, и, возможно, создавать на ее осно ве постоянные индексы. Но как определить, насколько хороши име ющиеся индексы, не добавить ли новые и не удалить ли существую щие? Для этого имеется специальный мастер по настройке индексов — Index Tuning Wizard. Оптимизация индексов средствами Index Tuning Wizard
Рассмотрим запрос: SELECT [Order
AS
SaleAmount FROM Employees INNER JOIN (Orders INNER JOIN [Order Subtotals] ON = [Order ON = WHERE Between And
Запрос использует CREATE VIEW
[Order Subtotals] AS SELECT [Order 100))*100) AS Subtotal FROM [Order Details] GROUP BY [Order Уничтожим все индексы на всех используемых таблицах и пост роим план исполнения. Хочу сразу предупредить, что стоимость запроса и другие характерис тики отражают ситуацию на моей машине и служат исключительно для иллюстрации. На Вашем компьютере результаты могут быть иными.
www.books-shop.com
ГЛАВА 3:
Управление базами данных
При построении плана исполнения при полном отсутствии индек сов оптимизатор оценивает стоимость исполнения запроса как 0.221. Передав запрос на анализ Index Tuning Wizard, получаем такой план и стоимость запроса 0.175, это значит, что мастер по настройке индексов позволяет избежать экспериментов вслепую. Нужно отметить, что на новом плане исполнения сканирование осталось только за одной таблицей, но она столь мала, что просто не может оказать какогото существенного влияния на скорость испол нения запроса. Что же касается двух других таблиц, то для них были созданы индексы, которые оптимизатор успешно использовал. же работать с мастером? Ему надо указать БД и сервер, на кото рой она расположена. В диалоговом окне есть два флажка Keep existing indexes (Оставить все существующие индексы) и Add indexed Views (До бавить индексированные представления) и переключатель Tuning mode (Режим работы). Присутствие второго переключателя зависит от той редакции сервера, с которой Вы работаете. Корпоративная редакция и редакция для разработчика поддерживают индексированные представ ления. В таком важном деле, как оптимизация производительности, спешка ни к чему, поэтому я рекомендую снять первый флажок и поме тить третий переключатель Thorough Это позволит мастеру рассмотреть, стоит ли удалять существующие индексы и заставит тща тельнее выполнить анализ возможных вариантов
329. Здесь Вы указываете, откуда будет взята информация для анализа.
www.books-shop.com
SQL Server 2000, Новейшие технологии
230
Следующее окно мастера позволяет указать, есть ли предмет для обсуждения. Дело в том, что мастер способен чтото предложить, только если ему хватает информации. Исходным материалом может быть либо сценарий в виде файла, либо записанная трассировка средствами SQL Profiler, о котором мы говорили выше (рис. 329). Третий вариант появился в версии 8.0. Если вызвать мас тер из Query Analyzer, когда там выделен текст запроса, мастер смо жет использовать его. Имейте ввиду, что для работы мастера из среды Query Analyzer, Вам нужно обладать привилегиями роли Sysadmin. При выборе двух вариантов Вам тут же предложат указать файл нагрузки для первого переключателя, или зарегистрироваться на сервере и указать мастеру имя таблицы, в которой сохранен про филь трассировки. Выберем третий переключатель.
330.
Вот, что нам посоветовали.
Щелчок кнопки Advanced options (Дополнительные параметры) позволяет указать мастеру границы, в которых он должен оставаться с точки зрения размера индексов, числа запросов из профиля трасси ровки, максимальное число столбцов при построении индивидуаль ного индекса. Перейдя в следующее окно, Вы указываете мастеру, где у Вас рас положены данные (рис. 330). В нашем случае мастер показывает спи сок таблиц текущей базы данных (помните, мы используем выделен ный в Query Analyzer текст запроса) и предлагает выбрать те, что дол жны подвергнуться анализу.
www.books-shop.com
3:
Управление базами данных
/* Created by: Index Tuning Wizard /* 11/30/2000 /* 9:58:20 PM /* Server Name: /* Database Name: Northwind USE [Northwind]
231 */ */ */ */ */
go SET SET ARITHABORT ON SET SET ON SET ANSI_PADDING ON SET ON SET
ON ON
OFF
go DECLARE as bit BEGIN TRANSACTION SET @bErrors = 0 DROP INDEX DROP INDEX IF( = 0 ) TRANSACTION ELSE ROLLBACK TRANSACTION BEGIN TRANSACTION SET = 0 CREATE INDEX [Orders2] ON ASC, ASC, [ShippedDate] ASC ) IF( о 0 ) SET = 1 IF( = 0 ) COMMIT TRANSACTION ELSE ROLLBACK TRANSACTION Хотя никто не отнимет у администратора или разработчика права на последнее слово при проектировании БД, приятно знать, что SQL Server предлагает инструмент, способный помочь в выборе правиль ного подхода.
www.books-shop.com
232
Microsoft SQL Server 2000. Новейшие технологии
SQL DM0 В главе 2 я упоминал о SQL DMO — интерфейсе, включающем набор коллекций, несколько десятков объектов, сотни свойств и методов и позволяющем обратиться практически к любому аспекту деятельнос ти SQL Server. SQL DMO открывает доступ к функциональности SQL Server для разработчиков, пишущих не на Transact SQL, а иных язы ках программирования, способных использовать SQL Server как OLE Automationсервер. SQL DMO позволяет создавать новые объекты БД, манипулировать их свойствами и содержимым, выполнять практичес ки любые административные функции — все это в рамках привыч ной объектной модели. Последняя представляет собой дерево объек тов, и головным является объект Application (рис. 331). Объект Ap plication представляет собой экземпляр SQLDMO, инициализирован ный в рамках конкретного приложения, но настоящую ценность представляет объект следующего уровня — сам SQL Server. SQLServer — объект самого высокого уровня, с него начинается вся работа. Уровнем ниже расположена коллекция объектов Databases, включающая все объекты, которые реально присутствуют в БД: табли цы, правила, хранимые процедуры, триггеры и т. д. Одна из самых очевидных областей применения SQL DMO — созда ние собственных мастеров, помогающих неподготовленному пользова телю или недостаточно квалифицированному администратору выпол нять разного рода работы без особого Интересно, что все обращения к объектам SQL DMO транслируются в вызовы соответствующих системных хранимых процедур. Это хорошо видно при использовании утилиты трассировки SQL Server Profiler.
www.books-shop.com
ГЛАВА 3:
c. к
Управление базами данных
Объектная модель SQL DM0 позволяет компонентам и объектам сервера.
233
доступ
www.books-shop.com
234
Microsoft SQL Server 2000. Новейшие технологии
Создание БД средствами SQL DMO Ниже показана коллекция Databases и ее объекты (рис. 332), свой ства и методы которых позволяют создавать новые БД таблицы, хра нимые процедуры и пр.
332.
Коллекция объектов Databases.
Давайте создадим новую БД. Я не стану творить очень сложный интерфейс — нас интересует скорее подход, нежели красота. Я создам форму с единственной кнопкой. По щелчку кнопки будет создана БД, журнал транзакций для нее, одна и хранимая процедура. Private Sub Dim SQLServer As New
www.books-shop.com
базами данных
ГЛАВА 3:
Dim Dim Dim Dim Dim Dim
235
NewDatabase As New NewFilegroup As New NewFile As New NewLog As New NewTable As New NewColumn As New NewSproc As New
= = = "SQLDMO"
= NewLog. PhysicalName = = 2 '* Стандартная группа с именем PRIMARY создается автоматически '* Метод необходим только при создании '* новой группы NewFile NewLog
= "SQLDMO" = = = 10 NewColumn NewDatabase
NewTable = Одна из особенностей создания хранимой процедуры заключается в том, что имя процедуры, определяемое свойством name, должно совпадать с именем, определяемом в тексте выражения CREATE PROCEDURE тела процедуры свойство Text = "Create procedure SQLDMOProc as" + Chr(13) = + текст хранимой процедуры, создаваемой средствами SQL + Chr(13) = + вторая строка хранимой создаваемой средствами SQL DMO"
End Sub Ⱦɚɧɧɚɹɜɟɪɫɢɹɤɧɢɝɢɜɵɩɭɳɟɧɚɷɥɟɤɬɪɨɧɧɵɦɢɡɞɚɬɟɥɶɫɬɜɨɦ%RRNVVKRS ɊɚɫɩɪɨɫɬɪɚɧɟɧɢɟɩɪɨɞɚɠɚɩɟɪɟɡɚɩɢɫɶɞɚɧɧɨɣɤɧɢɝɢɢɥɢɟɟɱɚɫɬɟɣɁȺɉɊȿɓȿɇɕ Ɉɜɫɟɯɧɚɪɭɲɟɧɢɹɯɩɪɨɫɶɛɚɫɨɨɛɳɚɬɶɩɨɚɞɪɟɫɭ[email protected]
Microsoft SQL Server 2000, Новейшие технологии
236
Этот код будет прекрасно работать как с версией 7.0, так и с SQL Server 2000. Если же Вы программируете только для SQL Server 2000, то можете задействовать новые объекты и Database2, под держивающие дополнительную функциональность новой версии. Так, объект поддерживает набор свойств и методов, кото рых нет в предыдущей версии: Свойства Имя свойства
Описание EXECUTE master.dbo.xp_ Возвращает логическое True/False в зависи мости от того, стартует ли сервис одновременно с операционной системой или требует ручного запуска. OUTPUT,
PID
Идентификатор процесса
select (N'ProcessID')
Collation
Имя правила разбора строк для сервера.
select
Уровень ПО, здесь имеется в виду бета либо финальная версия и т. д.
select serverproperty (N'productlevel')
Имя экземпляра сервера. Для экземпляра умолчания (Default instance) возвра щается пустая строка.
select serverproperty
Имя службы операционной системы.
select serverproperty
Возвращает логическое True/False в зависимости от того, где установлен сервер: в кластерной конфигурации или нет.
select serverproperty (N'IsClustered')
Возвращает логическое True/False в зависимости от того, установлен ли сервис полнотекстового поиска.
select serverproperty
InstanceName
IsClustered
Installed
www.books-shop.com
ГЛАВА 3:
Управление базами данных
237
(продолжение) Имя бюджета, под которым EXECUTE master.dbo.xp_ стартует instance_regread N'HKEY_
OUTPUT, Как видите, часть информации хранится в таблицах самого серве ра, часть берется из системного реестра. Методы Имя свойства
Описание
AttachDBWith Позволяет подключить существующую БД, состоящую из единствен ного файла. Возвращает список уровней совместимости, поддержи ваемых сервером. Detached Возвращает информацию об отключенном от сервера файле. Возвращает список файлов данных, составляющих отк люченную от сервера БД. Возвращает список поряд ков сортировки, поддер живаемых сервером. ListDetached Возвращает список файлов журнала, входящих в отклю ченную от сервера БД Исполняет переданную ExecuteWith строку как команду. Messages2 Возвращает список с име нами установленных Instances экземпляров сервера.
Описание Возвращает логическое dbcc в зависимости от того, является ли переданное в качестве параметра имя файла основным для БД.
Mode
0)
Возвращает режим рации, принятый на указан ном сервере по умолчанию. Возвращает то же, что и Чем они отличаются? Я не понял.
Аналогично
Объект Database2 поддерживает следующий набор дополнитель ных свойств и методов:
Свойства Имя свойства
Описание
Collation
Возвращает имя порядка сортировки БД.
exec N'db',
IsDeleted
Current
Возвращает логическое Trae/False, позволяющее определить, действительно БД присутствует на сервере или мы получаем кеширо
exec — еще одна недоку ментированная процедура
Текущий уровень совмес
exec sp_dbcmptlevel
Размер БД в килобайтах.
select * (8192.0/1024.0) from
www.books-shop.com
ГЛАВА 3: Управление базами
239
Методы Имя свойства
Описание Выполняет проверку лостности страниц ной БД, не тестируются некластерные индексы пользовательских таблиц. Проверяет синтаксис вила, не создавая его.
Выполняет проверку це лостности указанной БД. CheckTables Выполняет проверку це лостности страниц данных WithResult таблиц указанной БД. CheckCatalog Выполняет проверку це WithResult лостности таблиц систем ного каталога указанной БД. CheckTables Выполняет проверку целост WithResult ности для всех таблиц. CheckDefault Проверка синтаксиса описания значения умолча Syntax ния, не создавая его. IsObjectDeleted Проверяет, был ли указан ный объект удален из БД
dbcc checkalloc (N'Clockto noindex) with tablere
set noexec on create rule [TestRule] as IN Т. е. это обычная команда Create Rule, только предва ренная отключением исполнения. dbcc checkalloc with tablere NOJNFOMSGS dbcc noindex) with tableresults, NOJNFOMSGS dbcc checkcatalog with table results, NOJNFOMSGS dbcc checkdb with tablere sults, NOJNFOMSGS Аналогично проверке син таксиса правила. select count(id) from sys objects where name = N'TestRule' and (uid) = and type = N'R'
www.books-shop.com
Microsoft SQL
2000, Новейшие технологии
Заключение Новые свойства объектов БД позволяют строить более гибкие систе мы. Мощная модель объектов SQL DMO открывает неограниченные возможности по созданию административных расширений как в рам ках Ваших собственных приложений, так и в качестве дополнений к административной консоли ММС. Более того, часто возникает воп рос: как сделать ту или иную стандартную операцию, например, под считать число записей в таблице или проверить наличие объекта в БД? Если не с кем посоветоваться, запустите утилиту профилирования, создайте пару объектов и, вызывая их методы, посмотрите, что предлагают сами разработчики Microsoft. В следующей главе я расскажу, как Ваше богатство защитить от разного рода любопытных глаз и жадных рук. Речь пойдет о безопасности.
www.books-shop.com
Глава 4
Управление
системой
безопасности
При создании любой системы, информацией более одного пользователя, надо позаботиться о разграничении доступа. Прочность возводимых барьеров зависит от того, насколько серьез ными могут быть потери при несанкционированном доступе к кон фиденциальной информации. Однако вопросы защиты не ограничи ваются такой ситуацией, когда некий злодей крадет из Вашей БД но мера кредитных карточек и пароли. Помимо откровенных негодяев, есть и честные работники, которые не очень задумываются о послед ствиях выполняемых им запросов и не хотят учитывать интересы кол лег, или просто любители рискованных экспериментов. В любом случае система, использующая в качестве информацион ного хранилища БД на SQL Server, должна быть написана с учетом того, что жизнь гораздо разнообразнее, чем кажется разработчику или администратору. Пользователь должен видеть только то, что имеет право видеть, изменять только то, что разрешено, и выполнять опе рации над БД только в рамках своих прав. Расчет на добрую волю или поголовную грамотность до добра не доведет. К счастью, система безопасности и разграничения доступа SQL Server 2000 позволяет сделать очень многое для того, чтобы админис тратор более или менее спокойно спал по ночам. Обзор системы безопасности SQL Server 2000 В версии 8.0 механизм проверки довольно прямолинеен и реализова ны две схемы Первая — средствами Windows (Integ rated security), когда сервер доверяет пользователю, говорящему, что он такойто. Считается, что если этот пользователь уже зарегистри ровался в сети, он прошел необходимые проверки. Здесь я имею в
www.books-shop.com
242
Microsoft SQL Server 2000, Новейшие технологии
виду, что сервер не пытается дополнительно проверить, что пользо ватель именно тот, за кого он себя выдает. Проверки на доступ к са мому серверу, БД и объектам внутри них сервер все равно выполняет. Второй режим — Standard security, когда сервер не принимает во вни мание регистрацию в домене и требует дополнительно ввода иденти фикатора пользователя и пароля.Список пользователей, имеющих право на доступ к серверу (любым из двух способов) хранится в таб лице Помимо прав, назначаемых индивидуальным пользователям, SQL Server 8.0 позволяет разрешить доступ сразу всей домена Windows. Если пользователь — член группы Sales Russia — хочет подключиться к SQL Server и при этом в Syslogins есть запись о том, что группа Russia\Sales имеет доступ к серверу, счи тается, что члены группы также имеют доступ к серверу. Dima в силу принадлежности к группе Sales имеет право на доступ к SQL Server, но при этом сервер видит его именно как Russia\Dima, и все действия этого пользователя можно отследить. Независимо от его уровня привилегий в домене (администратор или нет) SQL Server будет знать его как Russia\Dima. И только если в Syslogins нет записи ни для Russia\Dima, ни для Russia\Sales, в доступе будет отказано.
Контроль прав доступа Контроль прав доступа подразумевает проверку того, что может де лать пользователь, получив доступ к серверу (обращаться к той или иной БД, объектам в ее составе и т. На диаграмме (рис. 41) список прав доступа связан с таблицей Sysprotects как одинкомногим, таблица Sysprotects в свою очередь связана как одинкомногим с таблицей Sysobjects. В итоге получаем связь типа многиекомногим, позволяющую определить права пользо вателя на доступ к объектам
Рис. 41. Связь таблиц, используемых для хранения информации о правах пользователя.
www.books-shop.com
ГЛАВА 4;
Управление системой безопасности
Таблица Sysprotects хранит сведения о том, что у такогото пользо вателя есть доступ к такомуто объекту. Sysobjects содержит данные обо всех объектах БД. Какая же информация хранится для пользова теля в версии 8.0? Проверенный и получивший доступ к серверу пользователь авто матически подключается к БД, назначенную ему по умолчанию. Если при создании нового идентификатора БД, выбираемая по умолчанию, не указана, назначается Master. В рамках базы пользователь должен иметь набор прав, позволяющих ему выполнять действия с ее объектами. Даже не получив принудительно назначенных прав, пользо ватель всегда обладает правами, определенными для роли Public. (О ролях мы поговорим немного позже. Пока же достаточно сказать, что пользователь получает некоторый набор прав умолчания, позволяю щих ему выполнять самые основные действия с объектами БД.) Следует отличать право доступа к самой БД от права обращения к объектам внутри нее. Это самостоятельные права, и обладание досту пом к объекту БД не значит, что он имеет доступ к самой БД. Допус тим, пользователь Russia\Dima, член группы Sales, подключается к БД Pubs, и администратор дает ему одному право на работу с некоторой таблицей. В Syslogins для Dima нет индивидуальной записи, так как его права доступа к SQL Server наследуются из его принадлежности к группе Sales. Теперь удалим Dima из группы Sales. Что получим? Он сохраняет право доступа к таблице, но теряет доступ не только к БД, но и к серверу — ведь ранее это право было реализовано через член ство в группе Sales. И то, что он имеет право на доступ к таблице, ему ничего не дает. Владелец таблицы может передать право доступа толь ко к таблице, право доступа к БД — только ее владелец, доступ к сер веру может разрешить только системный администратор или адми нистратор по безопасности. При определении прав доступа сервер может обратиться к инфор мации о группах Windows NT и не требует наличия записи для инди видуального пользователя. В Sysusers хранятся два элемента: один описывает права доступа к БД, другой — права доступа к ее объектам. Если пользователя проверяет Windows NT, то SQL Server не делает особой разницы между индивидуальным пользователем и группой Windows NT. Есть разница между версиями 6.5 и 8.0 и с точки зрения «свежести» используемой SQL Server информации о принадлежности к группе Windows NT. Менеджер системы безопасности (Security manager) в вер сии 6.5 создавал записи в Syslogins, и данные хранились статически. При удалении из группы Windows NT или добавлении в нее нового пользователя SQL Server уведомлений не получал. В версии 8.0 инфор
www.books-shop.com
244
Microsoft SQL Server 2000, Новейшие технологии
мация о членстве пользователя передается при подключении к SQL Server и всегда содержит самые свежие данные. Проще говоря, инфор мация о принадлежности пользователя к группе вообще не Как SQL Server проверяет права доступа Выше я вкратце остановился на механизме проверок прав доступа. Давайте разберемся, кто что делает, чтобы убедиться, что пользова тель действительно имеет право на работу с сервером. Подключение под именем пользователя Windows NT Если при подключении к серверу клиентское приложение открывает доверительное соединение, серверу передается имя группы, к которой принадлежит пользователь, и имя его учетной записи. Так как клиент применяет доверительное соединение, сервер знает, что тот уже про шел проверку и получил право работать в сети. Сервер ищет в табли це Syslogins запись с упоминанием пользователя или группы, к кото рой он принадлежит. Если таковая найдена, пользователь получает доступ к серверу. Сервер не проверяет пароля — это дело Windows. Представим, группу доменов, связанных доверительными отношени ями. Если пользователь регистрируется в одном из доменов, он полу чает право доступа ко всем SQL Server, установленным в группе до менов. Если он прошел регистрацию в домене, не связанном довери тельными отношениями с SQL и хочет подключить ся к серверу, его попросят ввести имя и пароль для второго домена. Интегрированная система проверки доступа обеспечивает большую надежность системы безопасности, чем проверка прав средствами SQL Server. Подключение под именем пользователя SQL Server При проверке прав доступа собственными средствами SQL Server ищет в таблице Syslogins запись с упоминанием об идентификаторе, введенном пользователем, и, обнаружив ее, сравнивает введенный пароль с хранящимся в таблице. Если идентификатор найден и па роль соответствует записанному ранее, пользователь получает доступ к серверу. Что дальше Дальше надо проверить, какими правами доступа к БД, ее объектам и выполнения действий над объектами облает пользователь, получив ший доступ к серверу. Доступ к БД организуется установлением связи идентификатора пользователя (Login) и учетного имени (User account)
www.books-shop.com
ГЛАВА 4:
системой безопасности
245
в БД. Учетное имя может быть создано на основании имени группы Windows NT, имени учетной записи в домене Windows NT, идентифи катора индивидуального пользователя SQL Server. Если идентифика тор не связан с учетным именем, а пользователь пытается подклю читься к БД, сервер проверяет, имеется ли в этой БД учетное имя guest. Да — пользователь получает право на работу под этим именем в рамках прав, определенных для guest, нет — выводится сообщение об Учетные имена и роли идентифицируют пользователя в рамках конкретной БД и определяют владение объектами и права на испол нение SQLкоманд. Когда пользователь посылает команду серверу, тот обращается к таблице чтобы проверить его права на выполнение соот ветствующих действий. Если необходимые права есть, команда вы полняется, в противном случае сообщается об ошибке. Стандартные идентификаторы пользователя Установив SQL Server, Вы получаете два стандартных идентификато ра: SA и BUILTIN\Administrators. SA попрежнему имеет абсолютные права, он приписан к роли sysadmin. Этот идентификатор сохранен для совместимости с другими версиями, и лучше его вообще не ис пользовать. Идентификатор BUILTIN/Administrators обеспечивает доступ к серверу всем членам административной группы Windows NT. Если Вы не хотите, чтобы сетевые администраторы имели доступ к серверу исключите этот идентификатор из роли sysadmin либо запретите им доступ к серверу и решайте вопрос доступа индивидуально для каж дого конкретного человека. Исключение идентификатора BUILTIN/ Administrators из роли sysadmin оставит им доступ на сервер, но дос туп к БД будет выполняться под учетным именем SA Повторю: применение SA лучше ограничить только приложения ми, созданными для версии 6.x с жестко прописанными соединения ми, использующими этот идентификатор. Для приложений, рассчи танных на версии 7.0 или 8.0, больше подойдут заново созданные идентификаторы, приписанные к группе Sysadmin. Стандартные учетные имена В новой БД всегда создаются два стандартных учетных имени: dbo и guest.
Microsoft SQL Server 2000, Новейшие технологии dbo При работе с БД учетное имя dbo ставится в соответствие иденти фикатору Любой объект, созданный системным администрато ром, автоматически передается во владение пользователю dbo. Под системным администратором я имею в виду не только SA, но и любого пользователя с соответствующими правами. Учетное имя dbo нельзя удалить из БД. Guest
Учетное имя guest применяется для допуска к БД пользователей, не имеющих собственного учетного имени в рамках БД. Чтобы иден тификатор пользователя получил в соответствие учетное имя guest, должны быть выполнены два условия: • пользователь имеет доступ к серверу, но не имеет собственного учетного имени в самой БД; • в БД зарегистрировано учетное имя guest. Как и любое другое, учетное имя guest может получить набор прав. Оно может быть удалено из БД, кроме Master и где оно все гда должно присутствовать, чтобы пользователи могли исполнять си стемные хранимые процедуры. Роли Понятие роли (Role) появилось в версии 7.0. Роль — это именован ный набор прав в рамках сервера или конкретной БД. До известной степени роль похожа на группы Windows NT. Термин «роль» известен только SQL Server и применяется затем, чтобы не вносить путаницы с группами Windows NT. Доступа к БД роль не обеспечивает. Это свя зано с тем, что пользователь в составе роли сначала должен подклю читься к БД и только потом можно проверить его принадлежность к роли. В то же время информация о принадлежности к группе NT при ходит вместе с пользователем, и сервер узнает ее на самом раннем этапе подключения. Роль может включать несколько групп NT. За мечу: SQL Server не имеет никакого отношения к администрирова нию собственно пользователей и групп Windows NT — сервер просто обращается к существующей информации. В домене группы NT могут быть организованы иерархически: одна группа включает другую, та в свою очередь входит в третью и т. д. Когда информация о группе приходит при подключении пользовате ля, сервер видит плоскую модель. Ему нет дела до взаимодействия между группами NT — достаточно того, что пользователь — член группы Sales и в то же время — группы finances. Сведения о принадлежности к группам Windows NT заметно об легчают глобальное администрирование SQL Server. В созданную в
www.books-shop.com
ГЛАВА 4:
системой
247
домене группу администратор включает тех, кто должен иметь право администрирования SQL Server, наделяет эту группу соответствующи ми правами на сервере и все дальнейшие действия выполняет с груп пой. При этом на SQL Server изменений не происходит. Группы NT и роли SQL Server могут быть связаны с правами доступа к объектам БД. Роли SQL Server хранятся и управляются сервером. NT ничего о ролях «не знает». Роль может включать пользователя NT, группу NT, пользователя SQL и другие роли. Если администрирование средства ми групп Windows NT кажется неудобным, можно использовать толь ко роли SQL Server. Можно создавать собственные роли и все адми нистрирование выполнять средствами SQL Server. Сведения обо всех, кто имеет право на работу с сервером, права на доступ к БД и их объектам, хранится в наборе таблиц (рис. 42).
Рис. 42. Список системных таблиц, используемых для проверки прав доступа любого уровня.
Наряду с ранее известными именами, такими как (1 на сервер), Sysobjects, Sysprotects, Sysusers (есть в каждой БД), появилась таблица с данными о принадлежности пользователя к роли (ролям). Принадлежность к той или иной группе NT не хранится и обновляется при каждом подключении к серверу. А вот принадлеж ность к ролям хранится на постоянной основе в таблице Sysmembers. Когда же использовать группы NT, а когда роли SQL Server? В первую очередь это зависит от принципов Если администрирование доменов отделено от администрирования БД, выбирайте роли вместо того, чтобы просить у администратора сети
www.books-shop.com
248
Microsoft SQL Server 2000, Новейшие технологии
создать ту или иную группу. В небольшой фирме, где роль сетевого администратора часто совмещена с ролью администратора имеет смысл опираться на группы — SQL Server все равно. Для определения наборов привилегий, точно области ответственности пользователя используйте роли. При уста новке версии 8.0 создаются несколько стандартных ролей: Роль
Дает право
системный выполнять любые действия на администратор конкретном сервере. — администратор назначать параметры конфигурации сервера сервера, останавливать сервер. — администратор ... присоединять серверы и исполнять установки некоторые расширенные хранимые процедуры. — администратор управлять именами системы безопасности Processadmin — администратор управлять процессами, процессов в рамках SQL Server. Dbcreator — создатель БД ... создавать и модифицировать БД. — администратор управлять файлами БД. файловой системы — администратор ... исполнять команды BULK INSERT; массивной загрузки данных роль появилась в версии 8.0. Эти роли представлены на уровне сервера. Сведения о принадлеж ности к серверным ролям хранятся в таблице в полях sysadmin, securityadmin, setupadmin, processadmin, diskadmin, dmin. Если значение поля равно 1, указанный идентификатор вклю чен в состав соответствующей роли. Набор прав роли sysadmin охватывает все остальные роли (очень напоминает то, что мы имели для пользователя SA в версиях 6х). Ос тальные роли обеспечивают гораздо более детальное разделение уров ней доступа в соответствии с Вашими задачами. Следует иметь в виду, что члены этой роли всегда ассоциируются с пользователем dbo. По смотрим, как это сказывается на работе с сервером: =
=
=
GO USE test
www.books-shop.com
ГЛАВА 4:
Управление системой безопасности
249
GO = GO GRANT CREATE TABLE TO AdminlnTest GO
=
Теперь новый пользователь подключается к серверу и создает таб лицу: CREATE TABLE Посмотрим, что хранится в таблице Sysobjects: SELECT
FROM Sysobjects WHERE name LIKE
Имя объекта
Идентификатор владельца
testl Идентификатор соответствует нашему пользователю. Закроем соединение и включим пользователя в роль SysAdmin. После чего снова подключимся к серверу и создадим еще одну таблицу. CREATE TABLE test2 Еще раз посмотрим содержимое Sysobjects: Имя объекта
Идентификатор владельца
Testl Test2
11
А пользователь с идентификатором 1 — это уже dbo. У Вас могут возникнуть проблемы, если приложение рассчитывает, что ему пред стоит работать с таблицей, созданной определенным пользователем, а его уже после создания соответствующих объектов включили в роль К таблице Testl надо обращаться как SELECT * FROM а к таблице Test2 — без указания владельца, так как по умолчанию подразумевается dbo. Что из всего сказанного может следовать? Жизнь будет проще, если Вы будете создавать объекты только от имени dbo. Это тем более верно, если учесть, что некото рые утилиты также подразумевают этого пользователя в качестве вла дельца и могут выдавать ошибки. Еще одна проблема с идентифика торами в том, что при создании новому пользователю присваивается идентификатор системы безопасности (Security ID — ассоции
www.books-shop.com
Microsoft SQL Server 2000, Новейшие технологии с пользовательским идентификатором. Теперь представим, что нам надо переместить БД с одного сервера на другой. Мы на другом сервере соответствующий идентификатор пользователя переносим БД и получаем целый ворох проблем, связанных с тем, что пользователь вроде бы есть, а вроде бы и нет. Подобная ситуация может возникнуть и при восстановлении страховочной ко пии на другом сервере. Дело в том, что БД хранит имя пользователя и связанный с ним идентификатор, но созданный раньше и на другом сервере. На текущем сервере тот же идентификатор пользователя име ет иной SID. В итоге пользователь опознается по имени, но не может быть правильно интерпретирован системой безопасности. Разрешить такого рода проблем может системная процедура В числе параметров она принимает SID пользователя, учетное имя в БД и синхронизирует их идентификаторы безопасности. ПРИМЕЧАНИЕ Если Вы ранее использовали для поиска имени пользователя, рекомендуется заменить все эти ссылки новым иденти фикатором — SID. SUID поддерживается только в целях обратной со вместимости и требует от сервера гораздо больше усилий при поиске. SUID может значительно замедлить исполнение Вашего кода. Каждая роль может включать один или группу идентификаторов, можно также сгруппировать роли для создания точной схемы ответ ственности, необходимой в организации. SA низведен до уровня обычного идентификатора и принадлежит роли sysadmin. Принадлежность к этой роли дает ему те же права, что и сейчас. Важно, что наличие идентификатора SA не означает абсо лютной необходимости его применения в том же объеме, как в вер сии 6х. Вообще гораздо лучше создать идентификатор, соответствую щий реальному человеку, и дать ему некий набор прав. Если не хоти те иметь в системе пользователя с абсолютными правами, не приме няйте роль sysadmin — дайте конкретным людям менее «мощные» роли. Помимо стандартных ролей уровня сервера, для каждой создавае мой БД создается набор ролей, видимых в рамках этой базы. Ниже дан перечень стандартных ролей на уровне БД. В отличие от роли на уровне сервера Вы можете создать сколько угодно ролей БД. Добавив роли в базу Model, Вы сможете создавать новые роли одновременно с новыми БД.
www.books-shop.com
4:
Управление системой
Роль
251 Дает право
— владелец БД
db_accessadmin — администратор прав доступа
db datareader — «читатель» db datawriter — «писатель»
— администратор объектов БД — админист ратор системы безопасности в рамках БД db_backupoperator — оператор, создающие резервные копии
... выполнять действия, позволенные членам любой другой роли БД и других работ по сопровождению и конфигурированию БД. ... добавлять в число пользователей БД группы Windows NT, пользователей Windows NT и пользователей SQL Server. читать любую пользовательскую таблицу в БД. добавлять, модифицировать и удалять данные из любой пользова тельской таблицы в БД. добавлять, модифицировать и удалять объекты в БД. управлять ролями и членами ролей SQL Server и правами на исполнение выражений и доступа к объектам БД. ... создавать резервные копии БД. ... модифицировать схемы БД, но не читать информацию в БД. Не имеет права модифицировать информацию в БД.
Помимо перечисленных в таблице стандартных ролей, есть еще роль Public. Ее обсудим подробнее. Public Public — специальная роль на уровне БД, к которой приписаны все зарегистрированные в базе пользователи. Эта роль ассоциируется с набором прав, передаваемых по умолчанию любому пользователю БД. В состав Public нельзя принудительно включать пользователей, дру гие роли и группы, так как они и так автоматически попадают в нее. Public присутствует во всех пользовательских базах, а также в Master, Msdb, Tempdb, Model. Уничтожить эту роль нельзя. Если пользователь подключается к серверу, то без назначения ему дополнительных прав, перечень допустимых действий (определяемых правами, назначенными для роли Public) весьма ограничен. Он мо
www.books-shop.com
Microsoft SQL Server 2000,
технологии
жет выполнять действия, не требующие прямого разрешения, вроде Print, просматривать системные таблицы и исполнять некоторые хранимые процедуры для получения информации из базы Master и пользовательских БД, к которым имеет доступ. Под именем guest та кой пользователь может получить доступ к любой БД, где зарегист рировано учетное имя guest. Есть также несколько неявных (Implicit) ролей, таких как владелец объекта (Object owner). Например, создатель таблицы приобретает на нее определенный набор прав. Поскольку эти права нигде специаль но не хранятся, мы говорим о неявной роли. Прикладная роль Каждое приложение может исполняться как в рамках стандартной роли или индивидуального учетного имени, так и в рамках приклад ной роли (Application role). Стандартные роли не позволяют создать защищенной среды, которая иногда может требоваться конкретному приложению. Действительно, серверу безразлично, кто именно, при ложение или человек, обращается к данным. Использование приклад ной роли исключает неавторизованный доступ вне рамок этого при ложения. Прикладная роль имеет ряд принципиальных отличий от стандар тных ролей: • она не имеет членов, активизируется только из приложения для пользователя, работающего в нем; это позволяет предоставлять ему определенный набор прав, действующий только на время ра боты с приложением; • чтобы ее активизировать, приложение должно передать серверу пароль; • при ее активизации пользователь теряет все привилегии, не опи санные в этой роли, до момента выхода из приложения. По окончании работы с приложением пользователь отключается от сервера и при новом подключении, уже иными средствами, полу чает назад все свои права. Если пользователь работает с разными специализированными ро лями, приложение, активизирующее роли, должно выполнять необ ходимое переключение. Активизация прикладной роли После подключения к серверу с применением разрешенного иденти фикатора клиентское приложение должно выполнить хранимую про цедуру sp_setapprole, чтобы активизировать связанные с ролью права.
www.books-shop.com
ГЛАВА 4: Управление системой безопасности
253
Эта процедура может быть выполнена только как самостоятельная команда и не может применяться в другой хранимой процедуре или в пользовательской транзакции. sp_setapprole Применяя прикладную роль, имейте в виду, что: приложение обязано передать пароль для активизации роли (это единственный тип роли, требующий пароля); область видимости прикладной роли — только текущая БД; пере ключившись на другую, пользователь может исполнять действия над ее объектами в рамках обычных разрешений, относящихся к этой базе; прикладную роль, активизированную хранимой процедурой sp_ setapprole, нельзя отключить в текущей БД до выхода пользовате ля из SQL Server. Системные хранимые процедуры, необходимые для манипулиро вания прикладными ролями, таковы: Системная хранимая процедура
Описание Создает новую прикладную роль в текущей БД.
sp_dropapprole
Удаляет существующую прикладную роль из текущей БД. Изменяет пароль для прикладной роли в текущей БД.
Допустим, доступ к БД с таблицей Jobs может иметь только спе циально написанное приложение. Администратор создает приклад ную роль с именем pubsapp. Этой роли разрешается доступ к указан ной таблице, остальные пользователи такого права не получают. ) Пользователь подключается к серверу и пытается выполнить ) команду в контексте собственных прав доступа select * from ) Так как пользователь работает в контексте роли Public, ) он получает отказ Server: 229, Level 14, State 1 SELECT permission denied on object database owner ) Приложение (не пользователь) активизирует роль exec sp_setapprole
www.books-shop.com
Microsoft SQL Server 2000, Новейшие технологии
254
) Теперь соединение работает в контексте роли pubsapp, ) и та же команда выполнится успешно select * from 1 New Hire Job not specified 2 Chief Executive Officer
10 200
10 250
14 Designer 25 100 (14 row(s) affected)
43.
Доступ к таблице Jobs разрешен только роли pubsapp.
Типы разрешений SQL Server поддерживает разрешения на выполнение SQLвыражений (Statement permission), разрешения на работу с объектами (Object permission) и предполагаемые разрешения (Implied permissions). Разрешение на выполнение SQL+выражений Для создания БД или объекта в ней необходимо разрешение на испол нение SQLвыражений. Права на исполнение такого выражения, как CREATE DATABASE, распространяются на само выражение, а не на
www.books-shop.com
ГЛАВА 4:
системой
255
определенный объект БД. Разрешить его выполнение могут только члены ролей sysadmin, или Важно определить, кто из пользователей и члены каких ролей будут обладать правом создания объектов БД. Рекомендуется давать такое разрешение только членам стандартных ролей и db_ddladmin. Ограничив круг таких пользователей, Вы избежите проблем в том слу чае, когда владелец объекта удален из БД или владелец хранимой про цедуры (или представления) не владеет таблицами, на которые ссы лается хранимая процедура или Если правом на создание объектов БД обладает слишком много пользователей и ролей, цепочка владения может слишком усложнить ся. Например, одна группа владеет таблицами, другая — создает хра нимые процедуры и представления. Чтобы задействовать хранимую процедуру или представление, пользователь должен получить права как от владельца хранимой процедуры, так и от владельца В итоге цепочка владения оказывается Решить проблему с разорванной цепочкой владения поможет сис темная хранимая процедура позволяющая ме нять владельца объекта: owner Менять владельца объекта могут только роли db_owner, ddladmin и Изменив владельца объекта, все сценарии и пакет ные файлы, ссылающиеся на соответствующий объект, нужно от корректировать, так как SQL Server автоматически не меняет ссыл ки Разрешение на действия с Разрешения на действия с объектами определяют набор прав пользо вателя при работе с данными или исполнении хранимых процедур. Разрешение на работу с таблицами и представлениями
Такое разрешение позволяет исполнять команды SELECT, INSERT, UPDATE и DELETE для таблицы или Разрешение на доступ к определенным полям
Разрешения на команды SELECT, UPDATE и ссылки REFERENCES можно дать с точностью до индивидуальных полей таблицы. Когда пользователь добавляет запись в таблицу с ограничением (Constraint) FOREIGN KEY или модифицирует поле с таким же ог раничением, SQL Server должен проверить, что данные в соответ ствующих полях не нарушают наложенных Для этого
у пользователя должно быть право на исполнение команды для таблицы, на которую установлена ссылка, или разрешение RE FERENCES для поля. Разрешение на исполнение хранимых процедур Для самой хранимой процедуры существует только одно разрешение EXECUTE. Предполагаемые разрешения Некоторые действия позволено выполнять только пользователям, включенным в определенные стандартные роли, или владельцам объектов БД. Часто права таких ролей нельзя передать за пределы роли, а значит, тех, кому эти права нужны, следует включить в состав роли. Например, право конфигурировать установку SQL Server — пре рогатива членов стандартной роли сервера и передать его нельзя. Разрешения, которыми обладает владелец объекта Владельцы объектов БД также получают определенные права в силу того, что они владеют объектом. Так, владелец таблицы или член группы, владеющей таблицей, может выполнять над этой табли цей любые действия и управлять разрешениями для других пользова телей. Команды управления правами доступа Каждый пользователь, с точки зрения системы разграничения досту па, пребывает в одном из состояний: он имеет право на выполнение некоторых действий; 2. ему запрещено выполнять некоторые действия; 3. не имеет явно выраженных запретов или разрешений. Команда
Состояние записи
Описание в таблице
GRANT DENY
Положительное — Grant Отрицательное — Revoke
Может выполнять Не может выполнять действия, и права, обеспечиваемые в рамках роли, этого изменить не могут.
REVOKE
Ничего (отнимает су ществующее назначение)
Не может выполнять действия самостоятельно, но может насле довать нужные права из роли.
www.books-shop.com
ГЛАВА 4:
Управление системой безопасности
257
Для каждого объекта БД можно получить информацию о правах для различных пользователей и ролей. Эти данные возвращаются хра нимой процедурой Взгляните, как права объекта ото бражаются на информацию, возвращаемую процедурой (рис. 44).
44. пользователя хранится как Grant, запрещение — как Revoke; если о пользователе конкретно ничего не известно, информация берется из роли, к которой он принадлежит. Разрешения, передаваемые пользователю, кумулятивны: он может делать все, что ему разрешено персонально, плюс что он насле дует как член роли. Команда DENY однозначно запрещает выполне ние действия; такое запрещение заменяет любые другие разрешения. Разрешение на выполнение действий передается командой GRANT: GRANT ТО
|
...n]} | ON TO [AS
...n])] ON
| [,...n] |
www.books-shop.com
Microsoft SQL Server 2000. Новейшие технологии Аргумент All дает пользователю все разрешения, возможные для данного объекта. Аргумент All могут задавать только системные ад министраторы и владельцы БД. Выполнение какихто действий пользователю или роли админис тратор запрещает команда DENY. Запрет приводит к тому, что у пользователя или роли снимаются права, переданные им непосред ственно или наследованные из другой роли; кроме того, сервер поза ботится, чтобы в будущем пользователь или роль не унаследовали отобранные права от другой роли. DENY{ALL | ТО security_account[,...n] DENY [PRIVILEGES] | ON {
{ table | view}[( | | TO security_account Как отобрать то, что ранее дано, или вернуть отобранное Для этого предназначена команда REVOKE (рис. 45). Пользователь или роль, у которых отобрано разрешение, могут, однако, наследо вать его от другой роли. Grant
Deny Рис. 45. Схема изменения разрешений при использовании команд DENY, REVOKE, GRANT.
www.books-shop.com
ГЛАВА 4: Управление системой безопасности REVOKE FROM
259
|
REVOKE [GRANT OPTION FOR] [PRIVILEGES] | { ON | | } FROM security_account[,...n] [AS |
...n]} |
Групповое управление именами регистрации К сожалению, помимо самого факта аутентификации сред ствами Windows NT, в версии 8.0 нет средств импорта пользователей и групп из домена. Так что, если Вы хотите задействовать новые возмож ности проверки прав доступа, а в домене несколько десятков групп и пара сотен пользователей, всю эту информацию нужно вводить вруч ную. Для облегчения подобной работы я советую применить утилиту из Windows NT Resource Kit и небольшую программу, со новые идентификаторы SQL Server. Список пользователей домена можно получить, исполнив утилиту с параметрами /d и именем файла, в который будет выведен список, например: addusers /d Результатом исполнения ути литы будет список, где для каждого пользователя или группы выво дится информация: [Users] <User
Drive>,
[Global]
www.books-shop.com
Microsoft SQL Server 2000. Новейшие технологии полнить расширенную хранимую прини в качестве необязательного параметра имя домена. Резуль тат работы процедуры можно поместить в таблицу, с которой удобно работать. create table insert into select * from comment
(f1 sysname, f2 sysname) execute
Administrators Members can fully administer the computer/domain Backup Operators Members can bypass file security to back up files Guests Users granted guest access to the computer/domain Power Users Members can share directories and printers Replicator Supports file replication in a domain Users Ordinary users Sqlusers SQL users (7 affected) Независимо от того, как Вы получили список пользователей и групп, SQL DMO дает Вам полный контроль. Чтобы создать новый идентифи катор пользователя, надо создать новый объект подключиться к интересующему серверу под идентификатором с до статочными правами и поработать над коллекцией Logins. Ниже при веден самый простой вариант: прямо в коде метода прописывается имя домена и группы или индивидуального пользователя. Немногим сложнее создать программу, которая будет читать текстовый файл, выводить список в диалоговом окне или предоставлять возможность выбора отдельных учетных записей или загнать весь список целиком. Private Sub Dim SQLServer As New Dim NewLogin As New = = 1 Type = 0 будет создан идентификатор типа NT User Type = 1 будет создан идентификатор типа NT Group Type = 2 будет создан идентификатор типа SQL Login Для назначения типа используются константы = О, ' = 1,
www.books-shop.com
ГЛАВА 4:
Управление системой = 2,
' Когда создается стандартный идентификатор SQL Server (Type = 2) ) он создается без пароля, используйте метод ' SetPassword для изменения пароля ' OldValue , ) ' в нашем случае OldValue = NULL ' При создании идентификаторов типов 0 и 1 контроллер домена ' должен быть доступен, так как SQL Server не поверит Вам на слово ' и обязательно проверит правильность передаваемых данных
End Sub Замечу, что в Visual FoxPro чтение списка выполняется гораздо чем в все, что нужно, создать пустой курсор и просто считать туда текстовый файл: CREATE CURSOR Users (f1 CHAR(254), f2 CHAR(254), ; f3 CHAR(254), ; f6 CHAR(254),f7 CHAR(254),f8 SELECT users APPEND FROM DELIMITED WITH CHARACTER Разграничение доступа средствами представлений и хранимых процедур Представления и хранимые процедуры обеспечивают дополнитель ные возможности по разграничению доступа к БД. По скольку хранимая процедура или представление обходят разрешения на действия над объектом, Вы можете предоставить пользователям доступ к хранимой процедуре и запретить прямой доступ к таблице. Это позволит четко ограничить правила работы с данными: хранимая процедура и параметры вместо прямого доступа к таблице. Если Вы хотите задействовать хранимые процедуры и представле ния, разрешите пользователям представления и не запрещайте рабо ту с таблицами, на основе которых создано представление (Base tables). поле таблицы может хранить закрытую информацию о зарплате. Остальные поля можно просматривать всем. Создайте пред ставление, включающее все поля, кроме поля с зарплатой. Если у таб лицы и представления один владелец, можно дать право на команду SELECT для представления и не разрешить для таблицы. Для храни мой процедуры дайте право на исполнение и не разрешайте прямого доступа к таблицам.
www.books-shop.com
262
Microsoft SQL Server 2000. Новейшие технологии
Мастер создания нового пользователя Мастер создания нового пользователя (Create Login Wizard) (рис. 46) может пригодиться новичкам. Практически того же результата мож но добиться через диалоговое окно New Login, вызываемое командой New Login контекстного меню, появляющегося по щелчку правой кнопкой группы Logins.
Puc. 46. Мастер позволяет определить способ идентификации нового пользователя, принадлежность к определенной роли и базе данных, к которым у него есть доступ. Выбрав способ проверки прав пользователей и назначив имя, под которым будет исполняться сам SQL Server, можете указать принад лежность к роли и БД, с которой пользователь имеет право работать. Задав все вопросы, мастер выводит Ваши ответы (рис. 47). Щелкни те кнопку Finish — и новый идентификатор готов.
www.books-shop.com
ГЛАВА 4;
системой безопасности
263
4 7. Перед началом работы мастер выводит список, где перечислены Ваши пожелания,
Графический интерфейс управления правами доступа Если Вы считаете себя достаточно подготовленным, вызовите диало говые окна объектов системы безопасности. Логичнее начать с ново го идентификатора пользователя. Откройте дерево объектов под ин тересующим сервером, щелкните правой кнопкой объект Logins и в контекстном меню выберите команду New Login. Появится диалого вое окно (рис. 48). Как видите, Вы можете создать два типа идентификаторов: прове ряемые средствами Windows NT (переключатель Windows NT authen tication) и проверяемые SQL Server (переключатель SQL Server authen Для идентификаторов первого типа надо ввести не только имя пользователя или группы, но и имя домена. При этом SQL Server сразу попросит контроллер домена подтвердить, что указанный пользователь или группа существуют. Вы можете создать не только разрешающий идентификатор (переключатель Grant Access выбирается по умолча но и запрещающий — Deny Access — он закроет доступ к серве ру. Это возможно только для идентификатора, проверяемого средства ми Windows NT. Для идентификатора, работающего в режиме стандар тной модели безопасности, надо ввести не только имя идентификато ра, но и пароль — сервер тут же потребует подтвердить его.
www.books-shop.com
264
Microsoft SQL Server 2000. Новейшие технологии
Общие свойства нового идентификатора. Помимо имени идентификатора и способа проверки, можно ука зать имя БД, к которой будет направлен пользователь при подключе нии к серверу. Если не указано ничего иного, выбирается Master. Описав общие параметры нового идентификатора, Вы можете приписать идентификатор к одной из фиксированных ролей сервера на вкладке Server roles. Щелчок кнопки Properties выводит диалого вое окно, содержащее свойства выбранной роли, перечень работ, ко торые могут выполнять члены роли и список идентификаторов, уже приписанных к ней (рис. 49, 410).
www.books-shop.com
ГЛАВА 4:
Управление системой безопасности
Новый идентификатор может быть приписан к одной из фиксированных ролей сервера, но это не обязательно.
410. Полномочия роли настолько широки, что их перечень даже не умещается в окне.
На следующей вкладке задаются права доступа к индивидуальным БД сервера. Стоит выбрать БД, и идентификатор автоматически по падает в члены роли Public (рис. Одновременно появляется спи сок стандартных ролей в БД, и Вы можете расширить права иденти фикатора за рамки роли Public. Щелкнув кнопку Properties, Вы полу чите дополнительные сведения о выбранной роли. В списке указыва ются не только стандартные, но и созданные администратором роли.
с. Идентификатор можно ввести в одну из стандартных ролей базы данных, роль Public он вводится автоматически. Вновь созданный идентификатор можно связать с одним из учетных имен. Для этого надо раскрыть дерево объектов для БД и щелкнуть правой кнопкой объект Database users. Выбрав в появившем ся меню команду New user, Вы увидите диалоговое окно (рис. После того как Вы описали и сохранили новое учетное имя, по вторный вызов диалогового окна с описанием свойств позволяет уточнить права этого учетного имени. Диалоговое окно свойств вы водит команда Properties контекстного меню, вызываемого щелчком правой кнопкой учетного имени в правой панели.
www.books-shop.com
ГЛАВА 4:
Управление системой безопасности
267
Здесь Вы устанавливаете соответствие между идентификатором пользователя на уровне сервера и учетными именем на уровне конкретной базы данных.
Создать роль БД не сложнее, чем учетное имя. Под нужной БД объект Database roles, щелкните его правой кнопкой и в кон текстном меню выберите команду New role. В появившемся диалого вом окне можно указать тип роли, а для стандартной роли — доба вить учетные имена пользователей (рис. 413). Точно так же, как с учетным именем, после сохранения новой роли команда Properties из контекстного меню, вызываемого правой кнопкой, позволяет установить набор разрешений для выбранной роли.
www.books-shop.com
Microsoft SQL Server 2000. Новейшие технологии
268
413. Здесь указать тип роли, а для стандартной роли — добавить учетные имена пользователей. Манипулирование системы безопасности средствами хранимых процедур и SQL DMO Выше я показал, как создается новый идентификатор пользователя. А как получить список идентификаторов сервера и БД? Для этого лучше всего обратиться к объектам SQLDMO. Взгляните на иерархию нас объектов (рис. 414): Logins
Ч Users
Login 2 Database
Puc.
Иерархия объектов системы безопасности SQL
Как видите, в версии 8.0 появились три новых объекта, вся новиз на которых — обеспечение доступа к свойству IsDeleted. Это свой ство позволяет определить не был ли объект удален с момента после
www.books-shop.com
ГЛАВА 4:
Управление системой безопасности
269
днего обновления коллекции. В предыдущей версии нужно было об новлять кэш клиента, содержащий всю коллекцию вызовом метода Для назначения нового пароля я создал форму, которая обраща ется к указанному серверу, считывает информацию о хранящихся на нем БД и для каждой БД выводит список идентификаторов пользова телей, а для всего сервера — список идентификаторов тех, кто заре гистрирован и имеет право доступа к серверу. В данном случае при создании списка нас интересуют только пользователи с пустыми па ролями. Объекты login и user не имеют свойства, позволяющего уз нать не только что пароля, но даже о наличии или отсутствии таково го. Значит, нужно отправить запрос на сервер. Использовать иной интерфейс, например ADO, можно, но говорить о нем нам пока ра новато — попытаемся пойти другим путем, предоставляемым мето дом объекта server. В качестве параметра передаем ему строку с SQLвыражением и в ответ получаем объект с набором записей. Формулировка строки полностью под нашим контролем — так что это вполне удобный способ опроса системных таблиц. Знаю, знаю, я сам в главе говорил, что лучше действовать че рез информационные представления. Но представления, которое воз вращало бы имена пользователей, нет — увы! Администратор вводит имя сервера, пароль и под ключается к выбранному серверу. Щелчок кнопки Connect подклю чает нас к серверу, а кнопки Databases и Logins заполняют списки с перечнем БД на выбранном сервере и пользователей для выбранной БД. Выбрав БД и пользователя, вводим новый пароль и, щелкнув кноп ку Change login, меняем пароль для этого пользователя (рис. 415).
Рис. 415. Подключившись к серверу, можно поменять пароль для учетной записи, выбранной из списка.
www.books-shop.com
Microsoft SQL Server 2000, Новейшие технологии Чтобы форма работала, подключим к проекту библиотеку Mic' rosoft SQLDMO Object Library. Dim SQLServer As New Создаем новый объект SQL Server Dim connected As Boolean Dim As Создаем для размещения результатов запроса Private Sub Получаем число БД и заполняем список, опрашивая сервер = For i = 0 To db_name =
1 + db_name, i
Next End Sub Private Sub Получаем список пользователей и заполняем список = + 1 If = 1 And = "MASTER" Then ' Проверяем, чего хочет пользователь Если список пользователей на уровне сервера, опрашиваем коллекцию logins, иначе users Кроме того, нам нужно отсечь пользователей, которые проходят проверку средствами Windows NT, так как для них ' применение процедуры sp_password невозможно, они меняют пароль ' в домене Windows NT logincount = For i 1 To logincount login_name = (login_name) Next Else = For i = 1 To usercount =
www.books-shop.com
ГЛАВА 4: Управление системой
271
Next End If End Sub Private Sup = If Not connected Then server2connect = = = password2connect параметры соединения и передаем их в метод Connect connected = If Then ' Если соединение успешно, активизируем на форме ("Connected") For Each Control In = True Next Control connected = True Else MsgBox (errmessage(1, connected = False End If Else MsgBox ("Already connected") End If Exit Sub 'onerror: Простенький обработчик ошибок ' connected = False ' errmessage = ' Resume Next End Sub Private Sub Если выбрана база данных Master, даем возможность ' определить пользователей на уровне сервера из таблицы Syslogins If = "MASTER" Then = True Else = False
www.books-shop.com
Microsoft SQL Server 2000. Новейшие технологии = 0 End If End Sub Private Sub Отключаемся от сервера connected = False End Sub Private Sub ' Уничтожаем и закрываем форму Set SQLServer = Nothing Unload Me End Sub Private Sub Form_Load() connected = False End Sub Private Sub If = 1 And = "MASTER" Then Формируем SQL предложение, вызывающее хранимую процедуру Только системный администратор может поменять чужой пароль, вместо старого пароля передаем NULL sql_string = & & & & ' Вызываем метод SQLServer для исполнения команды Кроме того, изменить пароль можно методом объекта Login OldValue , ) В качестве старого пароля передаем пустую строку Конкретный идентификатор получаем из коллекции Logins End If End Sub Покой нам только снится Система безопасности SQL Server 8.0 лучше интегрирована со сред ствами разграничения доступа Windows 2000. Набор системных хра нимых процедур и богатая коллекция объектов SQLDMO позволяют полностью контролировать процесс создания элементов системы бе зопасности как стандартными средствами SQL Server, так и средства ми специально разработанных административных
www.books-shop.com
ГЛАВА 4:
Управление системой безопасности
273
Однако, просмотрев содержимое файла БД с какойни будь утилиты, Вы что система безопасности самого сервера не стоит ни гроша, если Вы позволяете кому попало просматривать каталоги (рис.
Рис. 416. Утилита просмотра программы Norton Commander позволяет узнать много интересного о содержании БД SQL Server. Для достойной зашиты данных надо объединить усилия сетевых администраторов и администраторов БД. Могут сказать, что просмотр файлов размером в сотни мегабайт — занятие не из приятных, но не обольщайтесь. Если комуто очень нужны Ваши данные, он пойдет на любые ухищрения. Применив специальные приемы, Вы создадите си стему, отвечающую требованиям безопасности по сертификации С2. С2 — это возможно В процессе разработки сервера были предприняты специальные усилия, позволяющие усилить защиту данных от несанкционирован ного доступа. На момент написания этой главы на уровень С2 был сертифицирован SQL Server 2000, установленный на Windows NT 4.0. Скорее всего сертификат на Windows 2000 тоже будет получен, но пока примем NT 4.0 как данность. Я не буду вдаваться в особенности конфигурирования ОС — нужную информацию см. в документе «Mic rosoft Windows NT C2 Administrator's and User's Guide», подробные инструкции по настройке SQL Server 2000 и многочисленные реко мендации по обеспечению безопасности — в документе Admi nistrator's and User's Security Guide». Понятно, что уровень безопас ности С2 нужен далеко не всем информационным системам, тем бо лее что сам процесс аудита сказывается на производительности. Но
www.books-shop.com
Microsoft SQL Server 2000, Новейшие технологии многие рекомендации основаны просто на здравом смысле, их мож но задействовать в любой системе. С точки зрения SQL Server 2000, главное нововведение — возможность подробного аудита действий пользователя. Мы уже отмечали, что SQL Server Profiler получил воз можность отслеживать большой набор событий, связанных с аудитом системы. Однако Profiler — всего лишь внешнее приложение, кото рое можно запустить и остановить. аудит должен выпол няться самим сервером, не зависеть от капризов пользователя и обес печивать надежную систему Режим аудита позво ляет включить новый параметр конфигурации — audit mode». По умолчанию он равен 0, т. е. аудит не выполняется. Для активизации аудита надо выполнить команды: sp_configure go reconfigure go
audit
О
и перезапустить службу. С этого момента в каталоге, отведенном под данные, будет формироваться набор файлов с именами типа auditt Это стандартные файлы трассировки, что и понятно, так как аудит выполняется одним из компонентов Profiler, только управление этим компонентом сервер взял на себя. Макси мальный размер файла аудита — 200 Мб, после чего текущий файл закрывается, и сервер открывает следующий. Если в процессе работы на диске кончилось место, сервер автоматически прекращает работу, и Вы не сможете запустить службу до тех пор, пока не освободите место на диске либо не отключите режим аудита. Для отключения аудита при переполненном диске Вам следует запустить сервер с па раметромf. Заключение Как видите, на пути к корпоративному рынку корпорация Microsoft проделала немалую работу не только в направлении расширения «стандартной» функциональности СУБД, но и в направлении боль шей защищенности. В следующей главе мы приступим к рассмотрению средств авто матизации административных задач.
www.books-shop.com
Глава 5
Задания,
оповещения,
операторы
Управлять даже одним сервером непросто — это бесспорно. Многие операции надо выполнять в периоды наименьшей загрузки сервера, что вполне может означать ночью или в выходные. Тяжела доля ад министратора: трудится, бедолага, не покладая рук, не зная ни сна, ни отдыха. Мало того, что в рабочее время контролирует он доступ ность базы данных, так еще и в воскресенье надо проследить, чтобы страховочная копия была создана, журнал транзакций урезан, про верка БД выполнена и т. д., и т. п. Чтобы сервер мог сам «постоять за себя», в версии 6.0 появились средства автоматизации разного рода административных работ. В версии 8.0 они получили дальнейшее раз витие, и, хоть от администратора отказываться рановато, его инстру ментарий стал намного богаче. Работу подсистемы автоматизации административных задач обеспечивают три службы операционной системы: SQL Server Agent и EventLog. В рамках службы SQL Server Agent существуют три основных компонента, выполняю щих административные действия: задание, оповещение и оператор. Задание (Job) в версии 8.0 — это действия, выполняемые над сер вером по определенному графику. Только теперь администратор по лучил гораздо более гибкий и мощный инструмент. Задания способ ны значительно облегчить автоматизацию стандартных действий: со здание страховочных копий и индексов, проверку целостности БД и загрузку новых данных. Оповещение (Alert) — это действия, предпринимаемые сервером в случае нештатной ситуации. При этом подсистема SQL Server Agent перехватывает это проверяет, было ли создано предписание действовать определенным образом, и, если да, исполняет действия, заданные администратором. 1 Ⱦɚɧɧɚɹɜɟɪɫɢɹɤɧɢɝɢɜɵɩɭɳɟɧɚɷɥɟɤɬɪɨɧɧɵɦɢɡɞɚɬɟɥɶɫɬɜɨɦ%RRNVVKRS ɊɚɫɩɪɨɫɬɪɚɧɟɧɢɟɩɪɨɞɚɠɚɩɟɪɟɡɚɩɢɫɶɞɚɧɧɨɣɤɧɢɝɢɢɥɢɟɟɱɚɫɬɟɣɁȺɉɊȿɓȿɇɕ Ɉɜɫɟɯɧɚɪɭɲɟɧɢɹɯɩɪɨɫɶɛɚɫɨɨɛɳɚɬɶɩɨɚɞɪɟɫɭ[email protected]
Microsoft SQL Server 2000. Новейшие технологии Оператор (Operator) — это тот, на чью голову сыплются сообще ния о всяческих событиях, приятных и неприятных. Так, задание спо собно сообщить о том, что страховочная копия создана успешно, но сообщение может прийти и о том, что годовой отчет не может быть так как БД помечена как подозрительная (Suspect) и недоступ на. Но для того и существует подсистема, обслуживаемая SQL Server Agent, чтобы сервер активно сопротивлялся стихийным бедствиям и предпринимал самостоятельные действия по выходу из нештатной прежде чем на помощь придет человек. При старте SQL Server Agent регистрируется в журнале событий Windows и подключается к SQL Server.
Подсистема исполнения заданий Подсистема автоматизации административных действий позволяет генерировать задания с любым количеством шагов и графиков испол нения. Для каждого шага администратор может указывать действия сервера при удачном или неудачном (с ошибкой) Отли чие шага версии 8.0 и задачи версии 6.5 в том, что у индивидуальных шагов задания нет своего графика исполнения. Индивидуальные шаги могут обслуживаться разными подсистемами: шаг 1 — TSQL, шаг 2 — CmdExec и т. д. В SQL Server 8.0 сохраняется поддержка функциональности вер сии 6.5: • исполнение заданий в соответствии с графиком; • описание заданий хранится в локальной БД Msdb; • индивидуальные шаги задания могут быть следующих типов: Ac tiveX Script (код на языке сценариев), TSQL (команды Transact SQL), CmdExec (запуск на исполнение Ехе или за дание, связанное с репликацией (Distribution, Sync, LogReader,...); • задание может быть повторено неограниченное количество раз (при неудаче исполнения) с произвольными задержками между попытками повторного исполнения; • по завершении задание может создавать уведомление, рассылае мое по электронной почте, на пейджер, через журнал событий Windows или средствами команды net send; • компактный, ясный графический интерфейс для анализа и управ ления заданиями и историей исполнения заданий.
Создание заданий и индивидуальных шагов для них Предмет этой главы — задания, которые создаются для исполнения на локальном сервере. О тех, что предназначены для администрирования
www.books-shop.com
ГЛАВА
Задания, оповещения, операторы
277
группы серверов, я расскажу в главе 6, хотя особой разницы в самом процессе создания многосерверного или локального задания нет. Доступ к списку существующих заданий можно получить, щелк нув значок слева от объекта SQL Server Agent конкретного серве ра. Если щелкнуть правой кнопкой объект Jobs и из контекстного меню выбрать New Job, появится диалоговое окно с несколькими вкладками (рис, 51).
51. Диалоговое окно описания общих параметров задания. Администратор должен присвоить заданию имя, активизировать его (если флажок Enabled не помечен, задание не будет исполняться в ус тановленное время), назначить ему владельца и категорию. При уста новке сервера создается набор стандартных категорий — администра тор может создать собственные. Это позволит группировать задания в зависимости от выполняемых функций. Получить список имеющихся категорий можно, вызвав системную процедуру ПРИМЕЧАНИЕ Большинство системных процедур, о которых пойдет речь в этой и следующей главах, хоть и имеют имена, начинающиеся с sp_, хранятся в базе данных Msdb. Добавление, удаление и модификация категорий выполняются средствами системных хранимых процедур sp_de и или по команде контекстного вызываемого щелчком правой кнопки объекта Jobs. В контекстном меню выберите команду All Tasks/Manage Job categories. В появив шемся диалоговом окне можно посмотреть существующие категории,
www.books-shop.com
SQL Server 2000, Новейшие технологии список заданий, приписанных к каждой из них, и создать новые ка тегории. Введя общую информацию для задания, администратор должен создать один или более шагов для него. Каждое задание может пред ставлять собой довольно сложный набор шагов, подчиняющихся оп ределенной логике. Итак, создаем шаги задания. Для этого щелкнем вкладку Steps и откроем такую страницу (рис.
52. Диалоговое окно создания новых шагов задания и редактирования существующих.
Кнопка New выводит диалоговое окно создания нового шага зада ния, Insert вставляет новый шаг перед отмеченным, Edit, как следует из названия, позволяет отредактировать, ну a Delete — удалить выб ранный шаг. При редактировании или создании шага Вы работаете с диалого выми окнами (рис. Каждому шагу присваивается имя, определяется его тип, БД, в контексте которой он будет исполняться, и, наконец, указывается собственно текст команды. Как видите, индивидуальные шаги могут обращаться к разным БД. Иначе говоря, мы можем на первом шаге обратиться к одной БД и извлечь из нее информацию, а на следующем (если первый выполнен успешно) — закачать полученную информацию в другую.
www.books-shop.com
ГЛАВА 5; Задания,
Рис. 53.
операторы
279
Диалоговое окно описания общих параметров шага задания.
Шаги могут быть следующих типов: команда операционной сис темы (CmdExec), сценарий на языке TransactSQL, сценарий на од ном из языков сценариев (Active Script). Подсистема репликации ис пользует шаги специальных типов: LogReader, Merge и Snapshot. Тип шага определяет способ обработки команды. Самая интересная воз можность — применение языков сценариев (Scripting Language) VB Script и JavaScript или им подобных (например, Perl). Процессор об работки модулей на языках сценариев позволит отойти от неповорот ливых bat или без необходимости вдаваться в другую крайность — создание исполняемых файлов на С или Visual Basic. Использование VBScript и JavaScript — удачный промежуточный ва риант: это и простота программирования, и возможность задейство вать Notepad в качестве среды и достаточная мощь язы ка. Применяя языки сценариев, Вы должны позаботиться, чтобы все создаваемые Вами объекты были уничтожены после исполнения сце нария. Если Ваш код не «убирает» за собой, задание не будет сохра нено, так как сервер распознает эту ситуацию. Сложный код требует отладки. Чтобы вызвать отладчик из кода, составляющего шаг задания, поместите первой командой STOP. Если у Вас установлен отладчик сценариев или Visual InterDev эта команда автоматически загрузит отладчик и поместит в него исполняемый код. Далее Вы получаете возможность проследить код по шагам, прове рить состояние переменных — в общем, все, как положено при от ладке кода.
www.books-shop.com
280
Microsoft SQL Server 2000, Новейшие технологии
Запуск исполняемого файла ОС, однако, может оказаться един ственным вариантом, когда Вам понадобится утилита третьих фирм или одна из утилит командной строки, поставляемых с SQL Server (их перечень см. в главе 1). При описании шага, использующего исполняемый файл, следует учесть, с каким кодом завершения выходит программа; не помешает указать и полный путь к исполняемому файлу. Каждый шаг может создавать собственный протокол, который мож но записать в указанный администратором файл и, если надо, включить в сообщение, записываемое в таблицу (рис. 54). Файл с протоколом можно перезаписывать каждый раз заново или пополнять.
Рис. 54. Диалоговое окно описания дополнительных параметров шага задания. Шаг можно исполнять от имени одного из пользователей, зареги стрированных в той БД, в контексте которой исполняется шаг. Еще интереснее и важнее возможность описания логики перехода по завершении каждого шага. Индивидуальные действия можно на значить при удачном или неудачном исполнении шага. Варианты раз вития событий могут быть такими: переход на указанный шаг (Goto Step <номер на следующий (Goto The Next Step), завершение исполнения задания и сообщение о провале (Quit The Job Reporting завершение исполнения задания и сообщение об успехе (Quit The Job Success). Если шаг не исполнился с первой попыт ки, ему дается еще несколько (до 9999) попыток, интервал между по пытками может составлять до 9999 минут.
www.books-shop.com
ГЛАВА 5:
Задания, оповещения, операторы
281
Чтобы задание исполнялось, когда это необходимо, для него со здается один или более графиков исполнения (Schedule) (рис. 55).
Рис. 55.
Диалоговое окно определения графика исполнения задания.
Задание может стартовать сразу после запуска SQL Server Agent (переключатель Start automatically When SQL Server Agent starts). Оно может дождаться, пока процессор [Start whenever the CPU(s) become О «незанятом процессоре» я уже рассказывал в главе 2. Обратитесь к диалоговому окну (рис. 218), вызываемому при выборе из контекстного меню для SQL Server Agent команды Proper ties (вкладка Advanced). Кроме того, как и ранее, заданию можно на значить однократный запуск (One time), указав дату и время запуска, или повторяющийся (Recurring). При выборе многократного исполне ния задания нужно либо принять стандартный график (еженедельно по воскресеньям в 00:00 часов), либо щелкнуть кнопку Change и на значить иной график. График задания может быть исключительно гибким. Собственно говоря, администратор может назначить момент исполнения с точ ностью до минуты, заставить задание исполняться каждую вторую неделю по воскресеньям и пятницам каждые 3 часа и т. п. Заданию можно назначить срок действия или объявить бессрочным. Вы, видимо, уже заметили, что не можете создавать задания, ис полняемые по требованию, — то, что в версии 6.5 называлось On Demand. Теперь, чтобы создать такое задание, нужно описать все: само задание, его шаги, активизировать график исполнения. Только график исполнения нужно назначить на прошедшую дату. Задание будет в полной готовности, но для его запуска понадобится прину дительный вызов по имени. Это делается передачей системной храни
www.books-shop.com
282
SQL Server 2000, Новейшие технологии
мой процедуре job имени задания и, если надо, имени шага, с которого следует начать исполнение. Можно также не отмечать фла жок Enabled на вкладке General диалогового окна описания свойств задания.
Диалоговое окно назначения графика для повторяющегося исполнения задания. Подсистема исполнения заданий способна разослать уведомления в случае как успешного, так и неуспешного завершения задания. Уве домления попадают по адресу, связанному тем, кто в терминологии SQL Server называется оператор (operator). Создание и работу с опе раторами я рассмотрю чуть позже — после того как мы поговорим об оповещениях Результаты исполнения задания по индивидуальным шагам с мас сой дополнительной информации хранятся в таблице Msdb..sysjob Эта таблица способна поведать много интересного (рис. 57). Если в процессе исполнения задания SQL Server получил команду SHUTDOWN или произошел сбой, таблица сохранит за пись о последнем шаге, исполнявшемся перед отключением сервера.
www.books-shop.com
ГЛАВА 5: Задания,
Рис. 5 7.
операторы
283
Результат исполнения запроса к таблице
Но SQL Server предоставляет и более удобный интерфейс, позво ляющий узнать о конкретном задании, а не обо всех, что когдалибо исполнялись на сервере и оставили свои следы в БД Msdb (рис. 58).
Рис. 58. История исполнения задания. Число записей, хранящихся для всех заданий, определяется пара метрами свойств службы SQL Server Agent. По умолчанию в таблице сохраняется 1 000 записей для всех заданий и не более 100 — для каж дого индивидуального задания.
www.books-shop.com
284
Microsoft SQL
2000, Новейшие технологии
В создании стандартных заданий сопровождения БД поможет включенный в SQL Server мастер по созданию планов сопровожде ния (Database maintenance plan Оповещения Оповещения предназначены для обозначения реакции системы на различного рода ошибки (события). Реакцией может служить испол нение того или иного задания или уведомление оператора. О том, что может сделать оператор, я расскажу позже, а пока рассмотрим про цесс создания нового оповещения. Как известно, многие события записываются в журнал Windows. SQL Server Agent периодически читает часть журнала, называемую Application log, и проверяет, не произошло ли событие, которому при писано оповещение. Обнаружив, что событие произошло, SQL Server Agent активизирует соответствующее оповещение. Вся информация, связанная с работой подсистемы, обслуживаемой SQL Server Agent, хранится в Msdb. Задания и оповещения дополняют друг друга. Вы можете создать задание и привязать его к оповещению. При возникновении события запускается задание, которое попытается обработать ситуацию, воз никшую в результате события. Классический пример — оповещение, обрабатывающее ошибку переполнения журнала транзакций, скажем, для БД Tempdb (рис. 59).
Рис.
Оповещение, обрабатывающее ошибку 9002.
www.books-shop.com
ГЛАВА
Задания,
операторы
285
Перехватив ошибку 9002, SQL Server Agent вызывает на исполне ние задание, как это указано администратором (рис. 510). Кстати, в обычной ситуации задание, у которого график исполнения не акти визирован, выполнено не будет. Но это не относится к заданию, ко торое является реакцией на возникновение описанного события. Та кое задание исполняется в любом случае по требованию.
Рис. 5Ю. Администратор назначает выполнение задания как реакцию на ошибку. Как видите, помимо запуска задания на оповещение способно поднять приличную волну, рассылая уведомления операто рам на пейджер, по электронной почте или средствами команды net send. В сообщение можно включить не только текст ошибки, но и дополнительные сведения. Но учтите: подготовленное впопыхах со общение способно привести к сердечному приступу администратора (рис. 511), особенно если оно получено на пейджер среди ночи. Тщательнее, При описании оповещения укажите условия, при которых будет поднята тревога. Таким условием может быть номер ошибки SQL Ser ver или ошибки определенного уровня (Severity).
Рис. 511. Вы полностью контролируете текст сообщения, рассылаемого оповещением.
Оповещение может быть привязано к любой ошибке, описанной в системной таблице Для конкретной ошибки можно описать более одного оповещения, однако индивидуальные оповеще ния нужно привязать к конкретной БД или охватывать все базы сер вера. Для оповещения об ошибке только в некоторых БД надо создать несколько оповещений. При создании оповещения, которое сраба тывает на ошибку во всех БД, создайте об пере дав параметры, предоставляющие дополнительные сведения. Вы мо жете создать собственные сообщения об ошибке с помощью систем ной хранимой процедуры sp Она принимает ряд парамет ров, в том числе номер ошибки (50001 или более), уровень, текст. В тексте можно задать параметры, которые будут включены в оконча тельное Параметр начинается со знака % и описывается символом, указывающим на тип данных параметра. Символ s означа ет символьный параметр, d — численный. Кроме того, можно исполь зовать и восьмеричные параметры. 50002, 10, сообщение номер %d из БД команда Raiserror(50002, 10, 1, 123, возвращает "Это сообщение номер 123 из БД [Моя При описании оповещения, срабатывающего на ошибку опреде ленного уровня, имейте в виду, что ошибки уровней от 19 до 25 и уровней ПО, 120, 130 и 140 автоматически фиксируются в журнале событий Windows. Ошибки уровня от 19 до 25 — фатальные: пользо вательское соединение принудительно убивается (если еще живо), пользователю надо выполнить повторное Иногда оповещения входят в цикл. Такое может произойти при истощении жизненно важного глобального ресурса сервера. В резуль
www.books-shop.com
ГЛАВА
Задания, оповещения, операторы
287
тате ошибки начинают падать быстрее, чем SQL Server Agent успевает чтото При этом журнал событий Windows быстро на полняется об одной и той же ошибке, загрузка процес сора или частота срабатывания оповещений ненормально высока. Учтите: две основные службы SQL Server Agent и SQL Server могут иногда конкурировать за полосу пропускания системы. При этом уве личивается время между появлением сообщения в журнале событий Windows и реакцией на ошибку службы SQL Server Agent. Если на стройка журнала событий оставляет слишком мало места или содер жимое журнала слишком часто перезаписывается, службе SQL Server Agent может быть нечего читать при обращении к журналу (рис. Чтобы предотвратить утерю сообщений, увеличьте размер журнала.
572. Настройка журнала событий Windows влияет на работу подсистемы обработки оповещений. При циклическом срабатывании оповещения увеличьте задержку срабатывания оповещения (Delay Between Responses) в параметрах для каждого оповещения. Это предотвратит слишком частое срабатыва ние оповещения. Новый тип оповещений позволяет оказаться от монитора произ водительности как средства генерации сигналов о возникающих про блемах. Более того, уже в версии 7.0 не было утилиты ге
www.books-shop.com
288
Microsoft SQL Server 2000. Новейшие технологии
нерировавшей команду по указанию монитора произ водительности. Если у Вас выработалась стойкая привязанность к этому исполняемому файлу, возьмите его из комплекта предыдущей версии. Хотя теперь сервер предлагает то, что называется One stop shop, он имеет встроенные средства генерации оповещений в зависи мости от состояния свойства соответствующего объекта производи тельности (Performance counter). При создании нового оповещения раскройте список Туре (Тип оповещения) и выберите SQL Server performance condition alert. Диалоговое окно изменит внешний вид: в нем появятся элементы управления, соответствующие типу оповеще ния. В разделе Performance condition alert definition (Условия создания оповещения) Вы выбираете объект, для которого будет отслеживать ся состояние свойства (рис. 513).
Puc. 513.
Общие параметры оповещения.
Если выбираемый объект и его свойство отражают разные аспек ты работы сервера (попробуйте выбрать объект SQL Server: Locks), становится активным список Instance. Так, для упомянутого объекта существуют блокировки на уровне таблицы, страницы, ключа и т. д., все эти варианты отражаются в списке Instance. В этом же разделе диалогового окна Вы указываете величину, которую должно превзой
www.books-shop.com
ГЛАВА 5: Задания, оповещения, операторы
289
ти, опуститься ниже или сравняться с которой значение свойства, чтобы оповещение было создано. Вторая панель диалогового окна не отличается для обоих типов оповещений. Вы указываете текст сооб щения, оператора, который должен принять сообщение, способ пе редачи этого сообщения так же, как уже было показано (рис. Когда условия, определенные для оповещения достигнуты, оно сра батывает и выполняет указанные действия.
Рис. 514. Самым простым способом передать сообщение на другую машину является Net send. Хотя часть функциональности, ранее присутствовавшей только в мониторе была перенесена в сам SQL Server, oH способен отслеживать только события, связанные с ним самим. Это значит, что монитор еще послужит нам: это попрежнему незамени мый инструмент анализа работы сервера. Операторы Итак, именно на голову оператора валятся все проклятия системы, попавшей в нештатную ситуацию. Ничего не поделаешь: такая у него работа. Операторы бывают двух видов: обычные и последней надежды (Fail safe operator). Этот почетный титул присваивается только одно му из операторов при настройке параметров работы SQL Server Agent — службы, управляющей всеми операторами, заданиями и оповеще ниями. Оператор последней надежды вызывается, когда никто не сре агировал на предыдущие сообщения. Оператора, выбранного на роль козла отпущения, удалить нельзя. Если это надо, его сначала требует ся разжаловать в обычные операторы или передать этот атрибут дру гому. Для большей надежности информация для оператора последней надежды кэшируется, и даже при нештатном завершении работы SQL Server Agent оператор все равно получит сообщение.
www.books-shop.com
290
Microsoft SQL Server 2000, Новейшие технологии
Новый оператор создается в следующем диалоговом окне (рис. 515):
Рис. 515.
Общие параметры описания нового оператора.
У каждого оператора есть имя (Name) и идентификатор (Id). Чтобы система знала, куда писать, Вы указываете адрес электронной почты, если есть пейджер и имя компьютера, куда можно послать Для всех видов связи можно щелкнуть кнопку Test и послать тестовое сообщение. Чтобы обратиться к адресной книге почтовой системы, такой как MS Exchange, или послать сообщение на пейджер, щелкните кнопку с тремя точками. Каждый оператор должен иметь описанный график работы в будни и выходные. Это позволит системе разобрать ся, на кого рассчитывать в каждом конкретном случае. Указав все адреса и рабочие часы оператора, ему можно назначить зону ответственности — определить оповещения, которые будут тре бовать его внимания (рис. Как видите, у Вас есть полный список ранее созданных оповеще ний, к каждому из которых можно приписать оператора и определить, как система должна посылать уведомление. Здесь же Вы указываете, доступен ли оператор. Очень удобно, если нужно отключить рассыл ку на время отпуска.
www.books-shop.com
ГЛАВА 5:
Задания, оповещения, операторы
291
Рис. 516. Каждому оператору можно назначить зону ответственности.
Если Вы планируете рассылать сообщения операторам по элект ронной почте, Вам требуется доступ к серверу, поддерживающему интерфейс MAPI, и нужно сконфигурировать почтовый профиль (mail profile) для SQL Server Agent. Имя профиля необходимо SQL Server Agent для запуска почтовой сессии и рассылки уведомлений. Подроб нее взаимодействие SQL Server и MS Exchange мы обсудим позже. Мастер сопровождения базы данных Новые задания можно создавать не только средствами SQL Server Enterprise Manager — к Вашим услугам мастер по созданию планов сопровождения БД (Database Maintenance Plan Wizard). Мастер по могает создать набор задач, исполняемых на регулярной основе для поддержания базы в рабочем состоянии. В предыдущей версии SQL Server подобный мастер был. Новый вариант не сильно от него от личается за тем только исключением, что он создает не задачу (Task), а несколько заданий. Вызванный мастер, как и положено, ряд вопросов и предлагает несколько вариантов ответа на каждый вопрос.
www.books-shop.com
Microsoft SQL Server 2000, Новейшие технологии Его первое окно — заставка с перечнем вопросов (рис.
517.
Первый экран мастера.
В следующем окне предлагается выбрать список БД, для которых будут выполняться назначенные (рис. 518): системные БД, пользовательские БД, все БД или только некоторые из имеющегося списка. Здесь же Вы получаете возможность вместо создания плана мероприятий по сопровождению БД организовать процесс портиро вания журнала транзакций на другой сервер (флажок Ship the trans action logs to other SQL Servers (log shipping). Мастер позволяет сде лать либо одно — план мероприятий, либо другое — портирование журнала. Так как портирование журнала — вещь новая, отложим рассказ о ней на потом. Сначала рассмотрим стандартные операции, предлага емые мастером. Начнем с оптимизации размещения данных на диске. Как и вер сия 7.0, SQL Server 2000 предлагает возможности по сжатию файлов данных и журнала, средства по реорганизации страниц данных и ин дексов.
www.books-shop.com
ГЛАВА
оповещения, операторы
293
518. Выберите нужные базы данных и определите для них набор мероприятий по сопровождению.
Допустим, Вы выбрали нужные БД и щелкнули кнопку Next, чтобы назначить оптимизацию производительности (рис. 519): перестройку индексных страниц и страниц данных (флажок Reorganize data and index pages). При создании индекса можно указать процент заполне ния страниц; в процессе эта величина не сохраняется, и для восстановления исходного состояния индекс надо перестроить. На выбор предлагается два варианта: перестроить индекс со старыми параметрами или установить новый процент заполнения. Так как из начально Вы можете не иметь достаточно информации, чтобы при нять обоснованное решение об оптимальном заполнении индексных страниц, впоследствии может понадобиться поменять этот параметр. При построении плана запроса в числе прочей информации опти мизатор использует статистику распределения данных (некоторый аналог позволяющую оценить избирательность индек са. Статистика обновляется сервером динамически, но может потре боваться немедленне обновление. Чтобы обновить статистическую информацию, отметьте флажок Update statistics, used by query optimizer (Обновить статистику, используемую оптимизатором запросов). Здесь же можно задать величину выборки для принятия решения. По умолча нию в выборку предлагается включить 10% от общего объема данных.
www.books-shop.com
294
Puc. 519.
Microsoft SQL Server 2000, Новейшие технологии
Оптимизация хранения данных.
Как уже говорилось, файлы БД SQL Server могут не только авто матически расширяться, но и сжиматься для высвобождения диско вого пространства. Флажок Remove unused space from database files (Удалить неиспользуемые области файлов БД) позволяет указать, ког да сервер сделает попытку сжать файл и сколько оставить свободного места. По умолчанию выбирается 50 Мб и 10%. Иначе говоря, когда размер файла БД превысит 50 Мб, сервер попытается удалить из него неиспользуемые страницы, чтобы их осталось не более 10% от обще го объема файла. Для всех перечисленных работ Вы можете задать график исполне ния или выбрать предложенный по умолчанию: каждое воскресенье в полночь. | Оптимизировав БД, можно заказать проверку целостности данных (Data integrity test). Сюда входит проверка целостности данных или данных и индексов: флажок Perform internal data integrity tests (Вы полнить внутненнюю проверку целостности данных) и два переклю чателя, определяющие, что именно будет тестироваться. Флажок Perform database integrity tests (Выполнить тестирование целостности базы данных) и два переключателя позволяют назначить проверку целостности самой БД или базы и индексов. Отметив дополнитель ный флажок, Вы укажете, что все проверки должны быть выполнены до создания страховочной копии БД. Очевидно, что последняя долж
www.books-shop.com
ГЛАВА 5; Задания,
операторы
295
на содержать нормальные данные, иначе зачем ее создавать! Здесь же Вы определяете график выполнения перечисленных работ. Следующие два окна служат для определения плана создания стра ховочной копии самой БД и ее журнала транзакций. Помимо созда ния копии, мастер предлагает удалить некоторые созданные ранее Вы указываете, насколько старой должна быть страховочная копия, чтобы ее можно было безболезненно удалить. Кроме того, предлагается выполнить проверку целостности копии после ее созда ния. Для выбранных работ можно принять предложенный или опре делить собственный график исполнения. Как для самой БД, так и для журнала транзакций Вы указываете каталоги, куда будет помещена копия (если копирование выполняется на Определяя каталоги для страховочной копии, Вы можете принять каталог, выбираемый по умолчанию, указать иной каталог. Мастер может включить в задание создание индивидуальных каталогов для копий каждой БД. Кроме того, можно указать собственное расшире ние для файлов копий. В предпоследнем окне Вы указываете, куда записать результаты исполнения перечисленных заданий. Мастер может записать резуль таты в текстовый файл или послать отчет оператору по электронной почте (рис. 520).
Puc. 520. Отчет о работе может быть текстового файла или почтового
Когда все работы определены, мастер выводит полный список и после подтверждения создает набор заданий.
521. План сопровождения базы данных реализуется в виде набора заданий. Теперь мастер вызывается через промежуточное обращение к рас ширенной хранимой процедуре xp_sqlmaint. Ей передается длинная строка параметров, которая в итоге попадает к утилите Параметры описывают все характеристики плана. Индивидуальные задания или вызов Sqlmaint из командной строки выглядят так: EXECUTE DF26C2AB9A02 )То
)Rpt
9524972B)06F1)40F1)A388) Maintenance DISK
UseDefDir )BkExt Вид жутковатый, но передачи всех этих параметров не избежать, так как в таблицах msdb.dbo.sysdbmaintplan_xxxxx хранятся только списки БД, охваченных набором заданий. Даже если передать проце дуре или утилите имя или идентификатор плана, все, что можно най ти, — это состав БД. Так как все задания исполняются по определенному графику, не забудьте, что для нормальной работы SQL Server Agent должна функ ционировать, когда настанет время исполнения задания. Лучше, если эта служба будет работать постоянно. Модифицировать существую щие планы сопровождения как единую задачу можно из списка, раз мещенного в узле Database Maintenance Plans. Щелчок правой кноп кой созданного ранее плана вызывает контекстное меню, и выбор ко манды Properties (Свойства) открывает окно (рис. 522), в котором Вы видите все те же шаги, что и предложенные только что мастером. А теперь вернемся к операциям портирования журнала транзак ций. Мастер работает довольно странно. Вам надо начинать работу в контексте определенной БД. Для этого нужно открыть узел Databases в консоли администратора и, щелкнув интересующую БД, запустить мастер. Текущая БД будет выделена в списке, и Вы можете отметить
www.books-shop.com
ГЛАВА 5:
Задания,
операторы
297
флажок Ship the transaction logs. Если Вы снимете выделение с БД, придется снова запускать мастер, так как при новом выделении име ни БД флажок становится недоступен, а если выделить его заранее, то выделение имени снимает выделение с флажка. Чудеса в решете! Ну да ладно, уж если оно так работает, остается только смириться. Успешно пройдя борьбу с флажками, Вы получаете те же диалоговое окна, что и при формировании плана сопровождения, только там уже будут выделены необходимые для портирования журнала флажки. Новые диалоговые окна начинают появляться после как Вы ука зали каталог для размещения файлов страховочных копий. Вместо плана страховочного копирования журнала появляется окно, где нуж но указать каталог для копий журнала. Далее надо ука зать имя разделяемого каталога, в котором хранятся копии журнала. Мастер не умеет создавать разделяемые ресурсы и не знает списка су ществующих. Поэтому назначить каталог в совместное использова ние придется вручную. Если Вы вводите имя разделяемого ресурса, то даже при его наличии мастер начинает ругаться по поводу того, что не может проверить достоверность введенной информации.
522.
Диалоговое окно модификации плана сопровождения.
www.books-shop.com
298
Microsoft SQL
2000, Новейшие технологии
На следующем этапе надо определить сервер (серверы), на кото рые будет портироваться журнал. Мастер выводит окно, в котором набирается список целевых серверов. Щелчок кнопки Add (Добавить) выводит окно (рис. 523):
Puc. 523.
Здесь Вы определяете параметры процесса
Вы указываете имя сервера (из списка мас тер автоматически определяет каталог, из которого сервер по умолча нию берет страховочные копии. Можете назначить и иной каталог. По умолчанию мастер предлагает заново инициализировать БД, но можно использовать и существующую (если она идентична той, что стоит на основном сервере). При восстановлении журнала БД может оставаться недоступной (восстановление журнала будет происходить с указанием параметра NO RECOVERY) или в режиме ожидания (вос становление задействует параметр STANDBY). Это определяется вы бором переключателей в разделе Database Load State (Состояние БД
www.books-shop.com
ГЛАВА 5: Задания, оповещения, операторы
299
после загрузки В режиме ожидания БД доступна только для чтения, но пользоваться ею можно. В режиме полной недоступности, сами понимаете, БД работает только на прием порций журнала и боль ше ни на что не способна. Для нормального течения процесса порти рования к БД не должны быть подключены пользователи. Для прину дительного отключения пользователей от БД можно пометить фла жок Terminate users in database (Recommended) (Отключить пользова телей базы данных — Щелчок кнопки ОК начинает проверку состояния целевой БД. Головной сервер использует храни мую процедуру sp_MSdbuseraccess для определения параметров БД (средствами функции Если целевая БД на ходится в режиме полноценного доступа, мастер предупредит, что журнал восстановить будет невозможно. Определившись со списком серверов, укажите график создания и передачи порций журнала транзакций в диалоговом окне (рис. По умолчанию копия журнала будет создаваться и отсылаться на це левой сервер каждые 15 минут.
524. сервер.
График создания копий журнала и передачи на целевой
Помимо частоты создания копий журнала, Вы указываете, как ча сто выполнять копирование, как долго журнал должен пролежать на целевом сервере, прежде чем его начнут загружать, и как долго копия будет сохраняться, прежде чем ее удалят с целевого сервера. Для от слеживания процесса мастер создает два оповещения, срабатываю
www.books-shop.com
Microsoft SQL
2000, Новейшие технологии
щих, когда на основном сервере процесс создания резервной копии идет слишком долго и при возникновении проблем с передачей ко пий на целевой сервер. За процессом следит специальный монитор, который по умолчанию ставится на основном сервере, но может быть запущен и на другом. Для работы монитора создается специальный идентификатор Это фиксированное имя, и его обслуживают две хранимые процедуры: log_ship ping_monitor и sp_create_log_shipping_monitor_account. Первая задает идентификатор имя монитора, пароль и тип аутентификации, вторая фактически создает монитор. Следующие шаги работы с мастером определяют журнал ирование перемещений журнала. Мастер позволяет задать каталог для записи текстового файла с отчетом и сервер, на котором будет выполняться процесса в БД MSdb. Вот и все. После того как Вы укажете параметры мастер создаст набор заданий и идентификатор, используемый монитором. На всякий случай посмотрите свойства основной БД. Если при создании использовалась упрощенная модель восстановления, то ко пия журнала для такой базы создана быть не может, и, соответствен но, весь процесс свалится, так и не начавшись. Свойства БД можно посмотреть, вызвав контекстное меню и выбрав команду Properties. Раскрывающийся список на вкладке Option позволяет определить ре жим восстановления БД. Выберите Full. Подсистема рассылки почтовых сообщений Напомню, сервер снабжен компонентом интеграции с почтовой сис темой на базе Microsoft Exchange — SQL Mail. Этот компонент имел ся и в предыдущей версии сервера. До сих пор мы говорили о нем только как о средстве уведомления операторов о ходе и результатах исполнения задания, но его можно использовать и для рассылки ре зультатов запросов, и получения текста команд, которые будут испол няться на сервере. Чтобы использовать SQL Mail на компьютере, где исполняется SQL Server, надо сконфигурировать почтовый профиль. Этот профиль должен быть связан с почтовым принадлежащим учетному записи, под именем которой исполняются службы и SQL Server Agent. Создав и проверив почтовый профиль, откройте административ ную консоль SQL Server и назначьте его службе SQL Server Agent — это делается в окне описания свойств службы на вкладке General (раз дел Mail session). Затем откройте окно свойств самой SQL Mail — этот
www.books-shop.com
ГЛАВА 5:
оповещения, операторы
компонент расположен в группе Support services основной консоли администрирования — и, если профиль там не появился, укажите его еще раз. Кнопка Test позволяет проверить работоспособность про филя уже из среды SQL Server. Для работы с SQL Mail у Вас есть набор хранимых процедур, по зволяющих запускать и останавливать этот компонент сервера (про цедуры и xp_stopmail), обрабатывать почту (процедура Процедура которая сразу и читает и отправляет постовые сообщения, использует три расширенных про цедуры: xp_readmail, и хр Пер вая применяется для поиска почтового сообщения по известному идентификатору. Вторая служит для чтения почтовых сообщений, третья — для их удаления и четвертая — для отправки новых сообще ний. Каждую процедуру можно использовать отдельно. Они прини мают набор параметров, указывающий основные атрибуты почтового сообщения, такие как отправитель, тема письма, тело письма и т. д. Все эти процедуры Вы можете использовать в своем коде. Так, в триг гер можно включить код, отправляющий почтовое сообщение при выполнении некоторых условий, скажем, заказ поставщику, когда наличие товара на складе опустилось ниже указанного предела. SQL DMO: работа с объектами подсистемы исполнения заданий Подсистема исполнения заданий включает следующие основные объекты: Job, Alert, Operator (рис. 525). На рисунке нет двух объек тов, относящихся к групповому управлению серверами — о них речь пойдет в главе 6. Остальные же объекты «растут» из объекта представляю щего всю подсистему исполнения заданий. Сам объект JobServer мож но получить из объекта SQLServer — верхнего в иерархии SQL Чтобы получить доступ к JobServer, надо создать объект SQLServer, подключиться к нему и поместить ссылку на JobServer в соответству ющую переменную: Dim sql As New Dim JobServer As Object Dim AllJobs As Set JobServer =
www.books-shop.com
Microsoft SQL
Рис. 525.
2000, Новейшие технологии
Иерархия объектов подсистемы исполнения заданий.
Создав объект разработчик получает ниточку, потянув за которую, можно остановить и запустить службу SQL Server Agent и создавать любые объекты в рамках подсистемы обработки заданий. Возможно, самое интересное — набор данных, возвращаемый ме тодом объекта, хранящего ссылку на JobServer. Результат исполнения метода следует поместить в предварительно созданный объект типа — аналог таблицы или, если хотите, Recordset. Set
Полученный результат можно разбирать средствами довольно странных, на мой взгляд, методов, но это все, что предлагается. По моему, было бы гораздо удобнее, если б разбор результата выполнял ся как и с объектом Recordset. Начинаем с первой записи, для каждой записи получаем значение (Value) определенного поля — и все. Тут же приходится крутиться. Вы можете получить значение, распо ложенное на пересечении определенного столбца и определенной строки, но просто так результат Вам не отдадут — только в опреде ленном формате. Для этого предлагается целый набор методов, каж дый из которых преобразует (если может) значение ячейки набора в определенный формат: дата, Булево значение, строка, длинное целое и т. д. Проще всего использовать метод (номер
www.books-shop.com
ГЛАВА 5;
операторы
ки, номер Кстати, в отличие от объекта Recordset здесь ну мерация столбцов начинается с 1, а не с 0. Набор, возвращаемый методом EnumJobs, аналогичен тому, что возвращает хранимая процедура Собственно гово ря, именно она и вызывается для наполнения набора Разобрав набор, мы получаем полное представление того, что за задания определены для того сервера, к которому выполнено подклю чение. Необходимые изменения для каждого из заданий можно внести, обратившись к коллекции Jobs. Как и в случае с идентификатором, сначала создайте новый объект типа Job, наполните его нужной ин формацией, а затем вызовите метод Add коллекции Jobs, чтобы поме стить его рядом с ранее определенными заданиями. Объект Job должен иметь минимум один шаг исполнения (Step), в свою очередь являющийся объектом коллекции Steps, и расписание исполнения (Schedule) — член коллекции JobSchedules: Private Dim Dim Dim Dim
Sub SQLServer As New As New JobStep As New JobSchedule As New
Set JobServer = With JobStep = = 1 = "Select End With =
from
With .ActiveStartDate = 19981201 = 120000 End With
SQLJob. Name = = 1 JobServer. Jobs. Add SQLJob
www.books-shop.com
g04
.
Microsoft SQL Server 2000, Новейшие технологии
JobStep
End Sub Заключение В этой главе мы обсудили средства автоматизации административных задач для одиночного сервера. Следующая посвящена средствам, по зволяющим администрировать группы серверов — именно это позво лит снять с администратора немало головной боли, когда в корпора ции хватает серверов, требующих внимания (а какие серверы его не Версия 8.0 изначально проектировалась для решения кор поративных задач, а администрирование — одна из сложнейших про блем, с которыми сталкиваются специалисты, обслуживающие рас пределенные системы.
www.books-shop.com
Глава 6
Групповое
управление
серверами
В версии 7.0 появился мощный механизм группового управления все ми серверами организации, предназначенный: • администратору БД, отвечающему за три и более серверов, осо бенно тому, кто должен управлять группой серверов как единым блоком; • администратору, создающему сложные административные проце дуры; • разработчику хранилищ данных для организации перемещения информации между серверами, подчиняющихся определенному графику исполнения; • разработчику приложений для создания сложных пакетных зада ний или генерации сложных отчетов. Новая версия SQL Server ничего не из этой, весьма по лезной функциональности, хотя, если честно, почти ничего и не при обрела. Возможно, это связано с тем, что вся функциональность груп пового управления построена на базе уже знакомых и отработанных до мелочей заданиях. Зачем нужно групповое управление серверами Любая организация так или иначе структурирована. Структура (чем бы она ни определялась — бизнеспроцессами, географическим распо ложением подразделений и т. д.) заметно влияет на движение данных внутри организации. Поэтому серверы логично объединить — тогда администраторы будут иметь дело с группами серверов, обслуживаю щих потребности подразделений. Если исключить небольшие орга низации, в которых один администратор или административная
па управляет всеми серверами, большая часть административных за дач сосредоточена на работе с подмножеством серверов. Новая модель управления позволяет выполнять административ ные действия по оптимистическому сценарию и выйти за границы принципа «все или ничего». В отличие от транзакций, модифициру ющих данные, которые выполняются полностью или не выполняют ся вообще, административные действия можно осуществить частич но (успешно на части серверов). В классическом случае перенос сум мы из БД на одном сервере в БД на другом выполняется на обоих серверах или не выполняется вообще. С другой стороны, создание нового идентификатора пользователя может быть успешным на од ном сервере и провалиться на другом. По крайней мере это даст пользователю возможность работать хоть с одним из серверов. И тог да вполне достаточно начать выполнение операции для всех заинте ресованных серверов и просто сообщить о неудачах. серверы непросто. По мере роста сложности организации и числа серверов надо искать более изощренные спосо бы решения таких административных проблем, как «чистка» серве ров, создание страховочных копий, восстановление работоспособно сти сервера в нештатных ситуациях и т. д. Задания часто состоят из шагов, исполняемых в форме пакетных команд TSQL и/или пакет ных файлов ОС. Увы, чем больше и сложнее сценарии, тем сильнее болит голова администратора. Где файл с заданием? Когда он должен быть исполнен? Как синхронизировать распространение пакетных заданий на различные серверы? Вопросам несть числа... Следователь но, администратору нужны средства централизованного управления, в основании которых три элемента: 1. набор команд, исполняемый как единая административная еди ница (например, исполнение утилиты DBCC и создание страхо вочной 2. управляемый порядок исполнения индивидуальных шагов задания; 3. централизованное хранение описаний заданий. Главные принципы решения Microsoft для группового админист рирования серверов можно сформулировать так: • предоставить администратору средства для работы с группой сер веров как единой административной единицей; • административные задания рассматриваются в «оптимистичес ком» ключе: единственная неудача на сервере не должна вызывать откат 22 успешных операций на серверах Corpo rate Corporate («фирма должна продолжать • администратор имеет возможность создавать многошаговое задание и получает средства управления логикой исполнения шагов задания.
www.books-shop.com
ГЛАВА 6: Групповое управление серверами Новая архитектура подсистемы исполнения заданий позволяет создать в рамках организации несколько групп серверов, управляе мых одним центральным сервером, своего рода «контроллером доме на» (назовем его «SQLдомен»), используемым как головная единица группового администрирования и как центральное хранилище зада ний и результатов их исполнения. В описании задания администра тор указывает не только что сделать, но и кто будет его выполнять. Серверы в составе SQLдомена периодически запрашивают контрол лер, чтобы выяснить, есть ли для них работа. Сценарии использования Версия 8.0 поддерживает два основных сценария общего назначения при описании заданий. Сценарий 1 Многошаговое задание исполняется на локальном сервере (примерно так же, как и в версии только задача называется «task», а не Шаг Исполнить Dbcc checkdb; в случае успеха создать страховочную копию БД, в противном случае уведомить администратора по элект ронной почте, о том, что база может быть испорчена. Шаг 2: Создать страховочную копию БД Pubs, уничтожить индексы таб лицы использовать для скачивания информации из файла заново построить индексы. Если чтото пойдет не так, восстановить Pubs из копии, созданной на шаге Шаг 3: Используя скачать данные из таблицы titles в файл, запустить утилиту Cleaner.exe для проверки полученного файла и генерации от чета С помощью скачать содержимое файла Cleaner.out в таблицу регистрации, а из нее все новые или модифицированные записи поместить в таблицу В случае ошибки исполне ния шага послать уведомление на пейджер оператора о невозможно сти успешного завершения пакетного задания. Сценарий 2 Многошаговое задание, исполняемое на нескольких серверах. Зада ния могут исполняться параллельно, так как серверыучастники не зависимы. Шаг 1: Создать страховочную копию БД Orders на всех 12 серверах, об служивающих финансовые подразделения компании. Начало созда
www.books-shop.com
308
Microsoft SQL Server 2000, Новейшие технологии
ния копии — 2:00 ночи. Если на одном из серверов возникнет ошиб ка исполнения, уведомить центральную SNMPконсоль. 2: Скопировать файл в каталог C:\temp и с помощью скачать содержимое файла в таблицу New Users на каждом из серверов, обслуживающих регистрацию заказов. Замечу, что в смешанной конфигурации, когда часть серверов — вер сия 7.0, нормальное взаимодействие серверов различных версий возмож но только для стандартного (Default instance) экземпляра «восьмерки». Обзор архитектуры Для участия в групповых операциях администрирования сервер должен быть включен в SQLдомен. Всеми заданиями в таком домене управляет ведущий сервер (Master SQL Executive Server), или MSX (рис.
Рис. 61. серверов.
Распределенная архитектура администрирования группы
Контроллер (MSX) хранит описания всех заданий, исполняемых на серверах Служба SQL Server Agent на сервереучаст нике (Target), известном как TSX (Target SQL Executive server), пери одически подключается к контроллеру, скачивает описание заданий, относящихся к серверуучастнику, и отключается. По исполнении задания серверучастник снова подключается к контроллеру и сооб щает результат. Такой подход (серверучастник запрашивает контроллер, а не кон троллер рассылает задания) обеспечивает лучшую масштабируемость с ростом числа серверовучастников. Подключить новый
www.books-shop.com
ГЛАВА 6:
Групповое управление серверами
309
стник тоже очень просто: нужно лишь сообщить о своем желании войти в состав SQLдомена. Так как контроллер знает о составе сер веровучастников, перечислить их в графическом интерфейсе адми нистратора нетрудно. На крупном предприятии каждый отдел может иметь свой SQL домен и индивидуальные контроллеры, в более мелких — один кон троллер обслуживает все серверы SQLдомена. В версии 8.0 попре жнему каждый серверучастник может входить только в один SQL домен. Заметьте: контроллер SQLдомена и серверучастник друг от дру га ничем не отличаются. Схема БД и исполняемый файл служ бы у них абсолютно одинаковы. Контроллером сер вер делает доверие, оказанное хотя бы одним из серверов и выражен ное в желании признать данный SQL Server контроллером. Специ альной подготовки для работы в роли контроллера SQL Server не тре бует. Как только один SQL Server пожелает подключиться к другому, чтобы получить административные задания, он становится сервером участником, а другой — контроллером. Администратор может уста новить 45 серверов в организации, а спустя полгода подключить 20 к одному контроллеру и 23 — к другому. Для исполнения распределенных операций применяются зада ния, каждый шаг которых задается одной или более команд подсис темы. Описание шагов, определяющее логику исполнения задания (рис. 62), включает возможность завершения всего задания с сооб щением об успехе или неуспехе и перехода на определенный шаг. Кро ме того, для каждого шага указывается число попыток повторного ис полнения в случае неудачи и время ожидания между
Puc. 62.
Каждое задание может включать несколько шагов.
www.books-shop.com
310
Microsoft SQL Server 2000. Новейшие технологии
Логика повторных попыток исполнения шага отделена от логики обработки успешного или неудачного исполнения шага задания. По вторные попытки предпринимаются только при неудаче. Если после одной или нескольких неудачных попыток шаг всетаки исполняется нормально, срабатывает логика обработки успешного завершения шага. Если все попытки исчерпаны, а шаг так и не выполнен, сраба тывает логика обработки неудачного завершения шага. Кстати, при сохранении задания сервер проверяет логику передачи управления в случае неудачи или успешного исполнения шага и, если какойто из шагов остается невыполненным, сервер выводит предупреждение и предлагает изменить логику исполнения.
Рис. 63.
Типичное административное задание.
Повторные попытки организуются только на уровне индивидуаль ных шагов — не задания в целом. Это логично, так как задание
www.books-shop.com
ГЛАВА 6:
Групповое управление серверами
о
но состоит из нескольких шагов и некоторые из них могут отработать успешно и не требуют повторного исполнения. Задание как единицу администрирования можно назначить одно му или нескольким серверамучастникам. Каждый загружает себе с копию описания задания и его шагов. Задание исполня ется локально на сервереучастнике, и результат исполнения также сохраняется локально. Кроме того, результат исполнения пересыла ется контроллеру. Если задание помечается как окончившееся неуда чей, администратор может обратиться к соответствующему серверу участнику, чтобы выяснить причины сбоя и определить шаг, где про изошла ошибка. Такой способ «общения» между серверами одного SQLдомена снижает объем информации, пересылаемой на контрол лер, а администратор получает достаточно данных для обращения к серверу при выяснении причин ошибки. Администрирование нескольких серверов В этом разделе я рассмотрю принципы организации управления груп пами серверов в SQL Server 2000. Концептуальная модель С появлением средств многосерверного администрирования пред ставление задачи разбивается на три новых элемента: задание (Job), шаг задания (Job Step) и серверучастник (Target Server). Центральный элемент — задание — может включать несколько шагов (при этом каждый шаг может принадлежать только одному заданию). Сервер участник можно связать с несколькими заданиями, как и конкретное задание — с несколькими серверамиучастниками.
Рис. 64. Концептуальная модель представления задания в версии Физическая модель Физическая модель обеспечивает связь раучастника и задания. Заметьте: таблица ном выполняет справочные функции.
серве в основ
www.books-shop.com
312
Microsoft SQL Server 2000, Новейшие технологии
65. Схема взаимосвязи системных таблиц, используемых для обслуживания заданий. Приведенная диаграмма описывает базовую схему. Есть еще две таблицы: и Опрашивая контроллер на предмет работы, серверучастник интересуется содержанием именно таблицы Sysdownloadlist. В таблице Sysjobhistory служба SQLExecutive записывает результаты исполнения задания и ее индивидуальных шагов (помимо дополнительной информации). Ниже (рис. по казан результат исполнения запроса: select
message from Sysjobhistory
www.books-shop.com
ГЛАВА 6:
Групповое управление серверами
313
Результат исполнения задания можно увидеть, послав запрос к таблице Определения таблиц Ниже описаны системные таблицы, используемые подсистемой ис полнения заданий. Имя таблицы
Описание
SysDownLoadList
Хранит очередь инструкций на загрузку для всех серверовучастников. Серверучастник считывает записи, имеющие к нему отношение (определяется по значению поля выполняет указанные действия и отмечает эти записи как успешно обработанные. Хранит историю исполнения (и другую текущую информацию, например некритические ошибки) для всех заданий, исполненных на локальном При добавлении новой записи в таблицу используется хранимая процедура в состав которой включен вызов процедуры Последняя проверяет установленный лимит на число записей в журнале и при необходимости удаляет старые записи. Проверка выполняется чтен ием системного реестра средствами расширенной процедуры Хранит информацию о связи (Relationship) задания с одним или более серверамиучастниками. В эту таблицу серверучастник записывает результат исполнения задания (кроме сохранения подобной информации
www.books-shop.com
4
Microsoft SQL Server 2000, Новейшие технологии (продолжение)
Имя таблицы
Описание Хранит основные атрибуты описания задания: уведомление по завершении, способ уведомления, почтовое имя оператора и т. д. Определяет атрибуты графика исполнения задания. Хранит информацию для каждого шага задания. Хранит список серверовучастников, включенных в данный момент в SQLдомен.
Groups
Хранит записи обо всех группах серверов участников, включенных в данный момент в среду группового управления. Хранит список категорий, к которым могут принадлежать новые задания.
Хранимые процедуры Ниже описаны основные хранимые процедуры и триггеры, обеспе чивающие работу подсистемы задач для удаленных серверов. Процедура служит для проверки наличия задания; про веряет параметры, используя процедуру вставляет запись в таблицу Sysjobs. Добавив задачу (что подразумевает определение шагов задачи и указания серверов, которые должны ее исполнять), пользователь дол жен вручную «переслать» задачу на контроллер, чтобы серверыучас тники могли загрузить себе задание. Процедура > проверяет наличие зада ния, проверяет параметры (применяя обновляет запись в таблице Sysjobs (в то же время увеличивая номер версии), размеща ет задание на контроллере посредством процедуры tion с параметрами UPDATE, JOB, заданиях. Процедура | <сервер, инициирующий служит для удаления задания. Для выполнения своей ра боты процедура: • пересылает задание на удаление контроллеру tion DELETE, JOB, • начинает транзакцию: • удаляет запись в таблице Sysjobs, ориентируясь по имени зада ния или имени сервера;
www.books-shop.com
ГЛАВА 6: •
•
•
•
•
управление серверами
удаляет записи из таблицы для задания с указан ным именем или для заданий, полученных от сервера с указан ным именем; удаляет все записи из таблицы Sysjobsteps для задания с ука занным именем или для всех заданий, полученных от указан ного сервера; удаляет все записи из таблицы Sysjobschedules для задания с указанным именем или для всех заданий, полученных от ука занного сервера; удаляет все записи из таблицы для задания с ука занным именем или для всех заданий, полученных от указан ного сервера; фиксирует транзакцию.
Если удаляется задание, не используемое для группового админи стрирования серверов, процедура ведет себя «скромно», т. е. удале ние выполняется только на одном сервере. График исполнения задания добавляет Проце дура проверяет переданные параметры (через процедуру sp_ При добавлении нового графика в таблицу Sysjobschedules вносится новая запись, а в таблице Sysjobs увеличивается номер вер сии для задания (поле Похоже работают процедуры Jobschedule, Про верив параметры, процедура обновляет или удаляет расписание и об новляет номер версии задания. При следующем подключении сервер участник получит обновленное задание. Работу с индивидуальными шагами задания обеспечивает набор процедур Функци онально они очень похожи. При добавлении или модификации про цедура проверяет переданные параметры. Затем вы полняется добавление, модификация или удаление шага и в конце — увеличение номера версии задания. При удалении шага все оставши еся шаги, ссылающиеся на него, помечаются как «unknown» в той части, где описаны действия при успешном или неуспешном испол нении / on_fail_action). Новый сервер в список исполнителей определенного задания до бавляет хранимая процедура <имя <имя серверах Она проверяет имена задания и сервера, добавляет запись в таблицу Sysjobservers и размещает задание на сервереучастнике: Execute серверах
SQL Server 2000, Новейшие технологии Освободить сервер от исполнения определенного задания позво ляет процедура >, серверах Проверив переданные параметры, она удаляет запись из таблицы контроллера, а на сервереучастнике удаляет задание. Execute серверах
DELETE, JOB, Химя заданиях,
Все операции исполняются, исходя из предположения, что сер веручастник присутствует в списке целевых серверов, т. е. его дан ные имеются в таблице Список серверовучастников пополняет хранимая процедура xp_msx_enlist. Запуск задания на исполнение производится либо по установлен ному графику, либо командой <имя заданиях Локальное задание, исполняемое только в рамках данного сервера, запускается на исполнение. Задание, распространяемое на несколько серверов, непосредственно не запускается — вместо этого на контроллере раз мещается требование на запуск задания, серверыучастники получа ют это требование и исполняют указанное задание. Как это работает Для получения детального алгоритма задания, создания расписания и т. д. очень рекомендую утилиту SQL Server Profiler с указанием события Stored как основного в опи сании профиля трассировки. Я постараюсь дать подробное техническое описание работы мно госерверных операций (как это известно на данный Мы рас смотрим процесс определения и исполнения задания, используемого несколькими серверами. Первые четыре раздела посвящены обработ ке задания в хронологическом порядке: • на контроллере создается задание, которое будет исполнено уда ленным сервером (серверами); • на контроллере размещаются инструкции по загрузке задания на исполняющий серверучастник; • на загружаются инструкции по исполнению; • на исполняется задание. Теперь рассмотрим отдельные элементы процесса подробнее.
Генерация задания удаленному серверу (на контроллере) Создать описание задания можно средствами процедуры <сервер>, <имя или в графическом интерфейсе админист ратора. В последнем случае надо щелкнуть правой кнопкой нужный
www.books-shop.com
ГЛАВА 6: Групповое управление серверами
317
объект (в данном случае это server jobs) и выбрать команду New в контекстном меню. В появившемся диалоговом окне несколь ко вкладок: первая позволяет описать общие характеристики задания (рис. 67).
Рис. б 7.
Общее описание нового задания.
Единственное отличие локального задания от того, что должно исполняться в рамках SQLдомена, — список серверов, указываемый для многосерверного задания. Остальное делается точно так же. Вы указываете имя, владельца, категорию и, что самое главное, серверы, на которых задание должно исполняться. Чтобы получить доступ к списку серверов, пометьте переключатель Target multiple servers (За дание охватывает несколько серверов) и щелкните кнопку Change. В появившемся диалоговом окне можно выбрать из списка зарегистри рованных в домене серверов нужные. Для задания можно добавить необходимое число шагов и указать минимум один график исполнения. Если задание должно исполнять ся только по требованию, используйте график One time (Однократное исполнение) и укажите вчерашний день. Задание будет ждать прину дительного запуска. Администратор может (и скорее всего будет) использовать весьма удобный графический интерфейс для работы с заданиями, их шагами и графиками исполнения. Серверы можно приписывать к заданию по одному или группами.
www.books-shop.com
Microsoft SQL
318
2000, Новейшие технологии
Размещение инструкций (на контроллере) Серверучастник периодически запрашивает контроллер, нет ли для него задания. Размещение (Posting) инструкций по загрузке делает их доступными. Инструкции по загрузке — операции (Operations) — раз мещает процедура Эта процедура имеет осо бенность, позволяющую легко вызывать ее на любом сервере: она сначала определяет, является ли сервер контроллером, и, если да, предназначена ли задача для исполнения другими серверами. Если проверка показывает, что процедуре делать нечего, она просто завер шает исполнение. Вот блок кода процедуры определяющей тип операции: SELECT WHEN WHEN WHEN WHEN WHEN WHEN WHEN WHEN WHEN ELSE 0 END
= CASE THEN 1 THEN 2 THEN 3 THEN 4 THEN 5 THEN 6 THEN 7 THEN 8 THEN 9
Синтаксис вызова процедуры таков: [,
[,
[, [, value] Ее аргументы: operation — тип размещаемой операции; object — тип объекта, для которого размещается операция, по умол чанию имеет значение «JOB»; возможно также «SERVER»; в зави симости от выбранного объекта существует выбор операций; • job_id — идентификатор задачи; — имя сервераучастника, для которого создается ин струкция; value — интервал опроса контроллера в секундах.
www.books-shop.com
ГЛАВА 6:
Групповое управление серверами
319
Параметр operation, не имеет значения умолчания и может при нимать следующие значения: Значение
Описание параметра operation
Для объекта SERVER Серверучастник выходит из SQLдомена. DEFECT REENLIST Операция, требующая от сервераучастника еще раз послать на основании которой он участвует в работе SQLдомена. Информация вклю чает частоту опроса контроллера и временную зону домена. Серверучастник также повторно загружает информацию об операторе MSXOperator (оператор с таким именем должен быть создан на контроллере, чтобы обеспечивать групповое администрирование). Устанавливает частоту в секундах для опроса конт SETPOLL роллера серверамиучастниками. Параметр воспри нимается как значение интервала между вызовами. Может принимать значение от 10 до 28 800. По умолчанию серверыучастники опрашивают контроллер и загружают на него результаты исполнения заданий с частотой, равной 1 минуте. SYNCTIME Операция по синхронизации часов сервераучастни ка и контроллера; требует значительных затрат ресур сов — постарайтесь исполнять ее не слишком часто. Для объекта JOB Все задание должно быть удалено. DELETE Добавляет новое задание или обновляет существую INSERT щее. При необходимости операция включает все шаги задания и расписание исполнения. Начало исполнения задания. START Прекращение исполнения задания. STOP Обновляет только информацию о задании в таблице UPDATE Sysjobs, информация о шагах задания или графике исполнения не обновляется. Автоматически вызывается процедурой job (процедура включает команду EXECUTE @job_ID).
www.books-shop.com
Microsoft SQL Server 2000, Новейшие технологии
320
Размещенная операция появляется в таблице значит, что когда надо разместить новое задание наченное для серверов и нистратор контроллера должен выполнить: EXECUTE
Это предназ адми
INSERT, JOB,
Результатом будет создание записей в таблице Sysdownloadlist:
instance source server id
code
type
id
750
1
1
751
1
1
C8F7... 4BF3 C8F7... 4BF3
752
1
1
C8F7...
server
tsx_server_3
4BF3 После того, как задание размещено на контроллере, последующие изменения в его описании должны быть доведены до сведения серве ровучастников. Это можно сделать и средствами списка загрузки. Задание можно отредактировать одним из трех способов: изменить описание задания (например, график исполнения): • используется процедура автоматически вызыва ющая sp_post_msx_operation UPDATE, JOB, 2. модифицировать, удалить, добавить шаг задания: • используются соответствующие хранимые процедуры sp_add_ jobstep / / 3. передать указание исполнить работу или снять с него такую обязанность: • используются хранимые процедуры / sp_ автоматически вызывающие operation INSERT | DELETE, JOB, При создании или редактировании задания для серверовучастни ков следует применять процедуру sp_post_ для разме щения описания заданий. Дело в том, что подобную работу нельзя выполнить в рамках одной хранимой процедуры — вместо этого тре буется вызвать группы хранимых процедур, и именно администратор должен решить, что работа выполнена и описания можно разместить на контроллере. При использовании графического интерфейса все
www.books-shop.com
ГЛАВА 6:
Групповое управление серверами
321
эти действия выполняются «за кулисами», а в командной строке при дется все это делать вручную. Графические инструменты управления серверами, зарегистрированными в SQLдомене, вызываются коман дой Server Administration из контекстного меню по пра вой кнопкой объекта SQL Server Agent (на контроллере домена). В появившемся меню следующего уровня нужно выбрать команду Manage Target Servers (рис. 68).
Puc. 68. Отсюда Вы можете управлять зарегистрированными серверами, изменять параметры заданий, просматривать журнал работы индивидуальных серверовучастников (или всех серверов). Здесь же можно принудить серверыучастники загрузить ожидающие задания, синхронизировать часы и многое другое. Обработка сервером+участником загруженной информации Серверучастник периодически (частота обращений задается) обра щается к контроллеру (имя контроллера хранится в реестре Windows) за новыми инструкциями (рис. 69). При этом серверучастник заг лядывает в таблицу содержащую список инструкций, которые должны быть загружены. Список обрабатывается сервером участником по одной записи за раз в строгой последовательности.
www.books-shop.com
SQL Server 2000. Новейшие технологии
322
SQL Server таблицу Sysdownloadlist)
SQL Server Участник 1 Рис. 69.
SQL Server Участник 2
SQL Server Участник 3
Схема взаимодействия серверовучастников и контроллера
В случае ошибки (например, получено указание обновить несуще ствующее задание) серверучастник записывает условия ее возникно вения в поле таблицы Sysdownloadlist контроллера и не пытается обработать остальные инструкции до исправления ошибки. При отсутствии блокировки нарушилась бы последовательность шагов задания — это чревато разными неприятностями. Заметьте: блокиру ется только тот сервер, на котором возникла ошибка — остальные про нормальную работу. Графический интерфейс предоставляет администратору необходимые данные о процессе загрузки заданий сер верамиучастниками. Если загрузка прошла гладко, запись удаляется. Так что запись в Sysdownloadlist означает, что задание не было загруже но или при загрузке возникла ошибка. Чтобы получить задание, серверуучастнику надо подключиться к контроллеру. Если связь разрывается, все локальные изменения от катываются, запись в таблице Sysdownloadlist остается, а задание бу дет заново загружено и исполнено после восстановления соединения. Последовательность исполнения задания сервером+участником Подключение к контроллеру можно описать следующим псевдокодом.
www.books-shop.com
ГЛАВА 6: Групповое управление серверами
323
IF (в таблице systargetservers есть запись, относящаяся к конкретному серверуучастнику) Обновить значение поля хранящего дату и время последнего запроса на контроллер, вписать текущую дату и время. // Это дает полезную информацию о контактах контроллера с серверами участниками ELSE // Если контроллер удалил нашу запись в процессе восстановления после сбоя Вставить запись в Systargetservers IF (В таблице есть запись с указанием имени сервера участника = <'имя И в поле есть чтото отличное от значения NULL) Принудительно прерываем процесс загрузки инструкций, так как есть неразрешенные проблемы Берем по одной записи из таблицы Sysdownloadlist, относящиеся к указанному серверуучастнику и не содержащие ошибок WHILE (у нас есть еще записи) Открываем локальную (на сервереучастнике) транзакция case // добавляем новое задание INSERT Локальный сервер получает новое задание, все его шаги и все расписания исполнения case // модифицируем существующее задание UPDATE Используя процедуру sp_update_job, вносим изменения в атрибуты задания case // удаляем задачу DELETE В зависимости от ситуации либо просто удаляем задание, либо сначала останавливаем его, потом удаляем case // запускаем задание START Используем хранимую процедуру sp_start_job для запуска определенного задания case // останавливаем задание STOP Используем хранимую процедуру sp_stop_job для запуска определенного задания IF происходит чтото нештатное, в таблице Sysdownloadlist контроллера модифицируем поле и вносим сообщение об ошибке. Локальная транзакция на сервереучастнике откатывается, и загрузка задания прекращается
www.books-shop.com
Microsoft SQL Server 2000, Новейшие технологии ELSE Если все прошло нормально, обновляем таблицу локальную транзакцию и отключаемся от контроллера.
фиксируем
Обработка задания Каждое задание исполняется по определенному графику. Процесс начинается, только если задание имеет атрибут Enabled (доступно для исполнения), упомянуто в таблице как исполняюще еся на локальном (Local) сервере и если задание не исполняется в дан ный момент. Исполнение только локальных заданий позволяет ис ключить попытку контроллера выполнить задание, предназначенное для сервераучастника. Задание, получившее расписание исполнения, обрабатывается по алгоритму: Исполнить задание Кэшировать (загрузить) шаги исполнения задания (из таблицы
Sysjobstep) Последовательно исполнить все шаги задания Записать результат исполнения шагов задания в таблицу Обновить таблицу Sysjobservers результатом исполнения задания Если задание пришло с внешнего сервера, поле originating_server хранит реальное имя а не Подключиться к указанному серверу (контроллер) Обновить таблицы Sysjobhistory и Sysjobservers результатом исполнения задания. Обновления, передаваемые на контроллер, размещаются в очере ди и обслуживаются одним из потоков процесса сервера. Такая архи тектура позволяет обработать ситуацию, когда контроллер недосту пен для приема информации о статусе. Индивидуальные шаги задания исполняются по такому алгоритму: Начать исполнение команды: Выполнить команду (в рамках самостоятельного потока) Ждать завершения задания (периодически проверяя, не было ли отменено задание или не поступала ли команда на остановку службы) IF Исполнение завершилось неудачей IF Шаг позволяет более одной попытки исполнения Записать результат последней попытки в Sysjobhistory
www.books-shop.com
ГЛАВА 6: Групповое управление серверами
325
Ждать, пока не наступит время следующей попытки (периодически проверяя, не была ли отменено задание или не поступала ли команда на остановку службы) Снова начать исполнение шага Else Исполнить логику OnFail (например, переход к указанному шагу)
IF Команда исполнилась успешно Исполнить логику OnSuccess (например, переход к указанному шагу) Обновить таблицу Sysjobsteps результатом исполнения Записать результат исполнения в Sysjobhistory Переход (на следующий шаг или выход, если задание завершено). Размещение заданий на контроллере Все инструкции по загрузке помещает в таблицу цедура
про
Включение в SQL+домен, выход из домена Для включения сервераучастника в домен или исключения его из SQLдомена служат хранимые процедуры xp_msx_enlist и xp_msx_ defect. Синтаксис вызова очень прост: exec
2. 3. 4.
5. 6.
7.
exec
Процедура xp_msx_enlist работает так: опрашивает реестр сервераучастника, не включен ли данный сер вер в иной SQLдомен, и, если да, операция прерывается; получает имя текущего контроллера (если он есть) из реестра сер вераучастника; подключается к указанному контроллеру и записывает ему инст рукцию выхода из SQLдомена; контроллер считывает инструкцию, исполняет процедуру sp_de lete_ удаляет имя регистрации (Login), сформирован ное специально для сервераучастника и посылает уведомление на серверучастник; имя регистрации формируется из имени сервера и стандартного окончания: <имя сервера> + ожидает уведомление от контроллера; удаляет все задания, полученные от текущего все за дания, полученные от контроллера и исполняющиеся в данный момент, отменяются (останавливаются) и удаляются; удаляет ключ в реестре сервераучастника;
8. подключается к указанному контроллеру и записывает ему инст рукцию о включении сервера в состав SQLдомена; 9. контроллер считывает инструкцию о включении в состав домена, добавляет имя сервера в таблицу добавляет имя регистрации с созданием пароля на основании уникального идентификатора сервера, назначает права доступа (Access privileges) в рамках базы Msdb и посылает уведом ление обратно на серверучастник; 10. ожидает уведомление от контроллера; записывает имя нового контроллера в локальный 12. записывает в реестр метку, предотвращающую использование дан ного сервераучастника в качестве контроллера (SQL Server 8.0 не поддерживает вложенность SQLдоменов). Процедура xp_msx_defect выполняет действия, описанные в пп. 6 для Роспуск SQL+домена Это очень просто. Администратор создает задание из единственного шага с командой, содержащей вызов процедуры sp_msx_defect. Зада ние рассылается на исполнение всем серверам SQLдомена. По вы ходу всех серверовучастников из SQLдомена контроллер становит ся обычным сервером. Чтобы включить серверучастник, вышедший из SQLдомена, в другой домен, надо подключиться к соответствующему контроллеру. Несколько советов, относящихся к управлению SQLдоменом. • Серверучастник, изменивший имя, должен выйти из SQLдоме на и заново к нему подключиться. Это делают системные храни мые процедуры: EXEC EXEC •
контроллерах
Не играйте с именем контроллера SQLдомена. Прежде чем его менять, все должны выйти из SQLдомена. Пос ле смены имени серверыучастники вручную вводятся в домен.
Архитектура подсистемы исполнения заданий В версии 8.0 в любой момент времени может исполняться только один экземпляр конкретного задания (рис.
www.books-shop.com
ГЛАВА 6;
Групповое управление серверами
32?
Поток менеджера задании (Job manager thread) Кэширование шагов исполнения задания Для каждого шага Процесс
Исполнить команду
команды Попытаться еще раз (при необходимости) по требованию Исполнить логику успешного/неуспешного завершения Исполнить логику, завершающую исполнение задания
Рис. 610.
Архитектура подсистемы исполнения задач.
•
Диспетчер (Scheduling engine) периодически просматривает опи сания заданий и выставляет флаг, о том, что заданию пора Если задание в данный момент исполняется, для него просто обновляется дата и время следующего исполне ния. При этом в журнал событий или ошибок вносится запись о том, что задание пропустило очередной запуск, поскольку нахо дилось в процессе исполнения. • Диспетчер исполнения заданий (Execution engine) периодически просматривает задания и для тех, что должны начать исполнение, создает поток менеджера заданий (Jobmanager thread). • Менеджер заданий (Job manager) всегда исполняется в собствен ном потоке и управляет исполнением задания. При старте очеред ного шага задания менеджер обновляет в списке заданий элемен
www.books-shop.com
SQL Server 2000, Новейшие технологии ты, описывающие номер и состояние текущего шага задания. Это позволяет аккуратно отслеживать текущее состояние задания. Так как поток, в котором исполняется менеджер активен во все время исполнения задания, число потоков, используемых под системой SQL Server Agent, значительно увеличивается (примерно вдвое). К счастью, менеджер заданий большую часть времени ожида ет завершения исполнения команды, и его активность не особенно влияет на общую производительность системы. Разграничение доступа Описание задания в SQL Server 8.0 может видеть только тот, кто его создал (или администратор). Создаваемый для сервераучастника идентификатор дает право на исполнение команды SELECT для всех заданий и их шагов, но, так как только SQL Server Agent знает прави ла генерации пароля, пользователь не сможет воспроизвести его и подключиться к серверу от имени SQL Server Agent. Контроллер со здает собственный идентификатор для каждой подсистемы SQL Server Agent сервераучастника. Пароль участника хранится в таблице зашифрован и для прямого чтения недоступен. При подключе нии пароль заново генерируется и сравнивается с хранящимся на кон троллере. Пароль никогда не хранится в открытом виде и не виден никому, кроме самой системы. Для предотвращения доступа локального (для системного администратора локально создаваемые задания шифро ваться не будут. Проблемы, проблемы Возможности администратора велики, средства администрирования удобны, однако рано или поздно любой администратор сталкивается с проблемами. В этом разделе я рассмотрю некоторые проблемы, ко торые могут встретиться при групп серверов и то, как SQL Server помогает свести потери к минимуму. Контроллер недоступен Поток, отвечающий за загрузку заданий, аккуратно завершает работу на всех серверахучастниках, загрузка заданий прекращается. Резуль таты исполнения загруженных ранее заданий помещаются в очередь в памяти сервераучастника. Эта очередь для дополнительной со хранности сбрасывается в файл (Tsxcache.bin) при каждом добавле нии или удалении записи в очередь. Такая схема обеспечивает надеж ность хранения очереди, если сам серверучастник попал в неприят
www.books-shop.com
ГЛАВА 6: Групповое
серверами
329
ситуацию (падение питания, сбой системы и т. п.). Интервал сброса очереди на диск составляет не более секунды. Содержимое файла Tsxcache.bin загружается в память при старте системы. Сервер+участник недоступен На контроллере может образоваться очередь незагруженных заданий. Когда серверучастник возвращается в рабочее состояние, поток, от вечающий за загрузку заданий, старается побыстрее очистить завал. Локальный администратор удалил или отредактировал задание, полученное от контроллера Система безопасности SQL Server 2000 не позволяет полностью заб локировать путь системному администратору. Тем не менее сервер способен отследить факт модификации (поле табли цы Sysjobs обновляется при каждом редактировании). Кроме того, задание легко заново синхронизировать с контроллером. Восстановление при сбоях При переустановке Msdb на сервереучастнике события могут разви ваться по двум сценариям: 1. Msdb потеряна, и страховочной копии нет; 2. страховочная копия есть, и Msdb можно успешно восстановить. В первом случае надо разместить на сервереучастнике все зада ния, утерянные с Msdb: EXECUTE
INSERT, JOB, ALL, NULL,
Эта команда заставляет процедуру добавить по одной записи «JOB INSERT» для каждого задания, предназначен ной для исполнения указанным серверомучастником. В зависимос ти от количества заданий, «застрявших» на контроллере, процесс мо жет занять несколько секунд. Во втором случае, когда Вы сможете восстановить Msdb из копии, лучше всего удалить все задания, полученные от контроллера, и за ново разместить их, как для сценария EXECUTE sp_post_msx_operation DELETE, JOB, ALL, EXECUTE INSERT, JOB, ALL, Химя Интерфейс пользователя Задание, исполняемое на нескольких серверахучастниках, можно в списке, расположенном под объектом SQL server agent/ server jobs (рис.
www.books-shop.com
330
Microsoft SQL Server 2000, Новейшие технологии
611. предназначенные для исполнения серверами участниками, расположены в общей группе.
Щелчок правой кнопкой имени задания вызывает контекстное меню, позволяющее получить сведения о задании, его статусе, запус тить его на исполнение, отключить и т. д. Команда Properties позволяет отредактировать задание, его шаги и расписания исполнения, Refresh job — обновить информацию, вы водимую в основном окне ММС. Подробнее об истории исполнения задания позволяет узнать ко манда Job status. Появившееся диалоговое окно (рис. 612) содержит список заданий, который можно отсортировать по имени задания (переключатель Show status by Job) или имени сервера, выполняюще го задания (переключатель Show status by server). В зависимости от типа сортировки отображается перечень заданий для данного сервера или серверов со сведениями о состоянии данного задания. Задание или сервер выбираются в раскрывающемся списке. Для каждого за дания выводится информация о сервере, последнем запуске и сведе ния том, было ли исполнение задания успешным. Щелчок кнопки View remote job history выводит справочное окно с полной информацией об истории выполнения задания, объем кото рой зависит от параметров SQL Server Agent в части, касающейся таб лицы общее число записей в таблице и число записей, хранящееся для каждого индивидуального задания.
www.books-shop.com
ГЛАВА 6:
Групповое управление серверами
331
Рис. Диалоговое окно содержит информацию о состоянии заданий и серверахучастниках SQLдомена.
Сняв флажок Show steps details, Вы отключите вывод истории ис полнения индивидуальных шагов задания. По умолчанию выводится имя индивидуального шага, успех или неудача его исполнения и то, был ли уведомлен оператор, которому положено получать информа цию по окончании исполнения шага. Кнопка Clear all служит для очистки таблицы от за писей, хранящих историю исполнения выбранного задания. Щелчок кнопки Target server status выводит окно с информацией о состоянии сервераучастника (рис. 613). Помимо прочего, Вы уз наете о том, когда указанный серверучастник обращался к контрол леру за получением задания, и об общем состоянии сервера (на уров не Если почемулибо сервер не загрузил с контроллера инст рукции, это будет отражено. На этой же вкладке есть еще несколько кнопок. Кнопка Force poll заставляет серверучастник обратиться к контроллеру за инструкци ями. Это может понадобиться, когда интервал опроса задан достаточ но большой, а Вам нужно срочно отправить описание задания на ис полнение серверуучастнику. Кнопка Force defection «изгоняет» сер веручастник из домена. Кнопка Post позволяет откоррек тировать частоту, с которой серверучастник обращается к контрол леру за инструкциями, разместить на задание на
www.books-shop.com
332
Microsoft SQL Server
Новейшие технологии
выполнение того или иного задания, выполнить синхронизацию ча сов на двух компьютерах и разместить задание на выход из SQLдо мена. Щелчок этой кнопки вызывает диалоговое окно
Общая информация о состоянии сервераучастника.
Диалоговое окно для определения заданий, размещаемых на сервереучастнике.
www.books-shop.com
ГЛАВА 6: Групповое управление
333
Синхронизация часов серверовучастников выполняется по часам контроллера. Вторая вкладка позволяет просмотреть перечень инструкций, заг руженных серверомучастником с контроллера. Два раскрывающих ся списка в верхней части вкладки позволяют выбрать конкретный серверучастник, определенное задание, для которого загружены ин струкции. Можно также указать, что список должен включать все сер верыучастники или все задания (рис. 615).
Список инструкций, загруженных серверомучастником.
Последняя кнопка диалогового окна Server Job Execution Jobs (Синхронизировать задания) служит для синх ронизации заданий между контроллером и серверамиучастниками. Эта операция гарантирует, что после модификации описания зада ния на контроллере все серверыучастники обеспечены наиболее све жими инструкциями по исполнению задания. Создание нового контроллера и сервера+участника Определить состав SQLдомена помогают два мастера (рис. 616), вызываемых из контекстного меню, появляющегося по щелчку пра вой кнопкой объекта SQL Server Agent соответствующего сервера. Выбор из основного контекстного меню команды Multi Server Admi
www.books-shop.com
334
SQL Server 2000. Новейшие технологии
выводит меню следующего уровня. Если выбранный сервер еще не участвует в групповой работе, меню включает команды Make this a Master (Сделать выбранный сервер контроллером) и Make this a Target (Включить выбранный сервер в качестве участника в существу ющий При выборе любой из команд Вы увидите застав ку соответствующего мастера.
Рис. 616. Мастера, помогающие комплектовать SQLдомен, вызываются из контекстного меню. Первый служит для подготовки выбранного сервера к работе в качестве контроллера. Мастер создания контроллера (рис. 617) со здает оператор устанавливает соответствующие пара метры системы проверки прав доступа (применяется смешанная тема запускает службу SQL Server Agent и подключает ука занные Вами серверы в качестве участников SQLдомена.
www.books-shop.com
ГЛАВА 6: Групповое
617.
серверами
335
Мастер помогает создать контроллер SQLдомена.
Хотя оператор, обслуживающий задания группового управления, создается автоматически, он представляет собой такой же оператор, как те, что Вы создаете для любой другой задачи. Имя MSXOperator представляет живого человека, имеющего адреса электрон ной почты, пейджера и работающего за компьютером, на который можно послать сообщение средствами net send.
Puc. 618. Оператор MSXOperator принимает на себя все тяготы группового управления серверами. Ⱦɚɧɧɚɹɜɟɪɫɢɹɤɧɢɝɢɜɵɩɭɳɟɧɚɷɥɟɤɬɪɨɧɧɵɦɢɡɞɚɬɟɥɶɫɬɜɨɦ%RRNVVKRS ɊɚɫɩɪɨɫɬɪɚɧɟɧɢɟɩɪɨɞɚɠɚɩɟɪɟɡɚɩɢɫɶɞɚɧɧɨɣɤɧɢɝɢɢɥɢɟɟɱɚɫɬɟɣɁȺɉɊȿɓȿɇɕ Ɉɜɫɟɯɧɚɪɭɲɟɧɢɹɯɩɪɨɫɶɛɚɫɨɨɛɳɚɬɶɩɨɚɞɪɟɫɭ[email protected]
336
SQL Server 2000,
технологии
Если Вы позднее решили добавить новый сервер в SQLдомен, вызовите мастер Make this a target server Wizard (рис. 619). Он вклю чит выбранный сервер в домен, управляемый указанным Вами кон троллером. При этом мастер проверит, что сам SQL Server и SQL Server Agent исполняются в контексте правильных учетных записей.
Puc.
Этот мастер помогает включить сервер в домен.
Объектная модель и управление заданиями Среди объектов SQL DMO представлены и те, что позволяют мани пулировать компонентами подсистемы исполнения заданий. Есть и что относятся к управлению индивидуальными серверами, и предназначенные для автоматизации административных задач, рас пространяющихся на группу серверов. К первой категории относятся объекты, о которых шла речь в главе Ко второй — всего два: коллекция и входящие в нее объекты Они позволяют указать сервер, который должен выполнять задание. Кроме того, у объекта есть ме тоды (MSXEnlist и MSXDefect), благодаря которым он может вклю читься в домен и выйти из него, и свойство позво ляющее программисту определить, какому контроллеру подчинен серверучастник. Объект Job также имеет несколько методов, позволяющих назна чить задание на исполнение указанному серверуучастнику. Методы и назначают задание на
www.books-shop.com
ГЛАВА 6: Групповое управление серверами
337
исполнение зарегистрированному в SQLдомене серверу или группе. Методы и сни мают с соответствующего сервера или группы ответственность за ис полнение задания. Заключение Итак, мы разобрали групповое управление серверами на админист ративном уровне. Теперь логично перейти к рассмотрению процесса репликации — одного из самых интересных, но и довольно сложных аспектов работы SQL Server. Этой теме посвящена следующая глава.
www.books-shop.com
www.books-shop.com
Глава
7
Репликация
данных
Репликация (Replication) — не только одна из интереснейших воз можностей, но и один из самых сложных аспектов работы с SQL Server, так как по определению репликация подразумевает участие в процессе минимум двух серверов. Строго говоря, процесс распрост ранения изменений можно организовать и в рамках одного сервера — именно так я и поступал, чтобы подготовить демонстрацию на се минаре или конференции, но это крайний случай, и подсистема реп ликации проектировалась вовсе не для него. Возможность распространять изменения, сделанные на одном сер вере, на группу других появилась еще в SQL Server 6.0, в «восьмерке» она получила дальнейшее развитие. Это особенно важно с учетом того, что размеры баз данных все время растут и передача начального сним ка по сети оказывается слишком долгой даже при хорошем сетевом со единении, а уж если сеть слабая... Более того, саму БД можно отсоеди нять от одного подписчика и подключать к другому. Подключенная БД сразу начнет принимать данные от соответствующего издателя. Дополнительная гибкость обеспечивается возможностями модифи кации схемы БД. Удалив поле в опубликованной таблице, Вы увидите, что эта модификация была распространена на таблицу подписчика. Модель репликации и ее основные компоненты Как и в предыдущих версиях, процесс репликации строится на осно ве метафоры издатель (Publisher) — подписчик (Subscriber). Издатель открывает для доступа публикации (Publication) — информацию, хра нящуюся таблицах базы данных (БД). Публикация состоит из статей (Article). Статья может представлять собой полную таблицу или ее часть. При определении статьи можно указать набор полей, создав таким образом вертикальное разделение (Vertical partitioning) данных. Если при описании статьи указывается условие, определяющее вхож
www.books-shop.com
Microsoft SQL Server 2000, Новейшие технологии дение записи в таблицу, речь идет о горизонтальном разделении (Ho rizontal partitioning) данных. Издатель — сервер, открывающий данные для размещения на дру гих серверах, — отвечает за определение реплицируемых данных и выставление флагов на изменения, происшедшие с момента после дней синхронизации. Издатель также хранит сведения о всех публи кациях. У любого элемента информации только один издатель, даже если его модифицировали многие подписчики или повторно опубли ковал один из подписчиков. хранит реплику данных и принимает модифи кации. Кроме того, он может вносить изменения в таблицы, не ста новясь при этом издателем. В многоступенчатой схеме репликации подписчик может служить издателем для других подписчиков. Как я уже говорил, публикация — это набор из одной или более статей. Такое группирование облегчает подписку. Публикация пред ставляет собой логически объединенный блок. Подписка выполняет ся на публикацию, а не на отдельные статьи внутри нее. Типы репликации задаются инициатором рассылки данных и принципами, определяющими собственно процесс. Инициатором может быть либо издатель [тогда репликация называется принудитель ной (Push либо подписчик по запросу (Pull О принципах репликации я скажу чуть позже. При принудительной рассылке издатель самостоятельно опреде ляет необходимость передачи измененных данных. От подписчика не требуется запроса на распространение информации. Обычно такой тип репликации применяется, когда временной разрыв между моди фикацией на издателе и обновлением информации на подписчике должен быть минимален. Принудительная рассылка может оказаться полезной, если загрузка сервераиздателя не влияет на производи тельность системы в целом. Возможна также принудительная рассыл ка по определенному графику. При рассылке по запросу подписчик периодически или по мере надобности требует от издателя все накопившиеся изменения. Этот способ удобен при большом количестве подписчиков (если, напри мер, подписчики обращаются через Интернет). Кстати, одна публи кация может поддерживать оба типа рассылки. В сложной сети, серверы которой связаны каналами, сильно от личающимися по производительности, можно использовать проме жуточный сервер — дистрибьютор (Distributor). Он располагается между издателем и подписчиками и хранит БД Distribution, куда зано сятся команды, относящиеся к процессу репликации, и другая ин
www.books-shop.com
Репликация данных формация. Если в специальном сервере нет роль дистрибью тора может взять на себя издатель. Перед началом регулярного процесса репликации на подписчике надо создать БД, в точности соответствующую БД на издателе, т. е. произвести начальную синхронизацию. Когда на издателе создается очередная публикация, вся подготовительная информация для буду щих подписчиков выкладывается в специальный каталог, откуда ее забирает агент, ответственный за инициализацию. Подготовительная информация включает описание таблицы, поддерживаемой подпис чиком, команды по созданию индексов и собственно данные. Если БД очень велика, туда, где стоит серверподписчик, можно просто пе редать ленту с копией БД, и тогда от первоначальной синхронизации можно Репликацией управляют агенты — это по сути дела задания SQL Server. Перечень агентов определяется типом репликации, и, прежде чем перейти к их описанию, я расскажу о поддерживаемых типах реп определяемых составом пересылаемых данных и правами на модификацию участников процесса. SQL Server 2000 поддерживает репликацию моментальных снимков (Snapshot replication), репликацию транзакций (Transactional replication) репликацию сведением (Merge replication). Репликация моментальных снимков Как следует из названия (snapshot — снимок), этот тип использует моментальные снимки статей для передачи на подписчик. В отличие от передачи индивидуальных транзакций этот тип не требует посто янного мониторинга деятельности сервера и поэтому менее требова телен к ресурсам компьютера. В отличие от репликации транзакций, т. е. передачи на серверподписчик команд INSERT, UPDATE, DE LETE и других модификаций, репликация снимков подразумевает полное обновление набора данных на подписчике. Если статья вели ка, такой тип репликации способен серьезно загрузить сеть. При репликации моментальных снимков подписчики мало зави сят от издателя. Это удобно, когда на подписчике хранится в основ ном справочная информация вроде прайслистов или если БД ис пользуется в основном для принятия решений. Подписчик может во обще не иметь постоянной связи с издателем. Репликация моментальных снимков осуществляется двумя аген тами SQL Server: создания моментальных снимков (Snapshot Agent) и распределения (Distribution Agent). Первый отвечает за создание фай лов, содержащих моментальный снимок и описание схемы публикуемых статей, второй пересылает данные подписчику.
www.books-shop.com
342
Microsoft SQL
2000,
Репликация транзакций Чтобы отслеживать модификации, относящиеся к статьям, реплика ция транзакций активно обращается к журналу транзакций. Измене ния фиксируются в БД выступающей как долговремен ное хранилище очередей. Все изменения распространяются по под писчикам в порядке их появления в основной БД. При таком типе репликации любой элемент данных имеет своего издателя. Изменения постоянно перемещаются от издателя к подпис чику. При наличии надежного постоянно действующего канала связи изменения попадают к подписчику практически в режиме реального времени (задержка составляет несколько десятков Если поддерживать постоянно действующий канал невозможно, например, в случае часто перемещающихся пользователей, подпис чик может получать данные по требованию. Процесс репликации поддерживается тремя агентами SQL Server: создания моментальных снимков (Snapshot Agent), чтения журнала транзакций (Log Reader Agent) и распределения (Distribution Agent). Первый выполняет практически те же задачи, что и для репликации моментальных снимков. Второй отвечает за мониторинг действий сервераиздателя, с тем чтобы все модификации данных были отра жены в БД Distribution. Третий обеспечивает передачу начальных фай лов синхронизации и последующих команд подписчику. Log Reader Agent может быть активен постоянно или запускаться по графику. Агент читает журнал транзакций, и транзакции с отмет кой «для репликации» переносятся в Distribution в виде команд IN SERT, UPDATE, DELETE. При этом транзакции, выполненные над БД на сервереиздателе, и транзакции, размещенные в БД Distribution, сохраняют соответствие одинкодному. Обращаясь к Distribution, Distribution Agent определяет, какие ко манды передать подписчику. Эта БД предназначена только для хра нения очередей команд, предназначенных для репликации, пользо вательских таблиц в ней нет. Репликация сведением Этот наиболее сложный из всех поддерживаемых тип репликации появился в версии 7.0. Технология, применяющая процессор Jet и портфель (Briefcase), впервые представленная в Microsoft вер сии 7, давала пользователю возможность вносить изменения в свою копию БД с последующей синхронизацией с основной копией и обес печивала разрешение конфликтов. Основное преимущество такого способа — работа без постоянного подключения к основной БД и внесения изменений в «собственную» копию. Однако в том виде, как
www.books-shop.com
ГЛАВА 7;
Репликация данных
.
343
она была реализована, технология не обеспечивала целостности. SQL Server 2000 поддерживает подобный тип реплика ции — репликацию сведением (Merge replication). При репликации сведением можно изменять любую копию статьи, участвующую в репликации, редактирование данных может выполнять и издатель, и любой подписчик. Со временем все изменения сводятся Неизбежные при этом конфликты модификаций должны раз решаться. Так как изменения может выполнять любой реп все изменения отслеживаются и фиксируются в специальных системных таблицах, создаваемых в БД, в которой организованы пуб ликации. Позднее по графику или по требованию запускается агент сведения (Merge agent) — онто и сводит изменения. При возникновении конфликтов модификаций выбирается побе дитель (Winner), чьи изменения признаются верными. Победитель выбирается на основе весов, назначаемых каждому участнику процес са. Вес издателя всегда максимальный, подписчиков — в диапазоне от 0 до 99,99, но не больше, чем у издателя. Веса могут назначаться принудительно или наследоваться от издателя. В первом случае вес, присвоенный подписке, вносится в метаданные записей с внесенны ми изменениями [это называется глобальной подпиской (Global subsc и путешествует вместе с ними. Во втором случае — при ло кальной подписке (Local subscription) — вес не увязывается с модифи цированными записями, пока не придет пора сводить изменения на издателе. После этого запись также получает вес, который сопровож дает ее во всех перемещениях. Все изменения, сделанные побежден ным (Loser) сервером/серверами, сохраняются в таблице издателя, чтобы позднее администратор мог вручную определить победитель и заместить решения, принятые сервером автоматически. Когда сервер не способен самостоятельно разрешить конфликт, соответствующие сообщения заносятся в таблицы, обслуживающие репликацию, и ад министратор разрешает конфликт вручную на основании собранной информации. Отслеживание изменений
При включении таблицы в публикацию, используемую в репликации сведением, сервер добавляет в таблицу еще одно поле с типом дан ных GU1D. Глобально уникальный идентификатор применяется для идентификации записи в другой БД при размещении изменений. Помимо модификации самой таблицы с данными, в БД, участвую щую в репликации, добавляется целый набор системных таблиц и хранимых процедур. Информация о внесенных изменениях хранится в таблице Каждая запись в ней содержит сведения о поколении (Generation) изменения. Для отметки о факте изменения
www.books-shop.com
344
Microsoft SQL
2000, Новейшие технологии
сервер не использует поле типа или иное, хранящее дату и время. Когда запись изменяется (кроме модификаций, выполненных самим агентом для сведения изменений) поле generation соответству ющей записи получает значение 0. При сведении агент собирает все записи поколения 0 в одну или более групп, и величина поколения растет. Каждый сервер отслеживает значение наивысшего поколения, отосланного на другие серверы, и наивысшее значение поколения у полученных записей. Например, узлы А и В хранят по 100 поколений записи, номер последнего поколения, полученного узлом В от А, — 99, для узла А номер последнего поколения, полученного от узла В, — 99. При син хронизации узел А перенумерует все записи с номером поколения О на номер Узел В также перенумерует все поколения, имеющие номер 0, на 101. Записи поколения 100 и 101 узла А будут переданы на узел В, где они получат номера 102 и 103. Записи поколений 100 и 101 с узла В будут переданы на узел А и получат номера 102 и 103. В конце синхронизации оба узла будут знать о всех 103 поколениях, известных другому узлу. Физически модификации отслеживаются триггерами. Именно здесь в первую очередь проявляется полезность множественных триг геров версии 7.0, исполняющихся при модификации данных и не ме шающих друг другу. При объявлении таблицы к публикации система создает три типа триггеров: на удаление, модификации и добавление. Если позднее структура таблицы модифицируется, триггеры создают ся заново. Триггеры получают немыслимые имена вроде ins_5DB4E66 но зачем Вам их запоминать? Положение на узле В Сервер
Последнее значение входящих записей
Последнее значение исходящих записей
99
99
Сервер
Последнее значение входящих записей
Последнее значение исходящих записей
В
99
99
А
100
100
Положение на узле А
www.books-shop.com
ГЛАВА 7:
данных
345
При добавлении новой записи соответствующий триггер добавля ет запись в таблицу Msmerge_contents для каждой записи таблицы Inserted. При срабатывании на обновление триггер проходит по всем записям в таблице Deleted, хранящей образ записи до модификации, и вносит изменения в соответствующие записи таблицы Msmerge_ contents. Поиск записей выполняется по уникальному идентифика тору и псевдониму таблицы. При срабатывании на удаление триггер просматривает все записи таблицы Deleted, создает новые записи в таблице Msmerge_tombstone и удаляет соответствующие записи из таблицы Msmerge_contents. Позднее удаление распространяется на остальные серверы. и разрешение конфликтов модификации Когда распространенную во множестве копий таблицу могут моди фицировать все желающие, попытка свести изменения ко всеобщему удовлетворению неизбежно приведет к конфликтам. Для определе ния и разрешения конфликтов SQL Server создает сложный механизм, построенный на дополнительных системных таблицах, триггерах и хранимых процедурах. Одна из основных таблиц — Msmerge_contents — имеет поле Lineage, где хранится «родословная» записи. При лю бых изменениях записи службы репликации автоматически модифи цируют значение этого поля. В поле хранится по одному элементу для каждого сервера, изменявшего конкретную запись. Элемент поля, описывающий сервер состоит из двух частей: идентификатора серве ра и идентификатора версии, созданной этим сервером. Версия ну меруется с 1 и увеличивается только при изменении записи. Напри мер, значение 3), (В, говорит, что вначале запись была встав лена на сервере В, а затем сервер А дважды модифицировал ее. Ком понент, выполняющий сведение изменений, принимает во внимание версии записи для каждого сервера. Множественные модификации «проигравшей» записи Если несколько серверов сделали изменения записи, не отразившие ся в «победившей» версии, информация о возникших конфликтах сохраняется на каждом сервере. Сравнивая две версии записи, ком понент репликации анализирует родословную проигравшей, чтобы найти самую старшую версию записи, соответствующую модифика ции, выполненной локальным сервером. Если локальный сервер не изменял проигравшую запись или в результате модификации была по лучена версия, включенная в родословную записипобедителя, кон фликта не будет, и на локальном сервере ничего не записывается. Если изменение было сделано, но полученная в результате версия не
вошла в родословную победившей записи, мы имеем дело с конф ликтом — его описание сохраняется на локальном сервере. Например, при синхронизации серверов А и В обнаружено, что родословные записей на соответствующих узлах описываются как 3), (А, и 4), (D, 2), (А, Вторая версия записи победит, так как сделанная сервером А, не была известна серверу В, когда тот создал победившую версию. Для сохранения информа ции об отвергнутой модификации на А делается запись. Если затем сервер С будет синхронизирован с А или В, компонент репликации обнаружит, что В выполнил победившую версию, не зная об измене нии, сделанном С. Сведения о конфликте сохранятся на С. Сохраненная информация о конфликте Сохраняя информацию о конфликте на издателе, компонент репли кации сначала копирует проигравшую запись в таблицу конфликтов, имеющую ту же структуру, что и реплицируемая таблица. Записьпо бедитель хранится в основной таблице. Записи таблицы Sysmerge articles хранят сведения о том, какие таблицы связаны с таблицами, попавшими в «зону конфликта». Администратор может создать спе циальные запросы и код для анализа конфликтов и подменить стан дартный способ разрешения конфликтов. Некоторые типы конфликтов не позволяют передать изменения с одного сервера на другой. Пример — попытка двух серверов вставить новую запись с одним значением первичного ключа. Если обе опера ции Insert окажутся успешными, никто не скажет, что нарушено ог раничение, пока компонент репликации не попытается синхронизи ровать оба сервера. Информация о подобного рода конфликтах также сохраняется в специальной таблице. Некоторые проблемы, возникающие при синхронизации, могут быть недолговечны — например, блокировки. Другие, вроде наруше ния уникальности ключа, требуют вмешательства человека. В ситуа ции с дубликатом ключа одно из решений — удалить какуюнибудь запись. После разрешения проблемы сведения об ошибке удаляются, и останется лишь подождать, пока изменения распространятся на ос тальные серверы. Компоненты репликации сведением Репликация сведением, как самый сложный вариант, требует гораздо большего внимания со стороны сервера. Для ее выполнения необхо димы:
www.books-shop.com
ГЛАВА 7;
данных
347
компонент слежения (Tracking включающий набор систем ных таблиц, триггеров и хранимых процедур для определения мо дификаций в опубликованных статьях; • компонент разрешения конфликтов (Reconciler Interface), возникаю щих при модификациях данных разными серверами; в процессе так же участвуют агенты создания моментальных снимков и сведения. Административный интерфейс, основанный на SQL DMO, под держивает репликацию транзакций и репликацию сведением. Ком поненты SQL DMO обеспечивают вызов хранимых процедур репли кации. Эти же процедуры могут вызываться из приложений, напи санных на популярных языках программирования. Пользовательский интерфейс поддержки репликации встроен в SQL Enterprise Manager и поддерживает все типы репликации. Как и при создании БД или нового пользователя, администрирование репликации облегчают ма стера. Мастер создания публикаций поможет создать набор данных, открытый для подписки. •
Репликация хранимых процедур Репликацию параметров исполнения хранимых процедур (Stored pro cedure execution replication) стоит рассмотреть отдельно, так как при этом распространяются не результаты исполнения, а скорее команда на исполнение процедуры. Это очень удобно для административных действий, результаты которых затрагивают большие объемы данных. Если все модификации, вызванные исполнением такой процедуры, передать подписчикам как набор команд INSERT, UPDATE или DELETE, нагрузка на сеть может вырасти до недопустимой величи ны. Передача же единственного выражения Exec резко повышает эф фективность системы. Для одной статьи может быть назначено несколько типов репли так что совмещение репликации хранимых процедур с другим типом распространения данных проблемы не представляет. ПРИМЕЧАНИЕ Действия хранимой процедуры реплицируются, даже когда она не изменяет пользовательские таблицы. Это позволяет со здавать административные хранимые процедуры, например, добавля ющие пользователей на серверахподписчиках. Модифицирующие подписчики В версии 8.0 возможности подписчиков по модификации данных зна чительно расширились. Помимо протокола двухфазной фиксации, используемой как и в версии 7.0, для гарантии изменений в
www.books-shop.com
348
Microsoft SQL Server 2000, Новейшие технологии
ной БД и БД издателя, теперь поддерживаются очереди (queue) для гарантированной доставки изменений. Главное отличие в том, что при двухфазной фиксации изменения могут быть внесены, только если оба сервера согласились принять модификации. Очередь по оп ределению предполагает отложенное взаимодействие, и при попытке модифицировать данные на издателе не исключен вариант, что их уже ктото изменил. Тут вступает в действие механизм разрешения про тиворечий. Конфликт может быть разрешен по одной из схем: под писчик прав, издатель прав, издатель прав, и подписчик должен быть заново инициализирован. По умолчанию издатель всегда прав. Это значит, что для подписчика, внесшего отвергнутые изменения, фор мируется набор компенсирующих команд. Очередь, хранящая изменения, сделанные на подписчике, по умол чанию использует БД самого SQL Server, но после создания публика ции ее можно настроить на использование сервера очередей Архитектура репликации с точки зрения модифицирующих подпис чиков такова (рис.
2pc,Rpc
Модифицирующий Подписчик с немедленным обновлением
Немодифици+ рующий подписчик
Модифицирующий подписчик, использует очередь
Рис. 71. Модифицирующие подписчики могут быть двух видов: с немедленной и отложенной синхронизацией. Отложенная синхронизация использует очереди.
www.books-shop.com
ГЛАВА 7:
данных
Как видите, модифицирующий подписчик с немедленным обнов лением должен быть подключен к сети на момент внесения измене ний в свою БД, иначе на издателе нельзя выполнить запись средства ми двухфазной фиксации, и изменения приняты не будут. Модифи цирующий подписчик, который использует очередь, может не иметь доступа к сети, в БД создан триггер, размещающий модифицирован ные записи в очередь, где они дожидаются связи. Репликация в базу данных SQL Server Наиболее употребительный вид репликации — перемещение данных между БД одного формата, между двумя или более SQL Server. Это самый естественный вид репликации, так как все серверы прекрасно «понимают» друг друга. Используя в качестве подписчика другой SQL Server, Вы не связаны ограничениями в смысле функциональности. И настроить такую схему проще всего. Не хочу сказать, что реплика цию между двумя или более SQL Server выполнить совсем просто, но работа с данными других форматов намного сложнее. Репликация в базы данных иных форматов Поддерживается репликация в базы данных иных форматов, но при этом нужно учитывать ограничения и возможности подписчика. Публикация данных для иного, чем SQL Server, подписчика Распространить изменения в базе данных ODBC подписчика можно двумя способами. Первый прост и практичен: создать принудитель ную рассылку от издателя к ODBC подписчика. При этом публика ция автоматически попадает в поле зрения агента распределения. Второй — использовать специальный компонент SQL Distribution control (рис. 72). Он реализован в виде динамически подключаемой библиотеки и может быть включен в специализирован ное Компонент предоставляет набор свойств и методов управления процессом распространения модификаций. Используя подписчики, получающие модификации через ODBC, учтите ряд особенностей. Указанные подписчики не поддерживают пакетные модификации. Так как имя ODBC DSN хранится в таблице оно должно соответствовать правилам именования, приня тым для SQL Server. Один из параметров (Truncate table) начальной синхронизации позволяет указать, что таблицу нужно очистить. Этот параметр поддерживается только для ODBCсоединений, применяю щих драйвер для SQL Server.
www.books-shop.com
Microsoft SQL Server 2000, Новейшие технологии
350
1 Classes
of ANONYMOUS JO 03 CREATE_DATABASE DB2_UNIVERSAL [3
Puc. 72. Специальный компонент позволяет создавать приложения, использующие возможности репликации SQL Server. Системные хранимые процедуры Для поддержки ODBC/OLEDbподписчиков SQL Server предостав ляет системные хранимые процедуры. Имя процедуры
Описание Выводит все ранее описанные ODBC DSN для сервера, исполняющегося под указанной учетной записью Windows NT. Если сервер активизирован для участия в репликации, процедура считывает данные ODBC DSN с сервера дистрибьютора, связанного с текущим сервером.
ПРИМЕЧАНИЕ Административная консоль SQL Server Enterprise Ma nager автоматически использует указанные хранимые процедуры для подключения ODBCподписчиков. Вызывайте эти процедуры, только если Вы подключаете подписчики, используя
www.books-shop.com
ГЛАВА 7:
Репликация данных
351
Учтите также, что для участии в таблица должна соот ветствовать ограничениям подписчика. Очевидно, что издатель не имеет представления о возможностях подписчика как с точки зрения размера полей, числа полей в записи и т. так и с точки зрения пра вил именования полей, поддерживаемых типов данных и пр. Мониторинг репликации Репликация использует ресурсы нескольких серверов, а значит, требу ется мониторинг от изменений, внесенных в публикацию, до сделан ных подписчиком. Основным средством мониторинга надо выбрать встроенные средства SQL Server, но Вам предоставлен и большой на бор системных хранимых процедур, позволяющих получать сведения о состоянии издателя и подписчиков, равно как напрямую строить зап росы к системным таблицам. Встроенные средства мониторинга вклю чают монитор репликаций (SQL Server Replication Monitor) и монитор производительности (SQL Server Performance Monitor). Монитор репликаций
Монитор репликаций из состава SQL Server Enterprise Manager слу жит для наблюдения за состоянием агентов репликации и разреше ния потенциальных проблем на сервередистрибьюторе. Когда сер вер определен как дистрибьютор, среди прочих объектов создается еще несколько, относящихся к репликации (рис. 73).
Сервердистрибьютор открывает для использования несколько новых
www.books-shop.com
Microsoft SQL Server 2000.
352
технологии
Монитор репликации позволяет просмотреть список издателей, публикаций и подписчиков, анализировать деятельность агентов реп ликации, устанавливать оповещения, связанные с процессом реплика ции, и просматривать историю исполнения агентов, которая поможет определить причину возникновения ошибок репликации (рис. 74).
Агент чтения журнала успешно переместил в базу данных Distribution одну транзакцию. Отслеживать сообщения сервера, кроме средств SQL Server, по зволяет журнал событий Windows. Монитор производительности Счетчики (counter) репликации помогают получить графическое ото бражение деталей процесса (рис. 75). Для выбранной БД объект SQLServer: Databases позволяет полу чить динамику перемещения транзакций из журнала БД, имеющей опубликованные статьи, в БД Distribution.
Счетчик PendingXacts
Repl. Trans. Rate
Описание Число транзакций, отмеченных в журнале как предназначенных для репликации, но еще не перенесенных в БД Distribution. Число транзакций, переносимых в секунду из журнала БД, имеющей опубликованные статьи.
www.books-shop.com
ГЛАВА
Репликация данных
353
75. Монитор производительности позволяет получить динамическую картину процесса репликации. Еще один объект SQL Server — Replication Dist — включает не сколько счетчиков, предоставляющих информацию о перемещении транзакций из Distribution в БД подписчиков. Счетчик
Описание
Delivered comds/sec Число команд, доставленных в последнем пакете, пересланном подписчику. Delivered Trans/sec Число транзакций, доставленных в последнем пакете команд, пересланном подписчику. Delivered Latency Величина в секундах, определяемая временем, которое транзакция проводит в Distribution перед передачей подписчику. Прямой доступ к монитору производительности открыт из кон текстного меню, вызываемого щелчком правой кнопкой объекта Rep lication Monitor (команда Performance Monitor) Мониторинг средствами хранимых процедур Графический интерфейс, как я уже говорил, использует системные хранимые процедуры, и результат их исполнения выводится в краси вом списке или диалоговом окне. Для лучшего представления о про
www.books-shop.com
SQL Server 2000, Новейшие технологии цессах на всегда полезно понимать, что делается «за кулиса ми». Вот хранимые процедуры, позволяющие узнать о состоянии сер вера, БД, участвующей в репликации и репликации. Область мониторинга
процедура
Информация о сервере sp_helpremotelogin Информация о БД
sp_helpdb sp_helpdistpublisher
Процесс репликации
sp_replcmds sp_repltrans sp_replcounters представление
Мониторинг активности компонентов репликации Все элементы интерфейса и агенты репликации используют расши ренные и обычные системные хранимые процедуры для сбора и пред ставления сведений о процессе репликации. Для внутренних нужд сервер обычно использует процедуры: • рассматривает первого клиента, подключившегося к БД как агент чтения журнала; возвращает команды для транзак ций, отмеченных для репликации, используя агент чтения журна ла; позволяет получить сведения о БД, в контексте которой была выполнена, и просмотреть информацию о транзакциях, еще не переданных дистрибьютору; • sp_repltrans возвращает список всех транзакций в журнале БД, открытой для публикации, которые отмечены для репликации, но не помечены как переданные дистрибьютору; сходна с sp_replcmds, но не возвращает команды, описывающие транзакцию; • sp_replcounters служит для просмотра текущего темпа перемеще ния транзакций из журнала пользовательской БД в базу Distribution. Решение проблем репликации Вопросы разграничения доступа и проблемы сетевых соединений за метно влияют на процесс репликации. Но сначала надо определить, у каких серверов есть проблемы. Лучше всего определять такой сервер
www.books-shop.com
ГЛАВА 7:
Репликация данных
355
путем анализа порядка работы агентов. Обычно исправление ошибок связано с анализом журналов ошибок и истории исполнения агентов. Журнал ошибок самого сервера содержит полное описание теку щего сеанса и данные о конфигурации сервера. Похожий журнал ве дет SQL Server Agent. Дополнительные сведения Вы почерпнете из сообщений, записываемых в журнал событий Windows, который так же фиксирует сообщения от других компонентов системы. Один из первых шагов при определении источника беспокойства — анализ истории исполнения задач — позволит идентифицировать задачу, давшую сбой, и определить причину сбоя.
76. Анализ истории исполнения агента позволяет получить много важной информации. Помимо графического интерфейса, можно проанализировать со держимое таблицы в Msdb, хранящей всю информацию о работе задач. Системная хранимая процедура (заме нила возвращает историю исполнения задачи, владелец которых — текущий пользователь. Это предохраняет содержимое таб лицы от слишком широкого Таблицы базы Distribution и хранят историю испол нения всех четырех агентов, поддерживающих разные типы
ции. Анализ этих таблиц позволяет поправить ошибки, возникшие при репликации.
Рис. 7 7.
Таблица хранит историю работы агента.
При активной репликации агент может создавать очень много за писей в истории исполнения, поэтому сервер в начале репликации создает специальное задание Agent history clean up: distribution. Задача очищает ненужные записи из таблиц Distribution. Задание состоит из единственного шага — вызова системной хранимой процедуры: EXEC
= 48
Хранимой процедуре передается единственный параметр — срок в часах, по истечении которого запись об исполнении можно удалить. Как видите, история будет храниться 48 часов. Само задание испол няется каждые 10 минут. Частоту исполнения и срок хранения исто рии легко изменить. Анализируя проблемы репликации, помните, что агенты исполня ются в контексте безопасности, определенном для SQL Server Agent. Учетная запись, под которой исполняется этот компонент, должна иметь достаточно прав в рамках локального компьютера, на котором исполняются агенты, права доступа в рамках домена не играют здесь роли.
www.books-shop.com
ГЛАВА
357
Создание новой публикации Новая публикация создается с помощью системных хранимых про цедур (например, или мастера. Публикацию можно наполнить статьями, генерируемыми процедурой sp_ addarticle. Пе редавая этой процедуре параметры, Вы указываете имя таблицы, вер тикальное и/или горизонтальное разбиение данных и другие харак теристики создаваемой статьи. Хранимая процедура sp_ changearticle позволяет модифицировать ранее созданные статьи публикации. ВНИМАНИЕ! писчиков.
Модификации поддаются только статьи, не имеющие под
Хранимые процедуры позволяют программно контролировать на стройку публикации. Мастер создания публикаций (Publication wizard) поможет сделать то же самое через графический интерфейс (рис. 78).
78.
Приглашение мастера
публикаций.
Если у Вас к этому моменту есть хоть одна публикация, мастер предложит использовать ее как шаблон. Если это первая публикация, следующим шагом в определении параметров публикации будет вы бор сервера, на котором разместится БД В зависимости от степени загрузки сервера, хранящего основные таблицы, и каче ства каналов можно назначить внешнего дистрибьютора или задать один сервер для распределения модификаций на
www.books-shop.com
Microsoft SQL Server 2000, Новейшие технологии
358
писчики. Чтобы указать другой сервер в качестве дистрибьютора, его сначала надо зарегистрировать. Если нужный сервер не прошел пред варительной регистрации, щелкните кнопку Register server и зарегис трируйте его. Определив сервер, который будет заниматься распределением дан ных, Вы указываете тип репликации, выбрав соответствующий пере ключатель (рис. Здесь же дается краткое описание функциональ ности, предлагаемой каждым типом репликации на тот случай, если Вы ринулись создавать статьи и публикации, не заглянув в руковод ство пользователя.
79.
Укажите тип репликации для распространения данных.
В следующем окне Вы указываете, можно ли подписчикам вно сить изменения в свою копию статьи. Если да, серверподписчик дол жен иметь на момент внесения изменений надежную и быструю ли нию связи с серверомиздателем (не При модифи кации на подписчике в дело вступает протокол двухфазной фиксации (Two phase commit protocol2PS), использующий координатор рас пределенных транзакций. Модификация должна пройти на подпис чике и издателе, иначе она не будет пропущена. Подобная схема мо жет включать смешанный состав подписчиков: часть использует свою копию данных в режиме только для чтения и получает модификации стандартным образом, другая вносит изменения у себя на месте и фиксирует их одновременно на двух серверах, не ожидая прихода
www.books-shop.com
ГЛАВА 7:
данных
359
модификации от издателя. Разрешение возможных конфликтов мо дификации выполняется в полях типа timestamp. SQL Server 8.0 поддерживает отложенную синхронизацию (рис.
Рис. При работе с подписчиками на базе SQL Server 2000 можно использовать отложенные модификации на подписчике.
Независимо от выбранного типа публикации мастер поинтересу ется составом подписчиков. Вариантов может быть три: все подпис чики — это SQL Server 2000, все подписчики — SQL Server 7.0 или часть подписчиков — иные БД, к которым следует обращаться опре деленным образом. При использовании иных, чем SQL Server 2000, подписчиков новая функциональность сервера отключается. Интересная новинка — служба Data Transformation Services (DTS) — позволяет преобразовать данные на пути от издателя к подписчи ку. На следующем шаге Вам предложат использовать пакеты DTS для преобразования данных. Мы рассмотрим этот вопрос в конце главы. Далее Вам предлагается определить состав публикации. Сюда мо жет входить одна или более статей, представляющих собой полные или ограниченные по тому или иному правилу таблицы. Если выбра на репликация транзакций, в публикацию можно включить только таблицы с первичным ключом. Это важно: просто уникальный ключ не годится. Для двух других типов репликации таких ограничений нет. Допустим, Вы выбрали репликацию транзакций, тогда следующее окно мастера будет выглядеть приблизительно так (рис.
www.books-shop.com
360
Microsoft SQL Server 2000, Новейшие технологии
Рис. 711. В одну публикацию можно включить таблицы, хранимые процедуры и представления. По умолчанию в список объектов, открытых для публикации, включены только таблицы, но его можно пополнить хранимыми про цедурами и представлениями (новшество SQL Server 2000). Выбрав этот переключатель, Вы получите грозное предупреждение, что дан ный тип публикации относится к разряду продвинутых аспектов реп ликации. Не пугайтесь, ничего сверхъестественного в этом нет. Фла жок Publish all (Опубликовать все) позволяет выделить все элементы списка. Раньше в этом окне была кнопка, снимающая выделение со всех объектов. Теперь же, когда Вы по неосторожности пометите фла жок Publish All, он «залипает», и Вам придется прощелкать все объек ты, чтобы от него избавиться. Для каждой индивидуальной статьи можно уточнить действия по начальной синхронизации и механизм передачи изменений. Выбор таблицы для публикации выполняется щелчком в квадратике, распо ложенном слева от имени таблицы. Если у таблицы первичного клю ча нет, вместо квадратика Вы увидите перечеркнутый ключик (это видно для таблиц authors2 и Допустим, мы щелк нули квадратик у таблицы Authors. Статья автоматически получит имя, аналогичное имени таблицы. Если щелкнуть кнопку с многото чием (...) справа от имени таблицы, Вы сможете настроить работу со статьей при формировании начального снимка, организовать достав ку этого снимка подписчику и пр.
www.books-shop.com
ГЛАВА 7: Репликация данных
361
В диалоговом окне Table Article Properties (Свойства статьи публи кации) несколько вкладок. Для статьи, участвующей в репликации транзакций, этих вкладок 3, для статьи репликации моментальными снимками — 2, так как это более простой тип репликации, а для реп ликации сведением — 4. Вкладка General позволяет определить основные параметры ста тьи: имя, краткое описание, имя таблицы, на сервереподписчике, куда будет передаваться информация об изменениях (рис. 712).
712.
Общие параметры статьи публикации.
Вкладка Commands присутствует, только если выбрана репликация транзакций. Если статья участвует в репликации сведением, вместо нее Вы увидите вкладку Resolver, позволяющую определить средства разрешения конфликтов модификации. Когда мы рассматриваем свойства статьи при репликации моментальными снимками, в диа логовом окне только две вкладки: General и Snapshot. Вместо стан дартных команд, передаваемых на серверподписчик, предлагается использовать вызовы хранимых процедур (рис. 713). Но помните: такой способ внесения изменений годится, только если Ваш подпис чик — другой SQL Server, так как подписчик должен поддерживать специализированные хранимые процедуры. Последние позволяют
www.books-shop.com
362
Microsoft SQL
2000, Новейшие технологии
описать собственную логику процесса в дополнение к тому, что пре доставляется стандартно.
на
Помимо стандартных команд, модифицировать данные можно хранимыми процедурами.
Вкладка Snapshot есть при всех типах репликации, так как всегда присутствует начальная синхронизация. Другое дело, что при очень больших объемах синхронизации можно сделать это с ленты и при подключении очередного подписчика сказать, что ему синхрониза ция не требуется. На вкладке Snapshot Вы указываете механизм син хронизации и действия, выполняемые в случае конфликта имен (рис. 714). Такой конфликт возникает, когда таблица на сервереподпис чике уже есть и ее имя совпадает с именем таблицы, на основе кото рой создана статья публикации. Вам предлагается несколько вариан тов. Вопервых, таблицу можно уничтожить и создать Годит ся, если у таблицы нет объектов, зависимых от нее на серверепод писчике. В противном случае Вы получаете вроде Could not drop object because it is referenced by a FOREIGN const raint (He могу уничтожить объект так как на него ссылается ограничение FOREIGN KEY), начальная синхронизация срывается, и репликация так никогда и не начнется. Вовторых, можно потребо вать удаления записей таблицы, если у Вас назначен фильтр для гори
www.books-shop.com
ГЛАВА 7:
Репликация данных
363
разбиения. Будут удалены записи, удовлетворяющие ус ловию фильтра.
Puc. 714. На этой вкладке назначаются принципы первичной синхронизации.
Третий вариант — удалить все записи таблицы. И, наконец, таб лицу на сервереподписчике можно оставить без изменений. Определив состав публикации, Вы даете ей имя и, если хотите, создаете краткое описание. При создании публикации, участвующей в репликации сведением, диалоговое окно свойств публикации имеет вкладки, описывающие вопросы разрешения конфликтов и проверку прав доступа (рис. После определения состава публикации и ее свойств мастер ана лизирует Ваши ответы и выводит окно, в котором предупреждает о проблемах, с которыми могут столкнуться приложения, использую щие реплицированные данные, и предлагает способ их разрешения. Например, проблемы могут возникнуть, если в реплицируемой таб лице есть поле с атрибутом Identity. Так как этот атрибут не перено сится на подписчика, приложение, ожидающее определенной функ циональности от БД, может «поломаться». Так мастер подробно расписывает путь решения проблемы (похорошему, если он такой
www.books-shop.com
364
Microsoft SQL Server 2000, Новейшие технологии
умный, мог бы и реализовать это решение или хотя бы написать).
Репликация сведением требует ответа на массу вопросов.
После того как Вы решили все проблемы, мастер спрашивает имя публикации и предлагает создать для нее описание. шаг может стать последним в определении публикации, либо ответить на ряд вопросов (рис. 716).
Рис. 716.
Публикация может быть и простой, и весьма сложной.
www.books-shop.com
Репликация данных По умолчанию Вам предлагается опубликовать таблицу без нало жения какихлибо ограничений. Если Вы пойдете таким путем, сле дующее диалоговое окно будет содержать кнопку Finish, щелкнув ко торую, Вы запустите процесс создания публикации. Если Вас не устраивает перспектива гонять по сети ненужную ин формацию, выберите верхний переключатель Yes, I will define data filters, enable anonymous Subscriptions, or customize the other properties (Да, я хочу определить фильтры для данных, разрешить доступ ано нимным подписчикам и определить настройки дополнительных па раметров публикации). Совершив этот решительный поступок, щел кните кнопку Next и скажите, как Вы хотите публиковать таблицы: полностью или используя фильтры для статей. В последнем случае мастер выведет диалоговое окно, где можно указать перечень полей, включаемых в статью. Отключить передачу первичного ключа Вам не дадут — Вы же создаете описание репликации транзакций (рис. 717).
Puc. 717. Вертикальное разбиение создается путем исключения ненужных полей. Исключив ненужные поля, Вы сократите нагрузку на сеть, созда ваемую репликацией. Дополнительно ограничить область, изменения в которой должны быть распространены на серверыподписчики, можно, наложив логические условия. Следующее окно мастера по зволяет указать условия горизонтального разбиения таблиц, состав ляющих статьи публикации.
Но ничто не дается даром. Создавая сложные условия фильтрации, Вы, с одной стороны, ограничиваете объем информации, передавае мой по сети, а с другой — загружаете сервер, который должен опреде лять, что делать с данным изменением: попадает ли охваченный диа пазон записей в установленные рамки.
Для БД, к которым обращаются многие пользователи, можно от крыть доступ анонимным подписчикам (Anonymous Эта воз можность, появившаяся в версии 7.0, позволяет задействовать БД SQL Server при работе в Интернете. Для БД, которым нужна строгая защита, можно указать, что доступ к опубликованным статьям разре шен только официально зарегистрированным подписчикам (Enabled subscriber). Прежде чем подписчик примет участие в репликации, его нужно синхронизировать с издателем. Для этого создается моментальный снимок статей публикации и файл с описанием схемы таблиц, состав ляющих публикацию. Кроме того, синхронизация может понадобить ся, если подписчик слишком долго не давал о себе знать. Для каждой публикации можно определить график создания моментального сним ка, используемого для синхронизации.
www.books-shop.com
ГЛАВА
данных
36?
Puc. 719. Вы можете определить удобный график начальной синхронизации. Подключение подписчиков Подключить подписчиков к можно в окне Create and manage publications (Создание и управление вызывае мом командой Tools\Replication\Create and manage publications основ ного меню консоли администратора (рис.
Рис. 720. Здесь можно создавать и определять свойства публикации, назначать подписчиков и удалять публикации.
www.books-shop.com
368
SQL Server 2000, Новейшие технологии
Щелчок кнопки Create Publication вызывает мастер создания но вой публикации, кнопки Push New Subscription — мастер подключе ния подписчика, получающего модификации по воле издателя. Мас тер подключает подписчик к публикации, выбранной на момент щел чка кнопки. В качестве подписчика можно выбрать заранее зарегист рированный сервер. Если БД открыта для доступа из Интернета, к публикации могут подключаться и анонимные подписчики. При этом имеет место репликация, инициированная подписчиком, и имена сер веров, желающих получать обновления, заранее определить нельзя. При передаче модификаций по инициативе издателя набор серверов скорее всего заранее известен. Мастер выводит список ранее зареги стрированных подписчиков (рис. 721).
721. Заранее зарегистрированные подписчики могут бить подключены к указанной публикации.
Как видите, в число подписчиков я внес не только другие SQL Server и БД Access, но и базу данных Visual FoxPro, которая подклю чена в качестве «связанного» (linked) сервера к серверудистрибью тору. Что это такое, мы поговорим в главе, посвященной выходу SQL Server в «мир». Для подписчика укажите БД, куда будут передаваться изменения. Базу нужно создать заранее. Далее мастер позволяет задать график исполнения агента распределения. Агент может быть постоянно ак тивен, что обеспечивает малую задержку передачи изменений, или исполняться по определенному графику. При определении графика
www.books-shop.com
ГЛАВА 7: Репликация
369
исполнения мастер предлагает запускать агент каждый час, но гра фик можно изменить. Затем Вы указываете, как сервер будет выпол нять начальную синхронизацию данных (рис. 722). На выбор пред лагается три варианта: • сервер начинает процесс сразу, что позволяет на чать передачу изменений сразу по завершении синхронизации; • инициализация начинается по указанному графику; • инициализация вообще не выполняется — применяется при боль шом объеме данных, когда передавать весь массив по сети вряд ли разумно: проще создать полную копию БД и восстановить ее на сервереподписчике.
722. синхронизация может выполняться немедленно, по графику или не выполняться вовсе. Подключение практически закончено. Ответьте еще на пару воп росов, и мастер выведет диалоговое окно со списком выбранных па раметров. Щелчок кнопки Finish начнет процесс подключения.
Создание нового потенциального подписчика Это несложно: щелкните одну из БД или выберите меню Tools в глав ном меню консоли, а в раскрывающемся меню — команду Publishing Subscribers and Distribution. Появится диало говое окно Publisher and Distributor Properties (рис. 723). Меня интересует организация подписчиков. В списке Subscribers показаны ранее зарегистрированные серверы. Чтобы поместить в
www.books-shop.com
370
Microsoft SQL Server 2000, Новейшие технологии
список другой сервер, щелкните кнопку New Subscriber. В появившем ся дополнительном окне Enable New Subscriber четыре переключате ля: SQL Server database, Microsoft Jet 4.0 database (Microsoft Access), ODBC data source, OLEDB data source. Они позволяют подключить в качестве подписчиков другой SQL Server или источник, к которому издатель будет обращаться средствами ODBC или OLEdB соответ ственно. Если выбираете SQL Server, сервер надо заранее зарегистри ровать, или Вам придется ввести его имя и параметры соединения. Для подписчика, использующего ODBC, нужно заранее описать DSN (data source name), указав ODBCдрайвер и параметры подключения, варьирующиеся в зависимости от типа драйвера. Для подписчика с OLEdB нужен заранее зарегистрированный (pro vider), подключенный как связанный (Linked) сервер.
Puc. 723. Диалоговое окно позволяет активизировать подписчиков, базу данных для публикаций, издателей и другие аспекты репликации. Новый подписчик появляется в щелкнув квадратик слева от его имени, Вы позволяете ему подключаться к существующим пуб ликациям. После того как Вы описали все компоненты репликации (не са мое простое занятие), будет очень обидно, если по какойто причине Вам придется все это повторять вручную. Возможно, Вам необходи
www.books-shop.com
ГЛАВА 7:
данных
371
мо восстановить схему репликации на другом сервере. Как бы то ни было, одна из наиболее приятных новостей, с которой Вы постоянно сталкиваетесь при работе с версией 8.0, — это возможность создать сценарий для многочисленных элементов, необходимых для работы. Репликация не исключение. Щелкните меню Tools, выберите коман ду SQL scripts, и Вы увидите окно вроде этого (рис 724):
724. Созданный сценарий позволяет Вам создать и активизировать новые публикации или отключить или удалить существующие.
Создав публикацию, можно запустить программу на Transact SQL, позволяющую позже восстановить публикацию, не прибегая к услу гам мастера. Если посмотреть на созданный сценарий, станет понят но, что число параметров, нужных хранимым процедурам, весьма ве лико, поэтому не стесняйтесь обращаться к мастеру — хотя бы на пер вых порах. Один из параметров создаваемой публикации — — оп ределяет, как скоро конкретная публикация должна быть запрошена/
www.books-shop.com
SQL Server 2000,
технологии
синхронизирована с подписчиком. По истечении этого срока публи кация должна быть В зависимости от типа пуб ликации значение умолчания составляет 72 часа для репликации транзакций и моментальных снимков и 60 дней для репликации сли янием. Репликация с трансформацией Включение средств трансформации данных (служба Data Transfor mation Services — DTS) в механизм репликации позволяет выполнять любые преобразования при перемещении данных на подписчик. Трансформация выполняется посредством задания типа Data Driven Query, а не более употребительного — Transform Data. Описание служ бы DTS Вы найдете в следующей а пока обсудим применение этой технологии в рамках репликации. В первую очередь замечу, что трансформация применима только для репликации моментальных снимков и транзакций и исключает возможность модификаций на стороне подписчика. Это понятно: ведь для отображения изменений назад, в БД издателя, надо провес ти набор модификаций, обратных сделанным на пути к подписчику. Соответственно, не поддерживается и репликация так как по определению она предполагает модификацию на стороне подпис чика. Дополнительное ограничение — невозможность использования одной и той же публикации как в режиме трансформации, так и без нее. Если Вас это смущает, создайте две идентичные публикации, только для одной средства трансформации а для дру гой — нет. Имейте в виду: поддерживаются только подписчики SQL 2000 и OLEDB. При использовании мастера (мы рассмотрим его работу через пару минут) создается DTS пакет (package), содержащий один объект и объект для каждой ста тьи публикации. Объект DataDrivenQueryTask определяет преобразо вания, выполняемые над поступающими данными. При определении объекта мастер создает запросы INSERT, UPDATE и DELETE. Пакет DTS используется в рамках distribution агента. Мастер по созданию пакета преобразований вызывается после того, как Вы определили пуб ликацию и указали, что она будет использовать трансформации при перемещении данных от Издателя к подписчику. Мастер начинает работу, как обычно, с приветствия 725):
www.books-shop.com
ГЛАВА 7:
Репликация данных
373
725. Приветствие мастера по созданию пакетов преобразований, участвующих в репликации. Следующий шаг в оформлении пакета — указание сервера, куда бу дут поступать преобразованные данные (рис. 726).
Puc. 726. Выберите серверподписчик, который будет принимать преобразованные данные.
www.books-shop.com
SQL Server 2000, Новейшие технологии
374
Затем начинается самое интересное: Вы определяете правила пре образований. В основном преобразования реализуются средствами одного из языков сценариев (по умолчанию VBScript). Подробнее DTS мы рассмотрим в следующей главе, пока же можно попробовать сделать очень простое преобразование — заменить одну строку на другую (рис. 727).
DTSDeslinalionfphone")
Main Puc. 727.
rowguTF)
Это код преобразования данных.
Задача по формированию схемы на подписчике создает нужные таблицы, а задача по преобразованию модифицирует данные. Пакет использует два описания соединений, указывающих, куда и как нуж но подключаться, чтобы взять данные (рис. 728). Созданный пакет преобразования Вы привязываете к подписчи ку, при следующей передаче данных он отработает, и подписчик по лучит новые данные (рис.
Microsoft SQL Server 2000, Новейшие технологии Возможности этой схемы практически безграничны. В код преоб разования можно включать вызовы внешних компонентов и тем са мым строить исключительно сложные схемы репликаций. Только не забывайте, что на все это нужны ресурсы и чем сложнее схема, тем более затратной она является. Заключение С помощью механизма репликаций Вы создадите действительно рас пределенную систему, объединяющую серверы организации. Но по мните: репликация — сложный процесс, требующий тщательного планирования. К счастью, мониторинг и развитый графический ин терфейс администратора позволяет контролировать ситуацию на всех этапах работы. В следующей главе я подробно рассмотрю механизм работы и со здания пакетов DTS, а затем мы перейдем к средствам общения сер вера с внешнем миром и особенно ADO — наиболее перспективному из существующих интерфейсов доступа к данным на сервере.
www.books-shop.com
Глава 8
Импорт,
экспорт
и трансформирование данных
Когда при выходе SQL Server 7.0 в печати появились первые упоми нания о службе трансформации данных (Microsoft data transformation services — MS DTS), мне довелось прочитать или услышать, что его одного достаточно, чтобы оправдать покупку сервера. Этот компонент позволяет обрабатывать данные, подаваемые или извлекаемые из БД SQL Server. MS DTS обеспечивает два основных процесса: перенос и трансформирование данных. SQL Server 2000 снабжен еще более мощными средствами динамического преобразования данных. Зачем это нужно Как утверждают разработчики, DTS создавался для: • обеспечения процесса импорта, экспорта и трансформации гете рогенных данных с использованием OLEdB; • создания расширяемой архитектуры, открытой для независимых разработчиков, пользователей и консультантов; • совместного использования информации об источниках данных, получателях и истории происхождения (lineage) данных посред ством интеграции с Meta Data Services. DTS позволяет выполнять импорт, экспорт и трансформирование данных при работе с разнообразными источниками с использовани ем архитектуры, основанной на OLEdB. В качестве источника/при емника могут выступать не только промышленные СУБД класса SQL Server или Oracle, но и СУБД среднего класса, такие как Visual FoxPro
www.books-shop.com
Microsoft SQL Server 2000, Новейшие технологии или Access и офисные приложения, такие как Microsoft Excel. Более того, поддерживается работа со структурированными (delimited и fixedfield) текстовыми файлами. Архитектура DTS При работе с DTS пользователь создает определение всех источни ков, соединений и процессов, которые могут быть сохранены в БД SQL Server, в объектном репозитории под управлением Metadata Services, в СОМструктурированном или в виде программы на Visual В первых двух случаях информация сохра няется в БД Msdb, отличия только в составе сохраняемых данных. Основа MS DTS — компонент Data Pump (можно перевести это как «информационный насос», но уж больно неказисто получается, по этому оставим этот термин пока без перевода). Data Pump обеспечи вает перемещение данных от источника к приемнику. При переме щении он способен исполнять блоки кода на языках VBScript, Jscript и Perl для выполнения сложных манипуляций по проверке, трансфор мированию или иной обработки данных. Куда записать готовый пакет? А вот куда: Место
Тип хранилища
SQL Server
Таблица в базе данных Msdb
SQL Server Meta Data Services
База данных репозитория Meta Data Services (набор таблиц в составе БД Msdb)
Structured Storage File
Структурированный COM
Visual Basic File
Код Microsoft Visual Basic в файле .BAS
При сохранении пакета в SQL Server DTS помещает описания па кетов в таблицу sysdtspackages базы данных Msdb. Сохраняя пакет в БД SQL, Вы можете использовать любой экзем пляр сервера, доступный по сети, и управлять версиями пакетов, вы зывая определенную версию на исполнение или удаляя ее. Удалять пакеты позволено их создателям или членам роли Sysadmin. При сохранении пакета в Meta Data Services Вы получаете возмож ность сохранять метаданные пакета, включая уникальный идентифи катор пакета и его версий, автора пакета, дату создания и модифика ций, использовать историю изменений при загрузке данных средства ми пакета. Вы не сможете удалять версии пакета. Если нужно сохра нить только последнюю версию, сохраните пакет под новым именем. Сохранение пакета в структурированном файле позволяет переносить
www.books-shop.com
ГЛАВА 8:
экспорт и трансформирование данных
379
его с сервера на сервер; внутри одного файла можно сохранить не сколько пакетов. Пакеты, сохраненные в форме кода на Visual Basic, можно включать в Ваши приложения. Упрощенно можно представить так: данные за бираются из источника посредством OLEdB Data Pump, при необ ходимости трансформируются и передаются OLEdBприемнику (рис. 81).
Рис. 81.
Упрощенная архитектура MS DTS.
Использование кода на языках сценариев позволяет организовы вать сложные преобразования данных, в том числе и средствами СОМкомпонентов, вызываемых из кода. DTS способен вести журнал для каждой трансформации. Это доку ментирование поддерживается для описаний, сохраненных в репози тории. Цель — обеспечить пользователя информа цией о том, как получены данные в приемной таблице. В результате можно отслеживать происхождение данных, например, в хранилище данных. Как многие другие процессы, перенос/трансформирование данные средствами DTS может выполняться по графику. DTS Package Пакет DTS (DTS package) хранит полное описание всех заданий, со единений и трансформаций, которые должны выполняться в коор динированной последовательности. В состав каждого пакета входит одно или более заданий и минимум одно соединение. Средствами удобного графического редактора пакеты можно создавать интерак тивно или на любом языке программирования, поддерживающем OLEавтоматизацию.
www.books-shop.com
Microsoft SQL Server 2000, Новейшие технологии Задачей называется часть работы, выполняемой в рамках общего процесса трансформации. Это может быть простое перемещение или сложное трансформирование данных из разнородных источников, исполнение кода на языке сценариев и т. д. Полный список возмож ных задач мы рассмотрим ниже. За выполнение задачи отвечают шаги (step). Шаг обычно включает задачу (одну или более) и набор условий выполнения (precedence Шаги обеспечивают координацию процесса и исполнение инди видуальных задач в составе пакета DTS. Очевидно, что в некоторых случаях задачи имеют четко определенный порядок исполнения. Так, нет смысла перекачивать данные в таблицу, которой нет. чем забирать информацию из источника, надо создать таблицу и только после этого начать перенос. Из этого примера видно, что два зада ния: создание таблицы и перенос данных — связаны между собой в строго определенной последовательности. При наличии предварительных условий каждое задание выполня ется, только если все эти условия выполнены. Для повышения про изводительности группа заданий может выполняться параллельно в рамках самостоятельных потоков. При этом приоритет задания опре деляет приоритет потока, который его исполняет. Трансформирование представляет собой последовательность про цедурных операций, выполняемых над исходным набором данных, прежде чем он будет передан приемнику. Мастер импорта/экспорта Для первого знакомства с созданием нового DTSпакета лучше всего вызвать мастер импорта/экспорта из состава внешних утилит SQL Server. Сначала Вам будет предложено выбрать параметры для источ ника данных. Вы указываете тип провайдера, определяемый форматом исходных данных; в нашем случае речь идет о БД SQL Server, следова тельно, Вы указываете имя сервера, параметры подключения и выби раете имя БД. В списке, выводимом по щелчку кнопки Advanced, мож но настроить параметры OLEdBсоединения (рис. 82). Следующий шаг — указание приемника данных. Этот диалог практически такой же, что и показанный выше.
www.books-shop.com
ГЛАВА 8:
Импорт, экспорт и трансформирование данных
381
Мастер импорта/экспорта позволяет читать и трансформировать данные множества форматов. После того как Вы указали, откуда и куда будут перемещаться дан ные, следующий шаг мастера — определить, что Вы хотите сделать: скопировать таблицы и представления из источника в приемник, ис пользовать SQL Select для получения подмножества данных или ко пировать объекты и данные между двумя БД SQL Server (рис. 83).
Puc. 83.
При копировании можно не только переносить таблицы но и фильтровать данные средствами запросов, а также переносить определения элементов схемы базы данных.
www.books-shop.com
382
Microsoft SQL Server 2000. Новейшие технологии
Очевидно, что список возможных вариантов действий определя ется форматом хранения данных. Если рассматривать БД SQL Server как крайний случай хранения, позволяющий сопровождать собствен но данные исчерпывающим набором вспомогательной информации (метаданных), а текстовый файл — как другую крайность, не несу щую никаких описательных сведений, то в последнем случае можно лишь трансформировать данные при переносе (рис.
Puc. 84. много.
При работе с текстовым файлом вариантов не так уж
Но вернемся к работе с SQL Server. Выбрав самый простой вари ант с переносом таблиц и представлений (тут речь идет только о пе реносе данных), щелкнем кнопку Next, и мастер предложит выбрать из имеющихся в исходной БД объектов те, информация из которых будет перенесена в приемную БД. При выборе объекта мастер анали зирует состав приемной БД и, найдя объект с таким же именем и ти пом (таблица или представление), предлагает его в качестве прием ника. Если Вы решите создать копию таблицы в той же самой БД, можете отредактировать имя объекта, и он будет создан для копиро вания (рис. 85).
www.books-shop.com
ГЛАВА 8:
Импорт,
и трансформирование данных
383
85. Здесь перечень объектов, откуда будут взяты данные для копирования и доступ к описанию трансформации (если это необходимо). Щелчок кнопки Transform выводит диалоговое окно, где можно уточнить параметры процесса переноса данных для выбранной таб лицы или представления. Мастер автоматически предлагает создать новую таблицу, так как я указал имя несуществующего объекта БД (рис. 86). При необходимости я могу полностью переписать текст выражения Create Table для создания приемной таблицы, поскольку оно базируется на структуре Исходного объекта, а я могу трансфор мировать данные в совершенно иной набор полей. Если приемная таблица уже есть, то, отметив флажок Drop and recreate destination table (Уничтожить и заново создать таблицу), я получаю возможность уничтожить таблицу, прежде чем заново создавать ее. Это может при годиться, когда каждый перенос данных представляется самостоя тельным блоком информации. Если мы не хотим удалять таблицу, то можно выбрать переключатель и удалить из нее все записи, прежде чем начнется перенос данных, либо добавить новые записи к суще ствующим. Вкладку Transformation мы пока не будем рассматривать.
www.books-shop.com
384
Microsoft
Server 2000. Новейшие технологии
Рис. 86. Можно полностью перекроить структуру приемной таблицы и назначить любые трансформации данных. Очередной щелчок кнопки Next, и мы на завершающей странице мастера: он предлагает определиться с процессом исполнения нового пакета. Тут указывается график исполнения и сохранять ли пакет для дальнейшего использования. Если пометить флажок Save package, будет предложен перечень возможных вариантов сохранения (рис. 87).
Рис. 87.
Последний шаг, и пакет будет готов к работе.
www.books-shop.com
ГЛАВА 8:
и трансформирование данных
385
Мы не будем исполнять пакет немедленно, так как нам не столько интересно в сотый раз посмотреть на несчастную таблицу Authors, сколько проанализировать готовый пакет и возможности Конструк тора. Отметив только флажок сохранения пакета, выберем сохране ние в БД SQL Server и, щелкнув кнопку Next, дадим пакету имя и описание. Вновь созданный пакет TestTransfer появился в списке Local Packages в группе Data Transformation Services нашего SQL Server (рис. 88).
88. Все созданные пакеты можно просматривать и модифицировать из универсальной консоли. Двойной щелчок пакета открывает окно графического редактора. Здесьто Вы и будете создавать и модифицировать пакеты, функцио нальность которых выходит за рамки простого переноса записей из одной таблицы в другую (рис. 89). Нус, посмотрим, что у нас получилось. Как видно, мастер создал пакет, включающий два соединения, одно задание и трансформацию. Соединения, незатейливо названные Connection 1 и 2, хранят описа ния источника и приемника, а также информацию о способе подклю чения к серверам вместе с именем пользователя и паролем (если выб рана проверка прав средствами SQL Server). Пунктирная стрелка от задания Create table указывает, что в ситуации, когда этот шаг не мо жет быть выполнен, весь пакет считается невыполненным и попытка перенести таблицы даже не будет предприниматься. Но, предполо Ⱦɚɧɧɚɹɜɟɪɫɢɹɤɧɢɝɢɜɵɩɭɳɟɧɚɷɥɟɤɬɪɨɧɧɵɦɢɡɞɚɬɟɥɶɫɬɜɨɦ%RRNVVKRS ɊɚɫɩɪɨɫɬɪɚɧɟɧɢɟɩɪɨɞɚɠɚɩɟɪɟɡɚɩɢɫɶɞɚɧɧɨɣɤɧɢɝɢɢɥɢɟɟɱɚɫɬɟɣɁȺɉɊȿɓȿɇɕ Ɉɜɫɟɯɧɚɪɭɲɟɧɢɹɯɩɪɨɫɶɛɚɫɨɨɛɳɚɬɶɩɨɚɞɪɟɫɭ[email protected]
386
Microsoft SQL Server 2000, Новейшие технологии
жим, что нам недостаточно простого завершения первого шага паке та. Ведь результатом может быть простое завершение с неизвестным исходом, завершение успешное и завершение с ошибкой.
Рис. 89. Основной инструмент для создания пакетов DTS — графический редактор. Для редактирования смысла стрелки щелкнем ее правой кнопкой и в контекстном меню выберем Properties. В появившемся диалого вом окне видно, что по умолчанию выбрано On completion, т. е. по завершении этого шага (независимо от результата, лишь бы закон чился) можно начинать исполнение следующего. Этому соответству ет синий цвет пунктира стрелки. Поменяв Precedence на On success, мы меняем цвет пунктира на зеленый, и следующий шаг начнет вы полняться, только по завершении предыдущего без ошибок. Чтобы обеспечить ветвление процесса и предпринять какието действия при неудачном завершении первого шага, добавим еще одну стрелку. Прежде чем это делать, надо создать задание, которое будет испол няться в результате сбоя. Щелкнем меню Task редактора и в появив шемся списке из 19 элементов (по крайней мере сейчас у меня их именно столько) выберем чтонибудь типа process. В качестве исполняемого процесса можно выбрать что угодно, но я создам CMD
www.books-shop.com
ГЛАВА 8: Импорт, экспорт и трансформирование данных
38?
файл и впишу в него одну строку Net send dimaa2desk Hello. Эта ко манда пошлет мне сообщение с текстом Hello. Щелкнем наше зада ние по созданию таблицы, затем, удерживая клавишу CTRL, щелк нем новое задание и в меню Workflow основного меню редактора вы берем команду On failure. Новая стрелка с красным пунктиром соеди няет два шага пакета и указывает, что при сбое создания таблицы бу дет послано сообщение на указанный компьютер. Теперь наш пакет выглядит так (рис. 810):
Рис. 8Ю. Дополнительная логика пакета позволяет аккуратно обрабатывать сбойные ситуации. Посмотрим на созданные мастером трансформации. Описание трансформации доступно при анализе свойств, которые вызываются «правым» щелчком стрелки между двумя описаниями соединений. Наш процесс трансформации довольно прост. Мастер связал все поля исходной таблицы с соответствующими полями приемной. Интерес но, что мы можем создать множество связей, каждая из которых бу дет соединять поле по принципу одинкодному. Это не лучший ва риант, так как при этом система будет потреблять гораздо больше ре сурсов, так как для каждой связи придется создавать свой СОМобъект. А вот при такой организации хватит одного объекта (рис.
www.books-shop.com
388
Microsoft SQL
2000. Новейшие технологии
811. Стандартная трансформация потребляет меньше ресурсов сервера. Допустим, нам нужно свести в результирующую таблицу данные об имени и фамилии из исходной таблицы. Как это сделать? Щелк нем многохвостную и многоголовую стрелку, представляющую транс формацию, а затем — кнопку Edit. В появившемся диалоговом окне можно настраивать списки полей исходной и результирующей таб лиц. Удалим из соответствующих списков поля au_lname и au_fname. Закроем окно, щелкнув кнопку ОК, мы увидим, что эти поля более не связаны. Для сведения данных из двух полей в одно нужно напи сать несложный код. Щелкнем кнопку New в окне Transform data task properties и в списке выберем ActiveX script. В появившемся диалого вом окне Transformation Options перейдем на вкладку Source columns и выберем в списке исходной таблицы поля au_lname и au_fname. На вкладке Destination columns выберем из списка поле au_lname — оно будет хранить и имя, и фамилию. Теперь опишем процесс трансфор мации. Щелкнем кнопку Properties на вкладке General — появится диалоговое окно редактора кода (рис. 812). В правой панели мы вводим код. Так как сервер ничего не знает о нашем намерении свести вместе два поля, он создал шаблон, в кото рый нам предстоит внести минимальные изменения. Вот с чего мы начинаем:
www.books-shop.com
ГЛАВА 8:
и трансформирование
389
Visual Basic Transformation Script ' Copy each source column to the destination column Function Main() = Main = End Function
Рис. Редактор кода, хоть и уступает тому, что имеется в Visual Studio, но вполне пригоден для работы.
Как видно, у нас есть набор объектов, в которые передаются зна чения полей. По окончании работы функция возвращает константу, которая говорит о том, что все прошло успешно. Управление функ цией Main выполняется присвоением ей соответствующих констант. Итак, мы хотим, чтобы значения двух полей были сведены в одно. Для этого нужно модифицировать текст, показанный выше:
www.books-shop.com
390
Microsoft SQL
2000, Новейшие технологии
Visual Basic Transformation Script ' Copy each source column to the destination column Function Main() =
+
Main = DTSTransformStat_OK End Function Теперь все будет нормально. Только вот как быть с длиной поля? Вдруг не хватит? Да и поле au_fname в приемной таблице нам теперь не нужно. Для внесения изменений вернемся к задаче Create table и, открыв ее свойства, внесем изменения в описание создаваемой таб лицы. Выделенная строка кода создает поле длиной 60 символов (что бы все уместилось), а определение поля вообще удалено (рис. 813):
Рис. 813. Новое определение таблицы соответствует запланированной трансформации.
www.books-shop.com
ГЛАВА 8:
Импорт, экспорт и трансформирование данных
391
Чтобы наш пакет нормально отработал, удалим приемную табли цу и создадим ее заново. Для создания новой таблицы в состав пакета включаем задание типа Execute SQL Task, в свойствах которого про писана команда Drop Table 1. Теперь наш пакет выглядит так (рис. 814):
Puc. 814. Новые задания позволяют удалить создать ее заново и при невозможности создания посылают сообщение администратору. Осталось запустить пакет на исполнение. В меню Package выбе рем команду Execute и через пару секунд получим уведомление о том, как прошли дела. Все завершилось успешно, и наше специальное за дание, предназначенное для обработки сбойной ситуации, даже не потребовалось исполнять (рис. 815). Теперь об использовании основных компонентов пакета и в пер вую очередь — описаний соединений. При описании маршрута обра ботки мы можем многократно использовать одно и то же соедине ние, если оно указывает на правильную БД. Но так лучше не делать, поскольку соединение отрабатывается в рамках единственного пото ка, и все обращения к нему ставятся в очередь. Если в пакете десяток шагов и все они завязаны на единственное описание соединения, очередь получится довольно длинной, а производительность — ниже среднего. Лучше всего для каждого задания создать самостоятельное соединение, даже если оно полностью идентично по параметрам имею Переименовать ранее созданное описание соединения нельзя — можно создать новое с теми же параметрами (например, команда ми Copy/Paste). Старое описание после этого можно удалить.
www.books-shop.com
Microsoft SQL Server 2000. Новейшие технологии
392
815.
Вот каждый раз бы так,
Типы задач Мой сервер способен исполнять более десятка различных задач: одни предназначены для трансформирования данных, другие — для копи рования и управления данными, есть группа служебных задач вроде отправки почты или запуска внешних процессов. Остановимся вкрат це на некоторых задачах и их предназначении. Тип задачи
Назначение
Transform Data
Основной механизм DTS для перемещения и трансформирования данных между OLEdB и ODBCисточниками. Выполняет многофункциональные операции над данными, пользуясь командами TransactSQL. Позволяет исполнять хранимые процедуры операции добавления, модификации и удаления.
Data Driven Query
Bulk Insert Execute SQL Copy SQL Server Objects
Позволяет выполнять импорт текстовых файлов в БД SQL Server. Исполняет выражения TransactSQL. Перемещает объекты БД SQL Server между сервера ми версии 7.0 и выше. Способен копировать полную схему БД.
www.books-shop.com
ГЛАВА 8:
и трансформирование данных
(продолжение) Выполняет код, написанный на языке сценариев. ActiveX Script Dynamic Properties Позволяет модифицировать свойства пакета в про цессе исполнения по данным из резуль тата исполнения запроса, глобальных переменных, переменных окружения (environment variable), файлов данных или констант. Исполняет внешние по отношению к текущему Execute Package пакеты DTS. Execute Позволяет исполнить любое File Transfer Загружает файл данных с удаленного сервера или Интернетадреса в процессе исполнения пакета. Protocol Посылает и принимает сообщения между DTS Message Queue пакетами через сервер очередей. Отсылает почтовое сообщение посредством Send Mail Analysis Services Обрабатывает куб Processing Data Mining Обрабатывает модель киоска данных аналитической службы. Prediction Задачу трансформирования данных мы уже рассмотрели, теперь обсудим некоторые другие типы задач. Самый быстрый способ пере мещения больших объемов данных и текстовых файлов — Bulk Insert Task. Позволяется выполнить простое копирование содержимого файла или использовать файл формата (аналогичный используемому утилитой ВСР), если требуется ограничить список передаваемых по лей, указать наличие предварительной сортировки или принудитель но указать соответствие полей источника и приемника. Исполнение этой задачи SQL Server воспринимает как команду: BULK INSERT FROM WITH
10
И никаких чудес — все делают стандартные команды TSQL. Не обходимость в высокой скорости переноса данных обусловливает не возможность выполнения трансформаций при копировании. Весь файл рассматривается задачей как единственный набор записей (OLEdB recordset). Для копирования подходят файлы, в которых поля разделены запятыми, символами табуляции или иными. Годят ся и файлы со строками фиксированной длины; для копирования
www.books-shop.com
SQL Server 2000, Новейшие технологии данных из этих файлов используйте также задачи Transform Data или Data Driven Query. Если надо трансформировать данные, Bulk Insert можно применить для наполнения промежуточной а зада ния типа Transform Data или Data Driven Query — для обработки ин формации перед окончательным размещением данных в рабочей таб лице Массивное копирование требует, чтобы пользователь принадле жал к роли sysadmin или bulkadmin. Первая позволяет выполнять лю бые операции на сервере, и скорее всего таких будет немного, а вот вторая (Bulk Insert Administrators) — то, что нужно: достаточно прав на массивное копирование, но без лишних возможностей. Замечу лишь, что у членов роли bulkadmin должны быть права на добавление записей в целевую таблицу и на чтение исходного файла. Очевидно, что для подобного рода задач основным критерием яв ляется производительность. При описании параметров задания Вы можете определить следующие характеристики исполнения. • Batch Size По умолчанию размер пакета равен 0. Это значит, что весь файл загружается как одна операция и в конце транзакция фиксируется. Для загрузки большого объема данных имеет смысл разбить пакет на части, чтобы при сбое не начинать всю опера цию сначала. Кроме того, размер пакета может оказать влияние на производительность. • Table Lock Если наложить на приемную таблицу полную блоки ровку, это значительно ускорит загрузку, так как серверу не при дется разбираться с более мелкими блокировками. • Sorted Data Вы можете указать, что данные в исходном файле уже отсортированы в порядке ключа кластерного индекса приемной таблицы. Если у таблицы нет кластерного индекса, указывать этот параметр не нужно. Execute SQL Этот тип задач мы уже использовали и знаем, что он предназначен для исполнения обычных и расширенных SQLвыражений. Эти вы ражения можно писать вручную или использовать Конструктор зап росов (DTS Query Designer), который практически ничем не отлича ется (а может, это он и есть) от Конструктора представлений, доступ ного из ММС. Входные и выходные параметры задачи Execute SQL позволяют передавать глобальные переменные между SQLвыражением и дру гим шагом в рамках пакета. Что сказать о глобальных переменных? Это определяемые разработчиком DTSпакета хранилища для разме
www.books-shop.com
ГЛАВА 8: Импорт, экспорт и трансформирование данных
395
щения определенных значений. Подобно глобальным переменным в других языках программирования в глобальные перемен ные можно и нужно использовать для обмена информацией между шагами пакета. Это обеспечивает пакетам необходимую гибкость. При работе с задачами Execute SQL глобальные переменные можно задействовать для передачи параметров в SQLкоманды или сохране ния результатов исполнения SQLвыражения. Задачи типа Execute SQL поддерживают входные и выходные параметры. Входные пара метры позволяют создавать динамические SQLвыражения, а выход ные параметры задачи могут получать значения выходных парамет ров самого SQLвыражения. Содержимое выходных параметров гло бально в контексте пакета и доступно всем его шагам. Параметры определяются символами в тексте SQLвыражений. При разработ ке задания следует связать параметры SQLкоманд с глобальными переменными пакета, например: SELECT WHERE AND
FROM product = ? = ?
При создании параметров DTS именует параметры в соответствии с их положением в SQLвыражении. В нашем примере параметром 1 является а парамет ром 2 — Замечу: для выходных параметров DTS со храняет набор данных. При сохранении в переменных больших объе мов данных может негативно сказаться на размере и производитель ности пакета. При увязке параметров с глобальными переменными надо устанавливать отношение одинкодному, т. е. одному парамет ру соответствует одна глобальная переменная. Copy SQL Server Objects Очень интересна задача Copy SQL Server Objects. По сути дела этот тип можно использовать как инструмент миграции БД версий 7.0 на версию SQL 2000 (рис. Источник и целевая БД могут распола гаться на разных серверах. Задача Copy SQL Server Objects: • может работать с базами данных SQL Server версий 7.0 и выше; • доступна из Конструктора пакетов и мастера экспорта/импорта; • может копировать все объекты БД или только конкретный набор объектов, включая: • таблицы и представления; • ограничения и индексы; • хранимые процедуры; • может переносить данные, хранящие или не хранящие данные. Ⱦɚɧɧɚɹɜɟɪɫɢɹɤɧɢɝɢɜɵɩɭɳɟɧɚɷɥɟɤɬɪɨɧɧɵɦɢɡɞɚɬɟɥɶɫɬɜɨɦ%RRNVVKRS ɊɚɫɩɪɨɫɬɪɚɧɟɧɢɟɩɪɨɞɚɠɚɩɟɪɟɡɚɩɢɫɶɞɚɧɧɨɣɤɧɢɝɢɢɥɢɟɟɱɚɫɬɟɣɁȺɉɊȿɓȿɇɕ Ɉɜɫɟɯɧɚɪɭɲɟɧɢɹɯɩɪɨɫɶɛɚɫɨɨɛɳɚɬɶɩɨɚɞɪɟɫɭ[email protected]
Server
Рис. 816. Эту задачу можно использовать для миграции существующей схемы базы данных на другой сервер.
Если Вы пометите флажок Include dependent objects, в целевую БД могут попасть объекты, копировать которые Вы не собирались. Обратите внимание и на другие стандартные параметры задачи, на пример Drop destination objects first. Прежде чем исполнить задачу, тщательно просмотрите его параметры. Transform Data Теперь обратимся к задачам, выполняющим трансформацию данных. Они используют уже упоминавшийся компонент Data Pump. В эту категорию в ходят три типа • Transform Data — наиболее базовая реализация Data Pump. Этот тип задач перемещает данные между разнородными источниками дан ных на основе операций Insert. Задача Transform Data применима для копирования данных между любыми хранилищами, к которым можно добраться средствами и при необходи мости выполнить дополнительное трансформирование данных.
www.books-shop.com
ГЛАВА 8: Импорт, экспорт и трансформирование данных
39?
Задачи типа Data Driven Query позволяют выполнять разнообраз ные операции средствами TransactSQL, включая вызовы храни мых процедур, добавления, удаления и модификации. • Задача доступная только программно, выполня ет практически те же функции, что и Transform Data и Data Driven, за тем исключением, что способна работать с иерархическими на борами данных. Для настройки Transform Data следует определить источник, це левое хранилище и при необходимости Для вы полнения работы задача должна быть связана с двумя соединениями: source и destination. Источником для Transform Data могут быть любая таблица, пред ставление или запрос на TransactSQL, определенный из описания соединения. В качестве источника может также выступать текстовый файл, таблица Excel и другие форматы хранения. Целевым хранилищем может быть таблица БД или иное хранили ще. Целевую таблицу можно создать в диалоговом окне описания за дачи (вкладка Destination). Таблица будет создана по щелчку кнопки ОК диалогового окна Create Destination table. По умолчанию структу ра целевой таблицы аналогична структуре данных исходного храни лища. Если Вы собираетесь трансформировать данные, можете вруч ную описать создаваемое хранилище с учетом предполагаемой транс формации. При описании связей между полями исходного и целево го хранилища можно выбрать тип связей (mapping) (рис. • или прямое копирование полей. При этом одному полю исходных данных соответствует одно поле в приемнике. Та кой тип связи создает единственную стрелку, соединяющую свя занные поля. Для каждой индивидуальной стрелкисвязи будет со здан самостоятельный экземпляр компонента Data Pump, что, как я уже говорил, только ухудшит производительность задания. • Симметричная связь многиесомногими. Этот тип связи предпо лагает одинаковое число полей на каждой стороне связи, и груп пы полей соединяются единственной стрелкой, оба конца кото рой имеют одинаковое количество ветвей. Это самый оптималь ный вариант связей, так как для переноса группы полей инициа лизируется единственный компонент Data Pump. • Асимметричная связь многиесомногими. В этом случае един ственная стрелка связи указывает на разное число полей исходной и целевой таблицы. Этот тип связи может представлять трансфор мацию, не имеющую исходных или целевых полей. Такой тип свя зей также требует только одного экземпляра Data Pump. •
www.books-shop.com
Microsoft SQL Server 2000, Новейшие технологии
398 Data 1 ask Properties
Column
j *
aujname aujname phone address city state zip contract
Ч
Select All | OK 817.
| aujname aujname phone
Delete A» | |
j
Help
Типы связей между полями исходной и целевой таблиц.
При выборе типа связи следует учитывать возможности типов трансформаций. В таблице указано, какие типы трансформаций под держиваются теми или иными типами связей. Асимметричный Симметричный многиесомногими многиесо многими
Тип трансформации Copy Column ActiveX String Uppercase String Lowercase String Middle of String Trim String Read File Write File
X X X X X X X X
X X X X X X X X
X X
X
Помимо связей между полями, на процесс трансформации дан ных влияет набор флагов, доступных в диалоговом окне, вызываемом из контекстного меню, которое появляется по щелчку правой кноп кой стрелки, отображающей трансформацию. Набор флагов влияет
www.books-shop.com
ГЛАВА 8; Импорт, экспорт и трансформирование данных
399
на «строгость», с которой пакет подходит к преобразованию типов и значениям NULL (рис.
818.
Строгость преобразований определяется флажками.
По умолчанию выбран переключатель Default transformation flags — наименее строгая комбинация параметров, позволяющая все воз можные преобразования. Переключатель Require exact match (Требуется точное соответ ствие) обеспечивает точное соответствие типов данных между поля ми исходной и целевой таблиц. Если типы не совпадают, выдается об ошибке. Переключатель Custom transformation flags (Пользовательская ком бинация флагов) позволяет выбрать вспомогательный флажок: • флажок Allow data type promotion эскалацию типа) печивает продвижение чисел до 32разрядных целых; • флажок data type demotion (Позволить понижение типа) обес печивает понизить 32разрядные целые до 16разрядных; • флажок Move data between NULL and NOT NULL columns обеспе чивает конвертирование данных между полями, позволяющими хранить величины и теми, что не позволяют делать этого. При щелчке кнопки Test DTS пытается трансформировать исход ные данные и записывает преобразованные данные во временный текстовый файл. При возникновении ошибок Вы получаете сообще ние, которое поможет при отладке задачи. Так как запись выполня ется во временный файл, DTS не проверяет возможность записи в целевую таблицу — это делается только во время реального исполне ния пакета.
www.books-shop.com
Microsoft SQL
2000,
технологии
Ошибки загрузки данных могут принимать несколько форм: ошиб ки БД, ошибки сценария, ошибки на уровне таблицы или ошибки в ло гике преобразования. Чаще всего ошибки приводят к тому, что целевая таблица отвергает данные, которые пакет пытается загрузить в нее. При построении пакета следует выработать процедуру обработки ошибок, способную разбираться со всеми ситуациями в соответствии с Вашими требованиями к пакету.
Право на ошибку По умолчанию DTS не позволяет ни единой ошибки в процессе ис полнения. При первой же проблеме шаг и задание считаются не вы полненными. В диалоговом окне с описанием свойств, на вкладке Options мож но назначить число допустимых ошибок для операции по преобразо ванию данных. Счетчик Max error count (Максимально допустимое число ошибок) позволяет указать, сколько ошибок можно допустить при исполнении данного задания. Когда число ошибок превысит ука занное, исполнение задания прекращается, и оно считается невыпол ненным. Если процесс загрузки постоянно встречает некоторое ко личество ошибок, установите соответствующее значение с учетом сле дующего: по умолчанию это значение равно 0, максимально допусти мое число ошибок — 9999. Более высокий порог терпимости назна чается программно. Имейте в виду, что даже при допустимости оши бок диалоговое окно Package Execution выведет сообщение о том, что шаг не был выполнен (Package Error), если число возникших ошибок превысило допустимое (рис. 819). Если число ошибок меньше максимального предела, шаг будет выполнен «молча», сообщений не появится, просто Вы не досчитае тесь нескольких (десятков, записей. Чтобы полностью конт ролировать ситуацию, лучше всего задействовать средства протоко лирования пакета, описанные в следующем разделе.
Это сообщение появляется, когда число ошибок превысило допустимый предел.
www.books-shop.com
ГЛАВА 8: Импорт, экспорт и трансформирование данных
820.
401
Здесь выполняется настройка процесса обработки ошибок.
По умолчанию обрабатываются все записи исходного набора. Если это Вас не устраивает, настройте счетчики First Row (Первая запись) и Last Row (Последняя запись), указывающие диапазон, в рамках ко торого будет производиться загрузка (рис. 820). Это может приго диться, если надо пропустить заголовок или возобновить загрузку с того момента, когда обработка была прервана при возникновении ошибки на известной Обработка исключительных ситуаций При выполнении трансформации возникающие исключительные си туации можно фиксировать в файле протокола. Этот файл хранит раз личный объем информации в зависимости от флажка, выбранного в разделе File Type (Тип файла) вкладки Options. Если это 7.0 format (Формат SQL Server 7.0), остальные флажки недоступны, а в файл за писывается та же информация, что и в версии 7.0, т. е. для програм мы разбора файла, написанной для версии 7.0, не придется делать из менения. Флажок Error Text позволяет записывать информацию об исполнении пакета, включая имя пакета, время начала исполнения и время завершения, это доступно только для версии SQL Server 2000. Если Вы хотите знать, какие строки исходного набора вызвали ошиб ки, выберите флажок Source error rows (Ошибки исходного набора Создаваемый файл получает странное имя, состоящее из
www.books-shop.com
Microsoft SQL Server 2000, Новейшие технологии текста, который Вы ввели в поле Name, и расширения Source, при ставляемого к уже имеющемуся (но для Windows 2000 это не вопрос). Эта функциональность доступна только для SQL Server Созда ние файла с отвергнутыми записями — вещь вполне разумная, это позволяет Вам лучше понять причину ошибки и четче контролиро вать содержимое целевой таблицы. Последний флажок Dest error (Ошибки целевой таблицы) позволяет создать еще один файл с рас ширением Dest. Туда будут записаны строки исходного файла, кото рые были отвергнуты и не записаны в целевую таблицу. Опятьтаки, эта функциональность доступна только для SQL Server 2000. Ниже приведен пример протокола исполнения задания, в процес се исполнения которого возникли ошибки. DATA TRANSFORMATION SERVICES: Data Pump Exception Log Package Name: Test2 Package Description: (null) Package ID: Package Version: Step Name: Execution Started:
07.10.2000 22:39:54
1 Error during Transformation __ for Row number 1. Errors encountered so far in this task: 1. ' Эта ошибка потребует записи в Source'файл Error Source: Microsoft Data Transformation Services Data Pump Error __ conversion error: Conversion invalid for datatypes on column pair 1 (source column (DBTYPE_STR), destination column Error Help Error Help Context Logged Not Available 4 Error at Destination for Row number 4. Errors encountered so far in this task: 2. Error Source: Microsoft OLE)dB Provider for SQL Server Error statement has been terminated. Error Help File:
www.books-shop.com
ГЛАВА 8: Импорт, экспорт и трансформирование Error Help Context ID:0 + Эта ошибка потребует записи в Dest+файл Error Source: Microsoft Provider for SQL Server Error statement conflicted with COLUMN CHECK constraint The conflict occurred in database table column Error Help File: Error Help Context ID:0 Logged Logged Execution Completed: 07.10.2000 22:39:54
Как видите, сообщения достаточно подробные, вплоть до того, что приводится ссылка на идентификатор файла контекстной помощи. Чем отличаются файлы, создаваемые при выделении флажков Source error rows и Dest error rows? Вроде бы и там и там ошибочные записи исходного набора, отвергнутые в процессе трансформирова ния записываются в файл. Почему два разных файла? Дело в том, что ошибки DTS могут возникнуть в двух основных точках исполнения: при обработке (преобразовании) записи и при записи в целевую таб лицу. В первом случае отвергнутая строка записывается в Source файл, во втором — в Destфайл. Файлы с протоколом исполнения создаются при первом исполне нии пакета и впоследствии только пополняются при каждом после дующем запуске. Параметры быстрой загрузки
Если в качестве целевого хранилища выбрана БД SQL Server, Вы мо жете определить две группы параметров, позволяющих ускорить пе ремещение данных. Это Fast Load (Быстрая загрузка) и Batch Settings (Настройки пакета). Быстрая загрузка влияет на то, как Вы конфигу рируете максимально допустимое число ошибок. Режим Fast Load поддерживает высокоскоростную загрузку для таблиц SQL Server. При активизации этого режима компонент Data Pump способен работать с исходными данными в пакетном режиме. Быстрая загрузка реали зована посредством OLEdBинтерфейса IRowsetFastLoad, доступно го только у OLEdBпровайдера для SQL Server. Для остальных целе вых хранилищ Data Pump использует интерфейс орга низующий набор команд INSERT.
www.books-shop.com
404
SQL Server 2000, Новейшие технологии
Если режим быстрой загрузки активен, Вы можете также устано вить следующие параметры. • Keep NULL values (Сохранять значения — позволяет поме щать в поля целевой таблицы величины даже если для этих полей определены значения умолчания. • Check Constraints (Проверять ограничения) — указывает серверу проверять ограничения в процессе загрузки. По умолчанию про верка отключена, в этом случае загрузка идет быстрее, но Вы дол жны быть абсолютно уверены, что исходный набор толь ко верные данные. • Table Lock (Блокировка таблицы) — SQL Server должен блокиро вать всю таблицу сразу. По умолчанию при загрузке данных ис пользуется блокировка на уровне При выборе этого флаж ка будет задействована блокировка на уровне таблицы, что хоть и не позволяет другим пользователям вносить изменения в таблицу, но требует меньше ресурсов и работает быстрее. Сценарии ActiveX При создании пакета с помощью сценария ActiveX можно реализовать специализированные преобразования. При этом следует иметь в виду, что код исполняется для каждой строки исходного набора данных. ActiveXсценарий: • интерпретируется на этапе исполнения; • обращается к СОМкомпонентам через интерфейсы • зависит от хоста (scripting рого исполняется его код.
подобного DTS, в контексте кото
Константы DTSTransformStat Управлять исполнением кода сценария позволяет набор констант. Трансформирование исходных данных выполняется в рамках функ ции Main. Чтобы указать Data Pump, что делать с очередной строкой исходного набора, Main возвращает одну из констант, которые носят общее название DTSTransformStat. По умолчанию возвращается кон станта DTSTransformStat_OK, т. е. Data Pump должен записать оче редную запись в целевую таблицу и ошибок пока не отмечено. Константы позволяют выполнять разнообразные действия над индивидуальными строками исходного набора. Вот константы груп пы DTSTransformStat, которые можно использовать в рамках задачи Transform Data:
www.books-shop.com
ГЛАВА 8:
Импорт, экспорт и трансформирование данных
Константа
405
Описание Обработка прекращается на текущей запи си, и из IDTSDataPump::Execute возвра щается Указывает на ошибку в процессе
ExceptionRow
DTSTransformStat Info
DTSTransformStat OK
DTSTransformStat
Прекратить дальнейшую обработку записи изза ошибки и вызвать обработчик ошибок, но не записывать информацию в файл исключений. Прекратить дальнейшую обработку теку щей записи как исключения, вызвать об работчик ошибок и записать информацию в файл Успешная обработка записи, сопровожда емая дополнительной информацией, ко торую приложение может обработать. Стандартное преобразование (если име ется) выполнено успешно. Записать стро ку в целевую таблицу (если так указано), не вызывая обработчики ошибок. Записать строку, если для нее указана це левая таблица. Вызвать обработчик оши бок с дополнительной He считывать следующую строку из ис ходного набора данных. Повторно выпол нить все преобразования для текущей исходной и целевой записей. He записывать текущую строку в целевую таблицу. Прекратить обработку текущей строки. Ошибки не произошло. Прекратить обработку текущей записи и вызвать обработчик ошибок с дополни тельной информацией.
Отладка сценариев В среде Microsoft Windows 2000, Microsoft Visual InterDev 6.0 или Microsoft Windows NT 4.0 с установленным Option Pack Вы получаете возможность отладки сценариев. Ⱦɚɧɧɚɹɜɟɪɫɢɹɤɧɢɝɢɜɵɩɭɳɟɧɚɷɥɟɤɬɪɨɧɧɵɦɢɡɞɚɬɟɥɶɫɬɜɨɦ%RRNVVKRS ɊɚɫɩɪɨɫɬɪɚɧɟɧɢɟɩɪɨɞɚɠɚɩɟɪɟɡɚɩɢɫɶɞɚɧɧɨɣɤɧɢɝɢɢɥɢɟɟɱɚɫɬɟɣɁȺɉɊȿɓȿɇɕ Ɉɜɫɟɯɧɚɪɭɲɟɧɢɹɯɩɪɨɫɶɛɚɫɨɨɛɳɚɬɶɩɨɚɞɪɟɫɭ[email protected]
SQL Server 2000, Новейшие технологии Чтобы использовать отладчик, надо активизировать режим отлад ки для всех DTSпакетов. После этого любая ошибка, обнаруженная в процессе исполнения сценария, инициализирует сессию отладки. Режим отладки активизируется в диалоговом окне свойств. Оно вы зывается из контекстного меню, которое появляется по щелчку пра вой кнопкой раздела Data Transformation Services консоли управле ния SQL Server. В разделе Debugging выделите флажок Turn on justin debugging (Включить режим немедленной Если пакет отрабатывает без ошибок, но при этом все равно выда ет неверные данные, Вам может понадобиться принудительный пе реход в режим отладки для анализа входных данных и логики сцена рия. Для принудительного вызова отладчика включите в соответству ющее место сценария команду Stop, если сценарий написан на VB Script или команду Debugger для сценария на Jscript. Для отладки не скольких сценариев в рамках одного пакета выделите флажок Execute on main package thread (Исполнять в рамках основного потока пакета) в окне свойств индивидуального элемента Workflow. Вопросы производительности Обеспечивая гибкость процессу трансформирования данных, сцена рии ActiveX снижают общую производительность пакета. Дело в том, что обработка ведется построчно и для каждой строки надо инициа лизировать интерпретатор сценариев. В результате шаг, использую щий сценарий, может исполняться в два, а то и более раз медленнее, чем остальные шаги, выполняющие трансформацию. Выбор языка сценария также влияет на скорость работы. Быстрее всего исполня ются сценарии на VB Script. Если Вам нужна высокая скорость работы вкупе с использовани ем нестандартной логики преобразований, стоит рассмотреть созда ние специализированных С++трансформаций. Несколько повысить производительность сценария можно, при менив числа вместо имен констант. Но читать код в этом случае бу дет Data Driven Query Этот тип задач позволяет реализовать очень многое с точки зрения гибкости запроса, направленного на целевую таблицу. Задача исполь зует функциональность Data Pump и трансформаций средствами сце нариев для преобразования исходных данных, которые затем приме няются в командах для работы с целевым хра нилищем.
www.books-shop.com
экспорт и трансформирование
407
Data Driven Query (DDQ) в сравнении с Transform Data предостав ляет больше гибкости, так как функциональность этого типа распро страняется дальше простых операций вставки, реализованных во вто ром DDQзадачи позволяют преобразовывать данные и исполь зовать их в любой Transact SQLоперации, включая хранимые проце дуры и выражения Insert, Update или Delete. Гибкость DDQ позволяет выполнить до 4 команд над любой из таблиц в БД целевого хранилища: • вставка (Insert) трансформированных исходных данных в целевую таблицу; • замена (Update) существующих данных информацией, полученной после преобразования исходных данных; • удаление (Delete) существующих данных в целевой таблице на ос нове некоторых критериев; • исполнение (Perform) пользовательских команд над данными в це левой БД, в том числе средствами хранимых процедур. Функциональность DDQ шире, чем у Transform Data. Трансфор мирование и передача данных в целевую таблицу выполняется сред ствами Data Pump и производится построчно. Обработка исходных данных происходит в следующем порядке. Сканируется строка исходных данных. Основная задача этого эта па — подготовить информацию для основных команд. В качестве ис точника DDQ может использовать любую таблицу, представление или указанные в описании соединения с источником. Информа цию из источника можно также извлекать средствами многомерных запросов Expressions — MDX). Затем DDQ выполняет все указанные преобразования. Если ис ходные данные представлены в неподходящем формате, Вы можете создать сценарий для выполнения соответствующего преобразования. Следующий шаг — привязка (mapping) преобразованных исходных данных к параметрам команды, которая будет выполнена над целе вой таблицей. Привязка выполняется в два этапа. DTS выполняет привязку исходных данных к полям промежуточ ной таблицы bindings table (таблица DDQ не выполня ет вставку данных в таблицу привязок — вместо этого DTS исполь зует поля промежуточной таблицы как шаблон для трансформи рованных данных. Сценарий ActiveX указывает на привязку меж ду исходными данными и полями таблицы привязок.
www.books-shop.com
408
Microsoft SQL Server 2000,
технологии
2. На втором этапе DDQ выполняет привязку полей промежуточной таблицы с параметрами целевой команды. Во время исполнения на место параметров подставляются «живые» Для управления процессом исполнения задания DDQ использует четыре константы группы DTSTransformStat: Константа DTS TransformStat
Описание Исполняет команду INSERT, переда ваемую в свойство на целевом сервере, с использова нием величин, полученных из текущей строки исходных данных. Исполняет команду DELETE, переда ваемую в свойство ries на целевом сервере, с использова нием величин, полученных из текущей строки исходных данных. Исполняет команду UPDATE, переда ваемую в свойство ries на целевом сервере, с использова нием величин, полученных из текущей строки исходных данных. Исполняет пользовательскую команду, передаваемую в свойство на целевом с ис пользованием величин, полученных из текущей строки исходных Данных.
Из всех задач DDQ — помоему, наименее очевиден, поэтому мне показалось уместным подробно рассказать о его настройке. Для ределения DDQ надо сделать следующее. Укажите целевую команду или команды, которые будут выполне ны на принимающем сервере. 2. Определите состав полей целевой команды. Все поля целевой команды представлены входными параметрами в виде вопросительных знаков. На этапе исполнения параметры будут заменены реальными данными. 4. Создайте таблицу привязок, содержащую набор парамегризиро полей целевой команды. 5. Все поля целевой команды должны быть представлены в таблице привязок. Можно использовать
www.books-shop.com
ГЛАВА 8: Импорт,
и трансформирование
409
юся таблицу нужной структуры или создать новую. Промежуточ ная таблица нужна лишь как средство привязки параметров целе вой команды к исходным данным. 6. Укажите источник, из которого будут браться исходные данные, и список его полей, соответствующий набору полей промежуточной таблицы. 7. Результат исполнения запроса к источнику должен предоставить набор полей, включающий все поля промежуточной таблицы. На стройте преобразования средствами сценария. 8. В описании трансформации можно указать Data Pump исполняе мый целевой запрос. Обработка по условиям позволяет исполнять различные целевые запросы для каждой строки исходного набора. В качестве условия обработки можно задействовать значение не которого поля в исходном наборе. Это может быть специализиро ванное поле, значение которого указывает на тип целевого запро са, например I для команды INSERT, U для команды UPDATE, D для DELETE и U для пользовательского запроса. В свое время этот тип задачи позволил мне организовать репликацию из БД Visual FoxPro в БД SQL Server. Как известно, SQL Server поддерживает репликацию с БД VFP, но только если VFP играет роль подписчи ка, мне же было нужно, чтобы FoxPro выступал издателем. Как видите, функционально это, пожалуй, самая богатая из име ющихся задач, но ничто не дается бесплатно, и тут за функциональ ность приходится расплачиваться производительностью. Поэтому, если нужно выполнять только добавление данных, используйте зада чи Transform Data или Bulk Insert — они оптимизированы для опера ций вставки. В качестве приемного сервера Вам нужно использовать такой, что поддерживает запросы, т. е. для приемного хранилища должен поддерживать интерфейс ICommand. Исполнение пакетов Говоря об исполнении пакетов, следует иметь в виду простое прави ло: пакет — это клиентское приложение, исполняемое на компьюте ре, где оно было инициализировано. Пакет загружается в процесс клиента и исполняется в контексте этого процесса. Например: • пакеты, исполняющиеся из административной среды SQL Server, исполняются в контексте процесса Microsoft Management Console — mmc.exe на Вашем компьютере;
www.books-shop.com
Microsoft SQL
2000.
технологии
•
исполняемые из командной строки, исполняются в кон тексте процесса cmd.exe; • пакеты, исполняемые по графику, управляемому SQL Server Agent, исполняются в контексте SQL Server Agent. Исполнять пакет, извлекать его в структурированный уда лять и перезаписывать существующие позволяет утили та командной строки которая принимает параметры: • указывающие положение пакета; • указывающие идентификаторы пакета; • вспомогательные. Параметры положения пакета Утилита dtsrun позволяет работать с пакетами, сохраненными в БД SQL Server, структурированном файле и БД Meta Data Services. По ложение пакета указывается следующими параметрами. • /S Имя сервера [\Имя экземпляра сервера] — для пакетов, храня щихся в БД SQL Server и БД Meta Data Services, указывает сетевое имя сервера и имя экземпляра SQL Server. Если имя экземпляра не указано, используется стандартное имя сервера. • /F Имя файла — для структурированного файла хранения указы вайте путь к файлу в формате UNC. Если, помимо этого парамет ра, указано имя сервера, соответствующий пакет будет извлечен из сервера и добавлен в структурированное • /R имя БД Data Services — для пакетов, сохраненных в Meta Data Services, позволяет указать имя БД, в которой хранится пакет. Этот обязательный параметр должен быть задан, даже если Вы не ука зываете имя. Если имя опущено, используется БД по умолчанию. Для пакетов, сохраненных в БД SQL Server и БД Meta Data Ser vices, следует указывать параметры подключения к серверу. Это стан дартный набор из имени и пароля или указания на то, что должно быть использовано доверительное соединение: • /U имя пользователя — имя, используемое для подключения к сер веру; • /Р пароль — пароль, используемый для подключения к серверу; • /Е — использовать доверительное соединение (при этом пароль и имя пользователя не нужны). Идентификаторы пакета Для идентификации конкретного пакета задаются следующие пара метры. • /N имя пакета — имя исполняемого пакета.
www.books-shop.com
ГЛАВА 8: Импорт, экспорт и трансформирование данных •
/М пароль, необходимый для исполнения пакета — используйте этот параметр, если пакет может быть исполнен только при указа нии пароля. • /G строка с глобально уникальным идентификатором (GUID) па кета — можно использовать вместо имени пакета. Дополнительно с идентификатором самого пакета можно указать идентификатор версии. Если идентификатор не указан, используется последняя версия. • /V строка с глобально уникальным идентификатором версии па кета — идентификатор версии, используемый совместно с иден тификатором пакета. Для исполнения пакета Вы должны указать как минимум место положение, параметры регистрации на сервере и идентификатор па кета. Вспомогательные параметры
Вспомогательные параметры утилиты позволяют определить журна лирование для пакета, глобальные переменные и прочие атрибуты исполнения. • /L имя файла — имя файла для процесса испол нения пакета. • /А имя глобальной переменной: идентификатор типа=значение — указывает имя глобальной переменной и ее тип. Весь аргумент следует указывать в кавычках. Для указания нескольких перемен ных повторите аргумент несколько раз. • — может принимать значение True или False и указывает, за писывать ли статус исполнения пакета в журнал событий Windows (NT Event Log). • /!X — позволяет извлечь пакет из SQL Server записать его в струк турированный файл, не исполняя. • /!D — удаляет пакет из хранилища SQL Server. Перед удалением пакет не исполняется. Удалить пакет из структурированного хра нилища нельзя — можно только перезаписать, задав параметры /F •
/!Y — позволяет создать и отобразить зашифрованную команду без фактического исполнения пакета. Результат вызова утилиты с таким ключом может выглядеть при мерно так: Исходный вызов в командной строке )E Зашифрованный результат
/!C — позволяет скопировать текст вызова утилиты в буфер обме на Windows. Этот ключ можно использовать совместно с ключами /!Х и /!Y.
Пробелы между ключами команды можно ставить, а можно и не ставить. Если в значении (например, имя пакета) пробел есть, все значение нужно окружить кавычками. Регистр параметров команды значения не имеет. Тем, кто не любит работать в командной строке, рекомендую ана лог снабженный графическим интерфейсом. Эта утилита на зывается (рис. Транзакции При создании пакета Вы можете «обернуть» несколько его шагов в транзакцию. Это позволит обеспечить транзакционную целостность группе операций пакета. Транзакции пакета используют координа тор распределенных транзакций (Microsoft Distributed Transaction Coordinator — MS DTC). Для организации транзакций в пакете сле дует сконфигурировать два уровня параметров: • на уровне всего пакета; • на уровне индивидуальных шагов. Не все типы заданий поддерживают транзакции. Чтобы задейство вать эту функциональность, Вы должны использовать один из пере численных ниже типов: • Bulk Insert Task; • Data Driven Query Task; • Transform Data Task; • Execute Package Task; • Execute SQL Task. Если Вы работаете с иным, чем SQL Server, источником, он дол жен поддерживать распределенные транзакции (скажем, наивно ожи дать этого от текстовых файлов). Настройка транзакций на уровне пакета выполняется в диалого вом окне, вызываемом командой Package Properties (Свойства паке та) из контекстного меню. На вкладке Advanced есть раздел Trans action, где можно отметить флажок Use transactions (Использовать транзакции). Если флажок отмечен, пакет начинает использовать транзакции (рис. 822).
www.books-shop.com
ГЛАВА 8; Импорт, экспорт и трансформирование данных
413
Рис. Графический интерфейс обеспечивает ту же функциональность, что и командная строка.
Транзакции можно отслеживать средствами консоли DTC и утилиты профилирования.
www.books-shop.com
Microsoft SQL Server 2000, Новейшие технологии При настройке транзакций для пакета можно пометить флажок Commit on successful package completion (Фиксировать при успешном завершении пакета), который управляет режимом организации тран закций. Режимов может быть два: явный (Explicit) и неявный (Implicit). Explicit (флажок выделен) подразумевает, что DTS обрабатывает каж дый шаг основывается на поведении Если SQL команда успешно завершилась, DTC автоматически фиксирует тран закцию при условии, что этот режим поддерживается провайдером. Если при исполнении команды произошла ошибка, транзакция от катывается, опятьтаки если провайдер обеспечивает такую функци ональность. Implicit позволяет контролировать реализацию транзак ций. В рамки одной транзакции можно включить группу шагов, и DTS задействует функциональность DTC для начала транзакции, ко торая активна до тех пор, пока DTS не зафиксирует или не откатит ее. При этом нужно учитывать, что провайдер должен поддерживать такую функциональность. Раскрывающийся список Transaction isolation level (Уровень изо ляции транзакций) позволяет конфигурировать поведение системы при фиксации транзакций. По умолчанию выбирается Read Committed — этот режим не позволяет видеть изменений, сделанных другими транзакциями, пока они не зафиксированы. Поведение индивидуаль ных шагов с точки зрения обработки транзакций настраивается в ди алоговом окне, вызываемом командой Workflow Properties контекст ного меню. Когда пакет исполняется в режиме неявной фиксации транзакций, Вы можете использовать параметры индивидуальных шагов для подключения к существующим транзакциям (флажок Join transaction if present). В этом случае шаг либо ини циирует транзакцию, если он исполняется первым в пакете, либо подключится к ранее инициированной транзакции. Шаг может фик сировать транзакцию, если выбран флажок Commit transaction on successful completion of this step (Фиксировать транзакцию при успеш ном завершении шага), или откатывать всю транзакцию при возник новении ошибки (это выполняется при выборе флажка Rollback trans action on failure). Если пакет использует две или более транзакций, имеет смысл создавать дополнительные шаги, которые будут выпол нять функции контрольных точек для фиксации или отката индиви дуальных транзакций. Редактирование при связи Обычно пакет можно редактировать только при наличии «живых» соединений. В режиме оторванного редактирования (Disconnected Edit) Вы можете не только получить доступ к параметрам пакета, не
www.books-shop.com
ГЛАВА 8:
Импорт, экспорт и трансформирование данных
415
доступным из стандартного редактора, но и в условиях, когда соеди нения нет (рис. 823). Этот режим позволяет: • просматривать или редактировать свойства элементов пакета; в режиме просмотра и редактирования доступны: • свойства пакета, такие как имя, описание и настройки журна лирования; • свойства соединения, такие как имя сервера, имя пользователя и пароль; • свойства задания, такие как запрос, формирующий исходный набор данных, целевая таблица и файлы журналов; • свойства шагов, такие как имя шага и имя задания; • значения глобальных переменных; • сохранять изменения, не имея активного соединения с внешними источниками; в режиме оторванного редактирования пакет сохра нят изменения, не проверяя их значений; все проверки вы полнены на этапе исполнения; • просматривать свойства, открытые только на чтение; • модифицировать свойства, открытые для редактирования; помни те, что значения свойств имеют определенный тип данных.
Microsoft SQL Server 2000, Новейшие технологии История изменений История изменений (Data lineage) — аналог метаданных, сопровожда ющих информацию, загружаемую в приемную таблицу. Для получе ния исторических сведений Вам следует сохранять пакет в Meta Data Services. Используя идентификатор пакета, DTS способен отслежи вать информацию для каждого исполнения пакета. Для идентифика ции каждый пакет получает две метки: короткое целое число, пред ставляющее собой контрольную сумму версии пакета, или длинный уникальный идентификатор в форме GUID. Загружая таблицу средствами можете дополнить каждую за пись сведениями об идентификаторе пакета. Сохранение истории Для сохранения истории необходимо сохранить пакет в Meta Data Services и активизировать идентификаторы пакета. В целевой табли це надо создать дополнительные поля для хранения идентификато ров и включить их в состав трансформации в рамках заданий Trans form Data или Data Driven Query. Это можно сделать в диалоговом окне свойств пакета. Для активизации идентификаторов в диалого вом окне свойств пакета (вкладка Advanced) отметьте флажки Show lineage variables as source columns (Показывать идентификаторы в спис ке полей исходного набора) и Write lineage to repository (Записывать идентификаторы в репозиторий). Второй флажок можно не отмечать, только если Ваше приложение выполнит запись самостоятельно. Заключение Средствами DTS можно превратить SQL Server в универсальный шлюз для работы с данными практически любого формата. Сценарии и пользовательские компоненты позволяют выполнять очень слож ные трансформации данных на пути от источника к целевому храни лищу. Особенно полезен DTS при создании и поддержании храни лищ данных.
www.books-shop.com
Глава 9
SQL Server
и
остальной
мир
Гдето я прочел: «Никто не покупает операционную систему ради нее самой». Слегка переиначив этот афоризм, мы получим «золотое пра вило» относительно систем управления базами данных (СУБД): «Кому нужна СУБД как таковая!» Если нет удобных клиентских приложений, информация БД почти бесполезна. При этом клиентское приложение, даже самое качественное с точки зрения дружественности и красоты, — ничто без связующего слоя — интерфейса прикладного программиро вания открывающего доступ к данным в таблицах. Однако и это не все. Организации, созданные за два дня до покупки ПО, сервер ус танавливают редко. Как правило, одной из весьма серьезных проблем является интеграция данных, накопленных за все предыдущее время, с базами данных SQL Server. Иногда эти данные слишком раздроблены и не прошли тщательной проверки, иногда они вообще нельзя переме стить в БД SQL Server. Тем не менее любая организация заинтересова на в универсальном, однородном и централизованном доступе к ин формации. А если доступ еще и прост! SQL Server 8.0 может реально претендовать на роль центрального узла, через который проходят все информационные потоки.
Прежде чем перейти к примерам конкретного программирования, стоит описать интерфейсы, о которых пойдет речь. И коль скоро на чинать следует с самого низа, обратимся к интерфейсу OLEdB. Никто в Microsoft не делает секрета из того, что OLE рассматрива ется корпорацией как основное средство взаимодействия приложе ний. Однако информационные системы развиваются, и теперь уже явно недостаточно обеспечивать доступ только к «классическим»
www.books-shop.com
Microsoft SQL Server 2000, Новейшие технологии структурированным хранилищам. Все чаще разработчики обращают ся к данным электронных таблиц, файловой системы, хранилищ элек тронной почты. В работе с нереляционными хранилищами пользова телю нужны такие же целостность данных, гибкость при построении запросов и удобное представление результатов, как и при «общении» с серверами БД. Вот почему Microsoft создала набор OLEинтерфей сов под общим названием OLEdB (OLE для баз данных), предназна ченных для получения информации из разных источников. Разработчики Microsoft руководствовались здравым смыслом и сформулировали простой и ясный принцип: «Данные должны хранить ся в наиболее подходящем Как это понимать? Очень просто: информация, более всего подходящая для хранения в электронной таб лице, должна храниться именно там — какой смысл заталкивать ее в БД? Кроме того, огромное количество накопленных к настоящему вре мени данных просто невозможно в разумные сроки перенести в реля ционные (или объектные) хранилища. Но доступто к данным нужен, и пользователю все равно, в каком формате они хранятся, так как ре ально его интересует чтото вроде: «Почему во втором квартале мы имели на 10% прибыли меньше по сравнению с аналогичным перио дом прошлого года?» Вполне возможно, что за ответом придется обра титься и к почтовому хранилищу Exchange, и к таблице MS Excel, и к БД SQL Server. В flOOLEdB'iuibHyio эру извлечение информации из подобного набора источников потребовало бы целого набора API: Messaging API для Exchange, ODBC для SQL Server, возможно, OLE для данных, созданных в офисных приложениях. Целью создания OLE dB является упрощение подобного рода задач за счет предоставления универсального доступа к данным в различных форматах. Теперь как организована работа с источниками данных. В процессе участвуют два основных типа программных компонентов: (Provider) и (Consumer). Пер вый предоставляет данные, запрашиваемые вторым. Именно провай дер организует запрос, обращенный к хранилищу информации. При этом результаты независимо от способа хранения в оригинальном формате приходят в виде. Собственно обращение потре бителя формулируется на стандартном SQL, а провайдер знает, как преобразовать, скажем, SELECT в запрос, понятный хранилищу. А когда хранилище само по себе вообще ничего не в состоянии понять, используется логика, включенная в код провайдера. Помните ODBC драйверы, предназначенные для работы с xBASEфайлами? Они не только принимали но сами его и выполняли. В провайдеры разбиваются на две группы: про вайдеры данных (Data provider) и поставщики услуг (Service provider).
www.books-shop.com
ГЛАВА 9:
SQL Server и остальной мир
Первый — «владелец» информации. Таким владельцем может быть реляционная СУБД, электронная таблица или система почтовых со общений. Второй — посредник между конечным потребителем (кли ентское приложение) и владельцем данных. Ясно, что поставщик ус луг часто выступает в двоякой роли: в терминах он и потре битель, и поставщик. Поставщиком услуг может быть универсальный процессор запросов. Хороший пример — наш добрый знакомый SQL Server: он открывает собственный интерфейс для предоставления информации из своих таблиц и служит посредником, когда через него обращаются к данным «дальше». Версия 8.0 использует OLEdB как «родной» (Native) интерфейс. Все бы замечательно, если б не одно «но»: интерфейс OLEdB до ступен только для разработчиков на языке С, для остальных же здан интерфейс ADO (ActiveX Data Objects).
ADO ADO — это набор программных интерфейсов, «упаковывающих» OLEdB так, что возможности этого API доступны любому средству разработки, способному создать объект (CreateObject). В число таких инструментов входят VB и Visual FoxPro. Модель ADO Одна из отличительных черт ADO — очень простая объектная модель, включающая очень немного объектов (рис. 91):
Рис.
Объектная модель ADO.
www.books-shop.com
420
SQL
2000, Новейшие технологии
Еще одно положительное отличие ADO от DAO или RDO заклю чается в том, что основные объекты вроде Connection, Command, Re cordset могут создаваться независимо друг от друга. А разра ботчик не должен более создавать объект верхнего уровня, на базе его — объекты последующих уровней и таким образом достигать нужно го результата. Рассмотрим подробнее основные объекты ADO (по спецификации для ADO 2.6). Создание объекта Visual Basic позволяет использовать три вида команд при создании Раннее связывание: dim
as new
или: dim adodb_recordset as set adodb_recordset = new Позднее связывание: Dim adodb_connection as Object set adodb_connection = CreateObject( "Connection" ) Ранее связывание обеспечивает наибольшую скорость работы при ложения. Я создаю объекты именно этим способом. Основные объекты ADO — Connection, Command и Recordset — обеспечивают соединение с сервером, передачу команд и получение результатов. Для обработки ошибок служит объект Error. Характерис тики объекта определяются набором свойств. Для всех базовых объек тов имеется два типа свойств: статические (встроенные) и динами ческие. Первые присущи объекту в силу его существования, вторые назначаются провайдером и могут меняться в зависимости от его воз можностей. Динамические свойства представлены в виде объектов Property — членов коллекции Properties. ADO.CONNECTION При создании соединения (объекта Connection) можно идти тремя путями: • присвоив свойству Connection String строку, правильно описыва ющую параметры соединения с последующим вызовом метода Ореп(); содержание строки зависит от конкретного провайдера; • передав методу в качестве параметра строку, описывающую параметры соединения;
www.books-shop.com
ГЛАВА 9;
SQL Server и остальной мир
• передав методу объекта Connection имя источника данных (DSN) и, если надо, имя пользователя и пароля; в этом случае со единение будет установлено через OLEdBпровайдер для ODBC; это не самый удачный вариант — лучше использовать «родной» OLEdBпровайдер. Объект — сессия работы с источником данных — в случае взаимо действия с SQL Server связан с реальным соединением с сервером по сети. Соединение можно установить через ODBC; при этом использу ется OLEdBпровайдер для ODBC (по умолчанию) или конкретно указанный OLEdBпровайдер. Чтобы создать соединение, клиентское приложение сначала гене рирует объект Connection и назначает ему параметры, определяющие имя сервера, идентификатор пользователя (Login), пароль. После со здания объекта клиентское приложение вызывает метод Open этого объекта. Варианты вызова метода Open описаны ниже. Свойству объекта Connection присваивается стро ка — набор аргументов: Аргумент
Описание
Provider
Указывает имя необходимого для работы соединения. По умолчанию используется ODBC OLEdBпровайдер msdasql. Имя SQL Server OLEdB провайдера — SQLOLEDB.
Data Source
Указывается имя зарегистрированного источника, определяющее имя сервера, имя БД, идентификатор пользователя и пароль — DSN (data source name).
User ID
Указывает идентификатор пользователя, под именем которого будет установлено соединение.
Password
Определяет пароль, применяемый для идентификации пользователя.
File Name
Определяет имя файла, специфического для OLEdB провайдера, содержащего заранее определенную информацию для соединения.
Строка соединения может использовать заранее созданный набор определяемых в административной панели ODBC (ODBC data source При описании источника данных указывается имя сервера, имя БД, с которой по умолчанию будет выполнено соеди нение, способ аутентификации (средствами Windows NT или SQL Server) и для последнего варианта — пароль и идентификатор пользователя.
www.books-shop.com
422
Microsoft SQL
2000, Новейшие технологии
Помимо указания заранее зарегистрированного источника, кли ентское приложение может прибегнуть к так называемому DSNless соединению, использующему прямо указанный ODBCдрайвер, пол ный набор параметров и не требует заранее описанного DSN. Когда строка соединения определена, можно открывать соедине ние, передавая значение строки соединения методу Open. ПРИМЕЧАНИЕ Указывая параметры соединения, обратите внимание на размещение пробелов в описании строки соединения. Почемуто в не которых случаях лишние пробелы приводят к тому, что команда воз вращает ошибку. Вариант Используем DSNLess соединение. Указываются драйвер, имя сервера, пользователь, dim adodb_connection AS New Connection adodb_connection.ConnectionString = uid=sa;
Вариант 2. Используем описание источника (DSN) и указываем пользователя и пароль (описание, понятное ODBC ) ODBC dim adodb_connection AS New Connection adodb_connection.ConnectionString =
Вариант З. Используем описание источника (DSN) и указываем пользователя и пароль (описание, понятное OLE)dB Tag). dim adodb_connection as new Connection = "Data ID=sa; Открываем соединение с использованием имени DSN и индивидуальных параметров вместо полной строки соединения. dim adodb_connection AS new New Connection "Pubs", Самое простое — применить описание DSN, так как детали со единения с конкретным источником берутся из описания. С другой стороны, пользователь не всегда способен создать правильное описа ние DSN, а «виноват», конечно, будет разработчик. Да и кто пору чится, что жестко прописанные параметры соединения — именно то,
www.books-shop.com
ГЛАВА 9:
SQL
и остальной мир
423
что нужно Вашему приложению? Так что применение DSNLessco единений иногда вполне оправданно. Более того, прямое описание соединения работает быстрее, чем обращение через Предпочтительно такое описание соединения: as New Connection = "Data Первый параметр описания строки соединения можно именовать и Data Source и Server. Назначать свойства соединения лучше всего с помощью конструк ции With. Когда соединение будет описано и открыто, не которые свойства приобретают атрибут «только для чтения». Чтобы изменить их, соединение надо закрыть, внести модификации и снова открыть. При описании объекта Connection разработчик указывает разме щение курсора, необходимого для работы с данными (или скорее биб лиотеки поддержки курсоров — серверной или локальной). Положе ние курсора определяется свойством CursorLocation. Вот его возмож ные значения (указываются непосредственно или как константа): Имя константы
AdUseClient
Значение Описание 2
Принимается по умолчанию. Используется серверный или предоставляемый драйве ром курсор. Серверные курсоры позволяют большую часть нагрузки перенести на сервер и часто чувствительнее к измене ниям, вносимым в БД другими
3
Используются локальные курсоры, поддер живаемые соответствующей библиотекой. Библиотека поддержки локальных курсо ров ADO создана на базе процессора (Engine) Visual FoxPro. Локальная библиотека часто предоставляет много интересных возмож ностей, например, оторванные (Offline), т. е. не имеющие постоянной связи с основной БД курсоры, так что этот вариант может оказаться предпочтительным.
www.books-shop.com
424
Microsoft SQL Server 2000, Новейшие технологии
Свойство объекта Recordset наследуется из связан ного с этим объектом соединения, если значение свойства не указано конкретно для объекта Recordset. Физическое соединение с сервером устанавливается методом Open. Помимо строки соединения, метод Open принимает идентификатор пользователя, пароль и набор параметров соединения. Не пытайтесь передать идентификатор пользователя и пароль одновременно в стро ке соединения и как самостоятельные параметры — это чревато не предсказуемыми последствиями. Объект Connection умеет также посылать запросы на сервер. Это делается средствами метода Execute. Метод принимает командную строку в качестве параметра: dim
as new connection параметры соединения ConnectionString * from
Рис. 92.
Процесс исполнения команды.
При таком исполнении запроса объект Recordset создается с пара метрами умолчания: Readonly (данные только для чтения) и For wardOnly (перемещение указателя — только вперед). Это просто, но не позволяет задействовать такие возможности ADO, как исполнение запросов и хранимых процедур, принимающих параметры; кроме того, нельзя управлять
www.books-shop.com
ГЛАВА 9:
SQL Server и остальной мир
425
поведением курсора. Выше (рис. 92) показана схема обращений и передачи данных. Для соединения разработчик может определить уровень изоляции транзакций (свойство IsolationLevel). Свойство открыто для чтения и модификаций, назначение вступает в действие после испол нения метода BeginTrans. ADO. RECORDSET Объект для размещения результатов исполнения на сервере команды Recordset — без преувеличения самый полезный и часто применяе мый объект из всего набора ADO. Чаще всего результатом исполне ния команды на сервере является набор записей. Получив его, мы можем манипулировать данными и выполнять поиск внутри набора. Как уже говорилось, объекты ADO можно создавать независимо друг от друга. Это в полной мере относится и к объекту Recordset — его можно создать без предварительного создания объекта Command или Connection. Подобный подход позволяет упростить программи рование и снизить затраты на работу с объектами: dim
as new recordset * from initial
User
Заметьте: нам надо указать имя провайдера, так как тогда парамет ры метода будет обработаны правильно. В противном случае по умол чанию будет выбран для ODBC, который не пони мает указанных параметров, и будет получено сообщение об ошибке. При исполнении команды на сервере объект Recordset, если его не было, создается с параметрами умолчания и принимает результат исполнения команды: dim ado_connection as new connection dim ado_recordset as new recordset initial catalog=Pubs; User set ado_recordset =
*
Порой это довольно удобно, но при разработке реального прило жения Вам скорее всего будет желательно контролировать процесс передачи данных клиентскому приложению. Кроме того, свойства и LockType можно назначать только для объекта Recordset,
Microsoft SQL Server 2000, Новейшие технологии связанного с определенным соединением или командой (объекты Connection и Command). По умолчанию объект Recordset создается только для чтения, и перемещение по записям возможно только впе ред (свойство CursorType only» и свойство LockType ward Созданный объект Recordset можно использовать много кратно в зависимости от ситуации. Кроме того, объект можно закры вать, менять его свойства и снова открывать в зависимости от пред полагаемого назначения. Один и тот же объект способен обслужить множество задач: dim ado_connection as new connection dim ado_recordset as new recordset initial catalog=Pubs; User Id=sa; = ado_connection Recordset со значениями умолчания * from recordset, меняем его свойства и снова открываем с другой командой with ado_recordset = adLockOptimistic end with from В процессе работы свойства объекта Recordset остаются неизмен ными. Модифицируя только значение свойства Source, программа сможет обращаться к различным источникам данных, сохраняя неиз менным в котором объект функционирует. При работе с объектом Recordset можно назначать позицию кур сора, содержащего результат исполнения запроса. По умолчанию выбирается курсор, расположенный на сервере, но можно создать курсор на клиентской машине. Серверный курсор позволяет созда вать «облегченные», т. е. менее ресурсоемкие, клиентские приложе ния, но оказывает дополнительную нагрузку на При этом, благодаря размещению курсоров на сервере, можно использовать не сколько курсоров одновременно.
www.books-shop.com
9:
SQL Server и остальной мир
427
ПРИМЕЧАНИЕ
Чтобы снизить нагрузку на сеть, сервер и клиентское имеет смысл как можно чаще применять курсоры, откры тые только на чтение с прокруткой только вперед (свойства = и = Подобное сочета ние позволяет получить результат максимально быстро с минимальны ми затратами. Чтобы получить быстрый доступ к данным для редакти не слишком удлиняя время блокировок на сервере, применяй те курсоры на рабочей станции с возможностью пакетного обновления. Если для объекта Recordset не указано свойство оно определяется параметром этого свойства для объекта Connection. Свойством стоит заняться отдельно. Начиная с версии ADO оснащается библиотекой, поддерживающей локальные кур соры. Она не поддерживает динамические курсоры и при попытке установить свойство CursorType = adOpenDynamic, когда свойство CursorLocation = adUseClient, использует максимально близкий к за казанному тип курсора (в нашем случае это статический курсор). Ниже перечислены имена и значения констант, которые можно привязывать к свойству CursorType: Константа
Значение
Описание
0
Указатель текущей записи может перемещаться только вперед в пределах полученного набора записей.
1
Набор записей и порядок их размещения в курсоре фиксированы, но данные отра жают текущее состояние таблицы. Воз можно перемещение указателя в обоих направлениях.
Only
adOpenDynamic 2
Набор записей и их порядок в курсоре не фиксированы, данные отражают текущее состояние таблицы. Возможно перемеще ние указателя в обоих направлениях. Под держка закладок (Bookmark) определяется возможностями OLEdBпровайдера.
adOpenStatic
Набор записей и порядок их размещения в курсоре фиксированы. Данные — момен тальный снимок (Snapshot). Поддерживает ся перемещение указателя в обоих направлениях.
3
www.books-shop.com
Microsoft SQL Server 2000, Новейшие технологии
428
Еще один важный параметр курсора — свойство LockType. Кур сор может иметь 4 варианта блокировок: Константа
Значение
adLockReadOnly 1 adLock Pessimistic
adLock
Optimistic
2
Описание Данные открыты только для и не могут быть изменены. Пессимистическая блокировка индивидуальных записей. Запись блоки руется в начале редактирования и остается блокированной, пока редактирование не будет закончено или операция отменена. Оптимистическая блокировка индивиду альных записей. При редактировании запись не блокируется, в момент физичес кой модификации производится проверка на наличие конфликта Оптимистическая блокировка при пакет ной модификации (модификации индиви дуальных записей откладываются до того, как все записи будут отредактированы и по лучен запрос на пакетную модификацию).
При формировании объекта Recordset, как, впрочем, и объектов Connection и Command, стоит указать, что именно передается как па раметр Source. Если не указать тип конкретно, клиентскому прило жению придется совершить несколько походов к серверу для уточне ния, с чем ему приходится иметь дело. Указание типа облегчает рабо ту всем. Типов может быть несколько: • неизвестный тип (это значение принимается по умолчанию) ad = 8; • команда распознается как текст SQLвыражения = • команда воспринимается как имя таблицы adCmdTable = 2; • команда воспринимается как имя хранимой процедуры StoredProc = 4. Подробнее я остановлюсь на типах команд при рассмотрении объекта Command. Закладки Для фиксации текущей позиции указателя можно использовать зак ладки. Когда открывается объект Recordset, каждой записи присваи вается уникальное значение, позволяющее использовать его как зак
www.books-shop.com
ГЛАВА 9;
SQL
и остальной мир
429
ладку в наборе записей. При необходимости запомнить текущее по ложение переменной присваивается значение закладки текущей за писи: = Чтобы вернуться на отмеченную запись, свойству Bookmark при сваивается сохраненное значение: = Кстати, не каждый объект Recordset поддерживает закладки (на пример, курсоры типа и Dynamic), а кроме того, значе ния закладок нет смысла сравнивать непосредственно: две закладки для одной записи могут иметь разные значения. Клонирование объектов Recordset Создать копию объекта поможет метод Clone — это эффективнее, не жели закрывать и открывать курсор с тем же самым определением. Клонирование позволяет поддерживать несколько «текущих» записей на одном наборе. Клонирование возможно только для объектов Re cordset, поддерживающих закладки. Все копии поддерживают общий набор закладок и для одной записи закладки в разных копиях будут иметь одинаковые значения. Изменения в одной из копий отражают ся в остальных независимо от типа курсора, но повторное наполне ние курсора при вызове метода приводит к тому, что синхро низация копий нарушается. Перемещение набора записей Recordset В зависимости от типа курсора приложение может перемещать указа тель на абсолютную (первая, последняя, Nя) и относительную (сле дующая, предыдущая) позицию в наборе. Это делается методами Movelast, Move , и MoveNext, MovePreviuos или заданием свойств и AbsolutePage. Метод Move при нимает два параметра: первый — число записей, на которое надо пе реместить указатель, второй указывает на то, откуда начать отсчет. По умолчанию перемещение производится от текущей записи. В случае абсолютного позиционирования указывается соответству ющий номер записи в курсоре (у первой записи номер 1) или «страни При этом страница не имеет никакого отношения к страницам — единицам размещения данных в SQL Server. В ADO страница (Page) — это группа записей, размер которой определяется свойством PageSize (по умолчанию это свойство равно 10). Если установлена величина страни цы, перемещение по страницам обеспечивает свойство AbsolutePage.
www.books-shop.com
Microsoft SQL Server 2000, Новейшие технологии
430
При перемещении указатель располагается на первой записи страницы. При подсчете (свойство PageCount) учитываются и неполные страницы, обычно включающие последние записи. При перемещении по записям с указанием относительного поло жения (MoveNext, MoveFirst,...) OLEdBпровайдер следит за тем, чтобы текущей записью не оказалась удаленная. Если перемещение производится по абсолютным указаниям закладка), текущей записью может стать удаленная. И тогда пользователь смо жет только переместиться с этой записи кудато еще — никаких дей ствий ему позволено не будет. Свойства и методы объекта Recordset позволяют контролировать способ отображения записей и выполнять поиск определенных дан ных внутри полученного набора. Свойство Sort определяет порядок сортировки, задаваемый в виде списка имен полей, по которым будет выполняться сортировка, и необязательных указателей Asc/Desc, указывающих на сортировку в порядке возрастания (Asc — по умолчанию) или убывания. Чтобы от казаться от сортировки, присвойте свойству Sort значение пустой строки. . Так как при сортировке закладки сохраняются, Вы можете вос становить текущее положение по завершении сортировки: сохраните закладку, выполните сортировку и по закладке вернитесь в исходное положение. Свойство Filter определяет условие, по которому отображаются или скрываются записи в наборе: Filter = «City = Формулировка условий фильтрации допускает применение пред ложений AND и OR, но не допускает включения OR внутрь одного из компонентов, связываемых предложением AND: допустимое выражение = "City = недопустимое выражение = "(City = 120" его можно переформулировать как = "(City = AND Price < 120"
AND Price < 120" OR City =
AND Price <
AND Price < 120) OR (City =
Даты следует ограничивать с двух сторон символами = "DATE <
www.books-shop.com
ГЛАВА 9:
SQL Server и остальной мир
431
Метод Find позволяет выполнять поиск значения внутри набора. Метод принимает обязательный параметр — критерий поиска — и ряд необязательных: число записей, которое нужно пропустить, прежде чем начать поиск (0 — текущая запись будет включена, 1 — поиск начнется со следующей направление поиска (по умолчанию О — искать по направлению к концу набора) и закладку, на которую нужно переместиться, прежде чем начать поиск. ПРИМЕЧАНИЕ При использовании серверных курсоров все процессы сортировки, фильтрации и выборок при работе с объектом Recordset приводят к обращениям на сервер. При большом количестве записей манипулирование содержимым курсора выполняется довольно интен сивно — лучше задействовать локальные курсоры, так как они не об ращаются к серверу (рис. 93).
93.
Размещение курсора способно
на загрузку сети.
Используем локальный курсор ) активность на сервере ) в левой половине рисунка rec. close rec.
www.books-shop.com
SQL
2000, Новейшие технологии
qty rec. filter = clear
>
do while not loop Используем серверный курсор ) активность на сервере ) в рисунка
rec. filter =
половине
ord_date, qty >
do while not loop Манипулирование данными и структурой объекта Recordset Объект Recordset — это таблица, составленная из записей с полями. Состав и содержание полей определяются тем, что для этого объекта задано в свойстве source. Значение свойства source задается либо тек стом команды, либо как ссылка на существующий объект Command. В последнем случае свойство ActiveConnection объекта Recordset на следуется из свойства ActiveConnection объекта Command. Состав, тип и размерность полей объекта recordset определяются коллекцией Fields, состоящей из индивидуальных объектов Field. Каждый объект Field соответствует одному из полей объекта Recor dset. К объекту Field можно обращаться по имени или номеру в кол лекции. Извлечь значение конкретного поля текущей записи позво ляет свойство Value объекта Field. Это же значение применяется для модификации индивидуальных полей. После модификаций методом Update (или UpdateBatch) внесите изменения в БД. Для выполнения пакетных (методом UpdateBatch) модификаций у свойства LockType курсора должно быть значение После добавления новой записи в курсор (методом инди видуальные значения полей устанавливаются в нужные значения свой ством Value. Если AddNew вызывается с аргументами (список полей и список их значений), новая запись сразу наполняется Набор свойств объекта Field позволяет определить фактическое значение величины, хранящейся в поле (свойство Actualsize), его ис
www.books-shop.com
ГЛАВА 9:
SQL Server и остальной мир
433
ходное (свойство и текущее значения в БД (свойство UnderlyingValue) и т. д. Свойства OriginalValue и Value по лезны при разрешении конфликтов модификации при оптимистичес ких блокировках и пакетных изменениях. Прежде чем объект Recordset будет наполнен реальными данны ми, его структуру можно оформить (наполнить коллекцию Fields ин формацией о полях) методом Refresh коллекции Fields. Для вызова метода объект Recordset нужно связать с активным соединением или с действующим объектом Command, или у объекта должна быть на значена строка команды. При исполнении Refresh происходит попыт ка подготовить команду к исполнению (Prepare). He все поддерживают подготовку команды к исполнению. В этом случае возвращается ошибка исполнения. Для проверки работы объекта Recordset я написал несложную фор му (рис. 94), позволяющую присвоить свойствам CursorType, Cur sorLocation и LockType объекта допустимые значения. Форма testre cordset.frm создает соединение с сервером, а затем, используя это со единение, — объект Recordset и получает данные с сервера. Объект можно закрыть, задать указанным свойствам новые значения и снова открыть, чтобы проверить, как отражаются изменения в основной таблице на содержании курсора.
94.
Тестовая форма.
www.books-shop.com
434
Microsoft SQL
2000,
технологии
' Инициализация Dim rec As New Recordset Dim conn As New ADODB. Connection Dim nCursorType As Integer Dim As Integer Dim As Integer Модули, связанные с переключателями, назначающими местоположение ' курсора ' Курсор на сервере Private Sub ClickO nCursorLocation = 2 End Sub Курсор на клиенте Private Sub adClientCursor_ ClickO nCursorLocation = 3 End Sub Модули, с ' определяющими тип курсора Статический курсор Private Sub adStaticCursor_ ClickO = 3 End Sub Динамический курсор Private Sub adDynamicCursor_ ClickO nCursorType = 2 End Sub ' Однонаправленный курсор Private Sub adForwardCursor_ ClickO nCursorType = 0 End Sub ' Курсор смешанного типа Private Sub adKeyserCursor_
www.books-shop.com
ГЛАВА 9:
SQL Server и
мир •
435
= 1 End Sub Модули, связанные с переключателями, ' определяющими тип блокировок Оптимистические блокировки Private Sub ClickO nCursorLock = 3 End Sub Пессимистические блокировки Private Sub ClickO nCursorLock = 2 End Sub ' Курсор только для чтения Private Sub adLockReadOnly_ ClickO nCursorLock = 1 End Sub ADO. Record Объект Record, родственный Recordset, может существовать как сам по себе, так и получать данные из существующего объекта Recordset. Однако объект создавался для задач, стоящих несколько в стороне от рассматриваемой темы. Дело в том, что объект Record предназначен в первую очередь для работы с нетабличными данными. Например, его можно применять для доступа к структуре каталогов. Доступ орга низован через HTTP. Кажется, поэтому его и создали. Теперь у раз работчика есть доступ к любому файлу или каталогу в Интернет (при наличии прав, разумеется). Я не стану особенно вдаваться в детали, просто проиллюстрирую это кодом: ' Создаем Record Private Sub Dim adoRecord As New Dim ChildRecord As New FldCount = For i = 0 To FldCount ) 1 Ⱦɚɧɧɚɹɜɟɪɫɢɹɤɧɢɝɢɜɵɩɭɳɟɧɚɷɥɟɤɬɪɨɧɧɵɦɢɡɞɚɬɟɥɶɫɬɜɨɦ%RRNVVKRS ɊɚɫɩɪɨɫɬɪɚɧɟɧɢɟɩɪɨɞɚɠɚɩɟɪɟɡɚɩɢɫɶɞɚɧɧɨɣɤɧɢɝɢɢɥɢɟɟɱɚɫɬɟɣɁȺɉɊȿɓȿɇɕ Ɉɜɫɟɯɧɚɪɭɲɟɧɢɹɯɩɪɨɫɶɛɚɫɨɨɛɳɚɬɶɩɨɚɞɪɟɫɭ[email protected]
SQL Server 2000, Новейшие технологии
436 If
Then & & "NULL"
Else &
&
End If Next
"Получаем объекты нижнего Set ChildRecord = On Error Resume Next While Not For i = 0 To 24 If Then & Else &
& "NULL" &
End If Next
"Next row" Wend End Sub Или средствами Visual FoxPro adoRecord ChildRecord = FldCount = FOR i = 0 TO FldCount 1 IF +
+ "NULL")
ELSE +
DO CASE CASE "TRUE", CASE CASE
www.books-shop.com
ГЛАВА
SQL Server и остальной мир
OTHERWISE ENDCASE NEXT "Getting children ChildRecord = DO WHILE NOT FOR i = 0 TO 24 IF =FPUTS( ELSE
+
)
+ "NULL")
DO CASE CASE CASE CASE =FPUTS( CASE VALUE, OTHERWISE ENDCASE ENDIF NEXT row") ENDDO Мы получаем доступ к каталогу, организованному, как так назы ваемый Web catalog (как это делается, см. в документации по Windows 2000). Из каталога мы считываем объекты, можем создавать новые средства и удалять Результат исполнения приведенной выше команды может выгля деть так:
www.books-shop.com
438
SQL Server 2000, Новейшие технологии
Объект верхнего уровня
RESOURCE_PARSENAME Test RESOURCE_PARENTNAME http://localhost RESOURCE_ABSOLUTEPARSENAME http://localhost/Test FALSE NULL NULL RESOURCE_CONTENTCLASS application/octetstream RESOURCE_CONTENTLANGUAGE NULL RESOURCE_CREATIONTIME 20000504062943 NULL 20001019171319 0.00000 TRUE NULL DEFAULT DOCUMENT NULL Test JSROOT NULL FALSE — 0.00000 DAVxreationdate 20000504062943 DAV:displayname — Test DAV:getetag — DAV:ishidden — FALSE — TRUE DAV:getcontenttype — application/octetstream Объект следующего уровня
Объект Stream позволяет работать с потоком неструктурированной битовой информации. Он может пригодиться, если какието поля в объекте Record хранят чтото совершенно нечитаемое. А теперь вернемся к объектам, которые действительно полезны при работе с информацией в структурированном хранилище SQL Server. Объект Command применяется для создания запроса или команды, которые будут исполняться на некотором соединении. Основная за дача Command — обеспечить исполнение хранимых процедур и пара команд. Сам объект можно создать независимо от соединения в момент исполнения, но его надо связать с активным соединением. Свойства Command позволяют настроить его поведение. Резуль татом исполнения команды обычно является объект Recordset. Если таковой не создан заранее, он создается с параметрами по умолча
www.books-shop.com
SQL Server 2000, Новейшие технологии Однако набор записей возвращается не всегда: так, команда Update не возвращает объект Recordset. Характеристики объекта Command определяются значениями его свойств. Свойства определяют соединение, по которому будет выпол няться команда (применяется активный объект Connection), текст ко манды (свойство тип текста команды и т. д. Если тип текста команды не задан, провайдер последовательно пытается вы полнить ее как SQLвыражение, использовать как имя таблицы в ко манде SELECT * FROM и как имя хранимой процедуры. Если все это не дает результата, возвращается сообщение об ошибке. В качестве примера приведу такой код: предполагаем, что у нас уже есть активное соединение dim as new
получаем сообщение о том, что хранимая процедура abcde не найдена. На самом деле провайдер уже попробовал все возможные вариан ты и только выдал сообщение об ошибке (рис. 95):
Рис. 95. Чем конкретнее задание, тем быстрее оно будет выполнено. В реальном приложении разработчик должен указать тип коман ды — это позволит снизить нагрузку на сеть и сервер, которому не придется гадать, чего от него хотят. С другой стороны, если очень хочется хоть немного сократить объем кода, в качестве текста коман ды можно дать имя таблицы. Тогда исполнение такой команды будет эквивалентно исполнению команды с текстом «SELECT * FROM <имя
www.books-shop.com
ГЛАВА 9:
SQL Server и остальной мир
441
Объект Command можно связать с любым из имеющихся активных соединений. Увязывание свойства с объектом Connec tion можно выполнить в два этапа: назначение свойству значения Not hing и последующее привязывание к объекту. Более простой вариант — просто присвоить свойству ссылку на другой объект Connection. Характеристики объекта определяются значением элементов кол лекции Properties и встроенными свойствами объекта (рис. 96):
Рис. 96. Опрос свойств объекта позволяет настроить приложение для индивидуального подхода к конкретному соединению. Коллекция содержит общую информацию об объекте и провайде ре. может позволить создание дополнительных свойств средствами кода и добавление к элементам коллекции. Вы яснить значения свойств элементов коллекции Properties поможет такой код: Dim As New Dim conn As New = "Select * from initial catalog=Pubs; User Id=sa; = conn For Each Item In
Next
www.books-shop.com
442
Microsoft SQL Server 2000, Новейшие
Результатом исполнения программы будет перечень всех свойств объекта и их значений. Точно такую же программу можно использо вать для анализа свойств объекта Recordset или Command. Вот пер вый десяток свойств, полученных при анализе объекта Command: Имя свойства
Значение свойства
Preserve on Abort Access Order Blocking Storage Objects Bookmark Information Use Bookmarks Skip Deleted Bookmarks Bookmark Type Fetch Backwards Hold Rows Scroll Backwards Change Inserted Rows
Гилы Command Исполнение объекта Command может возвращать или нет набор записей. Если мы всего лишь изменяем записи на сервере, результа том исполнения команды будет число модифицированных записей. Намного интереснее способность объекта Command исполнять па команды и хранимые процедуры с параметрами: =
= call
При определении текста команды каждый параметр представля ется вопросительным знаком. Изменение параметров позволяет ис полнять команду или вызывать хранимую процедуру без многократ ной перекомпиляции и оптимизации команды. Параметры команды определяются с помощью коллекции Para meters. Пополнять коллекцию можно автоматически или вручную. Первое требует для коллекции вызова метода Refresh: = = adCmdStoredProc
Автоматическое пополнение коллекции параметров проще ручно го, и разработчику нет дела до типа параметра и других характерис тик. При этом скорее всего работа метода Refresh приведет к допол нительным расходам и в сети, и на сервере. При создании приложе
www.books-shop.com
ГЛАВА 9:
SQL Server и остальной мир
443
ния автоматическое пополнение коллекции параметров можно при менять в отладочных целях. Коллекция параметров, пустая на момент исполнения команды, будет заполнена автоматически. Более трудоемкое пополнение коллекции вручную требует от раз работчика глубоких знаний о типе и других атрибутах параметра. Но, как любой «ручной» операции в программировании, ей нужно мень ше сетевых и серверных ресурсов. Для создания нового параметра применяется метод CreateParameter. Создавать параметры можно в любом порядке, но добавлять их в коллекцию средствами метода Append нужно в порядке, определенном для исполнения команды. К сожалению, при обращении к параметру в тексте команды нельзя использовать порядковый номер (Ordinal) или имя параметра. = ' Определяем тип команды как имя хранимой процедуры = ' параметр = ' Добавляем параметр в коллекцию и присваиваем ему значение adodb_pa ' Исполняем команду и помещаем результаты исполнения е объект Recordset adodb_recordset = Формулируя текст команды, старайтесь избегать выражений SE LECT. Этот, хоть и простой, путь ведет к получению ненужных дан ных, а в худшем варианте клиент получает и такие поля, как Text и Image, очень «дорогие» с точки зрения загрузки сети. Как я уже говорил, лучше сразу указать тип команды. Помимо перечисленных, команды могут быть и типов: Константа
Значение
adCmd Unspecified adCmdFile
256
adCmdTable Direct
512
Описание Позволяет не указывать аргумент типа команды. Вместо этого использовано зна чение, указанное в свойстве Это что свойство содержит имя файла, в котором хранится оторванный объект Recordset. Это значит, что свойство CommandText хранит имя таблицы, из которой возвра щаются все поля.
www.books-shop.com
444
Microsoft SQL Server 2000, Новейшие технологии
ADO. При работе с сервером могут возникать ошибки. Информация об ошибках исполнения помещается в объекты Error коллекции Errors. Проверка содержимого коллекции позволяет предпринять корректи действия до того, как ситуация выйдет изпод контроля. Кол лекция ошибок есть только у объекта Connection. Каждый объект Error имеет описание, номер, источник сообщения об ошибке. Ошибка с уровнем от 1 до 10 возвращается клиентскому приложе нию в виде самого текста сообщения об ошибке; при уровне 11 и выше возвращается длинная строка с указанием драйвера и другой информацией. CREATE PROCEDURE declare as select = select
AS
=
Теперь выполним процедуру
1> exec 2> go Severity 8 ) отработало первое сообщение Msg 50000, Level 11, State 1, Server Procedure error_proc, Line 9 [Microsoft][ODBC SQL Server Driver][SQL 11 ) отработало второе с гораздо более длинным текстом, из которого нужно выделять реальное сообщение. Обработка ошибок исполнения Для примера создадим хранимую процедуру: create procedure err_proc as raiserror error 16, 1) if >0 print end raiserror if >0 begin print end
error error
14, 1)
error
www.books-shop.com
ГЛАВА 9; SQL
и остальной мир
raiserror error 10, 1) /* Конструкция ниже никогда не отработает, так как ошибки уровня ниже 11 не перехватываются сервером if
>0 begin error
end Процедура не делает ничего, кроме создания ошибок. Сервер спо собен перехватывать только ошибки уровня (Severity) 11 и выше. Это значит, что остальные ошибки могут перехватываться только клиент ским приложением. При исполнении приведенной выше хранимой процедуры в стан дартном диалоге выводится только первое сообщение об ошибке. Остальные ошибки нужно взять из коллекции Errors. = = У нас пять объектов в коллекции Выводим текст описания для каждой ошибки print SQL Server
error #1
SQL Server Driver][SQL Server]Captured error #1 SQL Server Driver][SQL Server]Raised error #2 print [Microsoft][ODBC SQL Server Driver][SQL error #2 SQL Server Driver][SQL
error #3
В коллекцию попадают не только реальные ошибки, но и текст, выводимый командой Print. Кроме того, видно, что для ошибки 10 уровня на клиентское приложение пришло лишь сообщение, созда ваемое командой Raiserror. Библиотека курсоров ADO Библиотека курсоров построена на основе процессора данных (Engine) Visual FoxPro. Функциональность библиотеки практически идентич на тому, что поддерживается версиями Visual FoxPro 3.0 и 5.0 и, воз можно, 6.0. Ⱦɚɧɧɚɹɜɟɪɫɢɹɤɧɢɝɢɜɵɩɭɳɟɧɚɷɥɟɤɬɪɨɧɧɵɦɢɡɞɚɬɟɥɶɫɬɜɨɦ%RRNVVKRS ɊɚɫɩɪɨɫɬɪɚɧɟɧɢɟɩɪɨɞɚɠɚɩɟɪɟɡɚɩɢɫɶɞɚɧɧɨɣɤɧɢɝɢɢɥɢɟɟɱɚɫɬɟɣɁȺɉɊȿɓȿɇɕ Ɉɜɫɟɯɧɚɪɭɲɟɧɢɹɯɩɪɨɫɶɛɚɫɨɨɛɳɚɬɶɩɨɚɞɪɟɫɭ[email protected]
446
SQL Server 2000, Новейшие технологии
Эта библиотека с развитыми возможностями позволяет создавать курсоры «из воздуха»: dim as recordset ' Пополняем коллекцию fields новыми полями adchar) adchar) Используя курсоры без реальной БД «за спиной», разработчик может создавать справочные массивы, которые поддаются сортиров дают возможность поиска и т. д. По умолчанию не значит очевидно Среди объектов и коллекций есть используемые по умолчанию. Пе речень этих элементов не так велик, но они могут создать проблемы при чтении чужого кода. Познакомимся с ними поближе. Item — свойство, выбираемое по умолчанию для всех коллекций. Эти два варианта кода одинаковы с точки зрения функциональности: collection(index) Ниже перечислены объекты, коллекции и их элементы (коллек ция или свойство), выбираемые по умолчанию, когда приложение обращается к объекту или коллекции по имени без конкретного ука зания, что его интересует. Объект или коллекция Объект command Объект connection Объект error Коллекция errors Объект field Коллекция parameters Объект parameter Объект property Коллекция properties Объект recordset
Элемент умолчания Коллекция parameters Свойство connection string Свойство description Свойство item Свойство value Свойство value Свойство item Свойство Value Свойство item Коллекция fields
www.books-shop.com
ГЛАВА 9: SQL Server и
мир
447
Объекты и значения, используемые по умолчанию, могут заметно сократить длину команд, но они способны создать для непосвящен ного много трудностей при чтении кода (рис. 97).
Рис. 9 7. Схема свойств и методов объектов ADO, используемых по умолчанию.
Приведенные ниже фрагменты кода с точки зрения функциональ ности одинаковы, но, не понимая, что Item — элемент умолчания для любой коллекции, разобраться в этом не так просто.
К синтаксису обращения к коллекциям тоже стоит Так, значение объекта Field можно получить следующими способами:
recordset(O)
www.books-shop.com
Microsoft SQL Server 2000. Новейшие технологии а значение элемента коллекции параметров объекта Command:
command.
Лучше, если Вы будете придерживаться некоторого стандарта. ПРИМЕЧАНИЕ При работе с ADO на Visual FoxPro надо учитывать, что Visual FoxPro «не понимает» элементов, по умолчанию связанных с Например, команду, выводящую значение некоторого поля в наборе записей (Recordset), полученном с сервера, на Visual FoxPro нужно записать как:
dim
AS new CONNECTION.
Иерархические объекты Recordset Получить данные на рабочую станцию — это еще не Их надо кра сиво показать. Действительно, если речь идет об одной таблице, пред ставление данных не составляет проблемы, красивые объекты Grid как в Visual Basic, так и FoxPro позволяют создать весьма при влекательный интерфейс. А если речь идет о двух или более табли цах? Мы все сотни раз видели «классическую» форму, отражающую отношение ParentChild. Удобно? Вообщето да. Но она почти всегда дается большой кровью. При этом вполне логично представить отно шение ParentChild в виде дерева. Тот, кто работает с Visual FoxPro, знает, что у этого продукта есть средства организации связи между родительской и дочерней таблицами, каждая из которых затем может быть выведена в индивидуальный объект Grid. В последней версии ADO поддерживается так называемый Data Shaping — технология обработки полученных от сервера результатов для представления в виде иерархии данных. Эту функциональность обслуживает команда Shape, в результате исполнения которой создаются вложенные объек ты Recordset. Внешний (родительский) объект — это по сути дела на бор записи, каждая из которых ссылается на самостоятельный объект, включающий набор записей из дочерней таблицы, значения ключа
www.books-shop.com
ГЛАВА 9:
SQL Server и остальной мир
449
которой равны значению ключа родительской таблицы. Глубина вложения формально не ограничена. Можно сказать, что же результатов можно добиться, применяя стандартные объединения, реализуемые TSQL сервера. Это так, но посмотрим на результаты. Используя объединения, мы можем построить команду: SELECT [Order [Order FROM Customers INNER JOIN Orders ON [Order Details] ON
INNER JOIN [Order
В нижней части Конструктора представлений — результат исполне ния команды. Каждый заказчик повторяется столько раз, сколько эле ментов имеется в сделанных им заказах. Не очень красиво (рис.
Рис. 98. Хотя мы и получаем правильный ответ, красиво представить его оказывается затруднительно.
www.books-shop.com
450
Microsoft SQL Server 2000. Новейшие технологии
С другой стороны, применение новой команды Shape, предостав ляемой интерфейсом ADO, позволяет создавать формы посимпатич нее (рис. 99). Здесь, как видите, ничего не повторяется много раз, просто высота каждой ячейки объекта Grid определяется числом строк дочернего набора.
Рис. 99. Новые объекты интерфейса в сочетании с новыми возможностями ADO позволяют создавать более привлекательные формы. Для работы с иерархическими наборами Microsoft поставляет в составе Studio новый компонент Grid с длинным и торжествен ным названием Microsoft Hierarchical Control. Этот компо нент «понимает», что можно сделать с полученным иерархическим Recordset. Согласитесь, что с формой, показанной на рисунке, рабо тать проще. Для получения этого объекта я дал такую команду: SHAPE
FROM Order by APPEND
AS Parent
www.books-shop.com
ГЛАВА 9:
SQL Server и остальной мир
(( SHAPE Orders ORDER BY APPEND [order [order details]. GrandChiLd RELATE Child RELATE
j FROM
AS Child
[order details] ORDER BY TO
AS
TO
FROM AS AS
AS Child
Как видно из приведенного примера, Shape представляет собой набор команд SELECT, которые уже на месте преобразуются в соот комплект объектов Recordset. Взглянув на то, что про исходит при этом на сервере, Вы поймете, что вся работа выполняет ся на клиентском компьютере. Используя SQL Profiler, мы легко об наружим, что составляющие Shape компоненты посылаются в виде самостоятельных команд: SELECT FROM SELECT OrderlD, OrderDate, ORDER BY OrderlD; SELECT [order FROM +SQL:BatchCompleted
Order by RequiredDate, CustomerlD FROM Orders [order details]. ProductID, [order details] ORDER BY Orderld
Основную работу выполняет специальный провайдер, отвечаю щий за работу с иерархическими наборами — Microsoft Data Shaping Service for OLEdB. Ссылаться на него следует как на тот случай, если Вы будете описывать соединение вручную. Как видно из приведенного элемента трассировки, на сервер посы лается набор команд, каждая из которых возвращает по одному набо ру записей, преобразуемых на рабочей станции в объект Recordset. Затем провайдер связывает эти объекты так как и при работе с Visual FoxPro средствами команды SET RELATION. При отображе нии родительского набора данных из дочерних выбираются записи, соответствующие текущему значению ключа. По ним определяются записи из набора более низкого уровня и т. д. Как я говорил, уровень
www.books-shop.com
452
Microsoft SQL Server 2000, Новейшие технологии
вложенности не ограничен, хотя, как и во всех остальных случаях, надо руководствоваться здравым смыслом. При формировании команды у Вас есть два пути: руками и с по мощью графического интерфейса. Если у Вас есть Visual Studio, луч ше всего применить специальный графический инструмент для пост роения описания окружения данных (Data environment) (рис. 910). Одного конструктора команд Shape достаточно для того, чтобы по ставить себе Visual Basic 6.0.
Комплект инструментов в составе Visual Basic — это и инструмент разработчика, и великолепное средство обучения. При работе с Visual FoxPro Вы также можете использовать иерархи ческие объекты Recordset, только команды Shape придется писать, рав но как и (вполне возможно) вручную разбирать полученные объекты. Вопросы производительности При разработке сложных систем архитектуры клиент — сервер воп росы производительности выходят на первый план. Красота интер фейса не сможет заслонить медленную регенерацию экрана. Ниже я попробую дать рекомендации относительно приемов программиро вания с применением ADO. Имейте только в виду, волшебной комбинации нет и для каждого конкретного случая следует тщатель но тестировать приложение в условиях, максимально приближенных к реальной работе.
www.books-shop.com
ГЛАВА 9:
SQL Server и остальной мир
453
ПРИМЕЧАНИЕ Всегда тестируйте приложение на максимально возмож ном данных. То, что хорошо работает на 100 записях, может «уми рать» на таблицах размером в десятки и сотни тысяч записей. Прежде чем начинать оптимизацию, постарайтесь выяснить, чем, собственно, со стоит проблема. Теперь в распоряжении разработчика гораздо более про двинутые инструменты для анализа работы приложения. Скорость исполнения индивидуальных операций Не заставляйте ADO думать за Вас. Я уже говорил, что прямое указа ние типа команды (свойство позволит сэкономить провайдеру усилия по перебору возможных вариантов. Чтобы избе жать ненужных компиляций плана исполнения, старайтесь полнос тью указывать ссылку на объект БД и при выполнении множества операций, отличающихся только аргументами, используйте парамет ризацию. Предварительную компиляцию выполняет метод Prepare объекта Command. Естественно, для одиночного исполнения предва рительная компиляция только ухудшит производительность. Это же относится и к вызовам уже откомпилированных хранимых процедур. Параметризацию обеспечивает коллекция Parameters. Хотя Вы и мо жете заставить самостоятельно определить список пара метров для хранимой процедуры, лучше создать коллекцию Parameters в коде — это сэкономит время, нужное клиентскому приложению для выполнения метода Refresh, связанного с объектом Command. В от личие от версий сервера, поддерживавших предваритель ную компиляцию посредством создания временных хранимых про цедур, версия 8.0 обеспечивает подготовку исполнения собственны ми «естественными» средствами. При вызове хранимых процедур с параметрами лучше использовать вызов Call, а не EXECUTE. Кстати, если у Вас есть выбор, используйте SQL Server для доступа к БД — это быстрее, чем обращения через OLEdBпровай дер для ODBC. После того как объект Recordset сформирован, программа, обыч но начинает его разбор (обычно это делается в цикле). Если перед началом цикла выполнить привязку полей объекта к переменным, цикл будет отрабатываться быстрее, так как при использовании пред варительной привязки ссылки не требуют дополнительного поиска по объекту. Recordset, помимо поиска, фильтрации и сортировки, предостав ляет возможность пакетных модификаций. Вы изменяете содержимое полей объекта и затем передаете изменения единым пакетом на сер
www.books-shop.com
454
Microsoft SQL Server 2000. Новейшие технологии
вер (метод UpdateBatch объекта Recordset). Это удобно, но не очень быстро. Если есть можно, используйте стандартную команду UPDATE TSQL — модификации будут выполняться быстрее. Это связано с тем, что при выполнении пакетных модификаций соверша ется проход по записям объекта Recordset, и на сервер посылается набор команд для каждой индивидуальной модификации. В этом слу чае мы получаем все «прелести» навигационного подхода: необходи мость компилировать индивидуальные выражения, каждая модифи кация выполняется самостоятельно. При «нормальном» подходе единственная команда UPDATE сделает все то же самое, только сер вер сможет оптимизировать ее должным образом. Очевидно, что этот способ применим, только если группа записей получает новые оди наковые значения некоторого поля. Если же при обновлении 100 за писей на сервер посылается 100 разных модификаций, выбор подхо да важной роли не играет. При исполнении индивидуальных команд немного быстрее рабо тает метод Execute объекта Connection. Это обусловлено тем, что ADO не пытается сохранить информацию о состоянии команды. Скорость получения данных и загрузка сети Всегда выбирайте способ обращения в зависимости от того, нужно ли Вам получать данные на рабочую станцию. Если Ваше приложе ние только вносит изменения в БД, все, что нужно знать, — не про изошла ли ошибка. Это выясняется анализом объекта Error. Совер шенно не обязательно при этом гонять чтото по сети. Свойство adExecuteNoRecords команды ADO позволяет оптимизировать про изводительность. Кроме того, будет неплохо, если Вы на уровне со единения установите параметр SET NOCOUNT ON. Посудите сами: хранимая процедура может выполнять значительное количество дей ствий, связанных с выборкой данных, но она возвращает лишь един ственное значение. Зачем же нагружать сеть совершенно ненужными сообщениями о том, что очередные N записей попали в зону ее вни мания? Кстати, если Ваша процедура возвращает не набор записей, а просто несколько значений, гораздо лучше применить выходные (Out put) параметры процедуры. При этом Вы получаете только нужную информацию, а не объект Recordset, снабженный немалым количе ством метаданных (размерность и тип данных полей и Иногда метаданных больше, чем реально нужной информации. При обсуждении вопросов производительности не обойти такую богатую тему, как курсоры, локальные и серверные. Мы уже говори ли о типах курсоров и я вкратце описал их возможности. Посмотрим
www.books-shop.com
ГЛАВА 9:
SQL Server и
мир
455
теперь, какими критериями руководствоваться при выборе типа кур соров. Серверные курсоры дают ряд преимуществ: данные приходят на рабочую станцию только по запросу, Вы получаете максимально «свежие» данные (тут все зависит от типа курсора). Самый с точки зрения скорости получения данных, — курсор, создаваемый по умолчанию. Статический серверный курсор хранит информацию в и при больших объемах может серьезно ее загрузить. Быст рее всего открывается динамический курсор, он же самый медлен ный при выборке значительного объема данных. Серверных курсо ров можно открыть несколько за раз. Локальный курсор может быть только но это в какойто мере компенсируется богатством его возможностей. Не создавайте курсоров, чьи возможности Вам не по надобятся. Если нужна только прокрутка вперед, не используйте ди намические курсоры — оставайтесь с тем, что предлагается по умол чанию. Если Вам все же нужно перемещаться по курсору во всех на правлениях, локальный курсор скорее всего будет более удачным вы бором, чем серверный. Заметьте: получение данных с сервера стоит недешево, и нужно постараться минимизировать число обращений к нему. Это можно регулировать подбором типа курсора (чем шире предоставляемая функциональность, тем медленнее все это работает) и параметрами соединения. Чем больше записей Вы сможете получить за каждое обращение на сервер, тем лучше. Глупо совершать полное путеше ствие ради каждой индивидуальной записи. Один из параметров, по зволяющих регулировать этот процесс, — свойство Cachesize объекта Recordset. Изменив его значение по умолчанию — 1 — на 30 или 50, Вы повысите производительность на При использовании ке наборов рабочая станция позволяет перемещаться в рам ках полученной группы записей до тех пор, пока Вы не попытаетесь выйти за ее пределы. При этом с сервера будет запрошена новая пор ция, а старая будет высвобождена. Соответственно, если уж Вы опти мизировали сам процесс получения данных с сервера, постарайтесь оптимизировать и объем получаемых данных. Не хочу никого оби жать, но не используйте предложения типа SELECT *, исходя из по сылки «там Использование связанных серверов Как я уже говорил, SQL Server 8.0 способен задействовать информа цию практически из любого источника, если имеется соответствую щий OLEdBпровайдер. Доступ к «внешним» данным организован через так называемые связанные (Linked) серверы. Чтобы получить
доступ к внешнему источнику данных, надо создать новый связан ный сервер. Эти серверы создаются (почемуто) в разделе Security основного дерева административной консоли. Раскрыв указанный узел, Вы увидите объект Linked Servers. Щелкнув его правой кноп кой, Вы раскроете контекстное меню, команда New Linked Server (Со здать новый связанный сервер) которого выводит диалоговое окно, позволяющее описать параметры соединения (рис.
Рис. В зависимости от выбранного провайдера Вы указываете те или иные параметры соединения. Вот параметры соединения и их возможные значения. Тип источника
Тип Имя Имя провайдера продукта провайдера
Источник Положение
SQL Server
Microsoft
Сетевое имя SQL Server
Provider SQL Server
SQL Server
SQL
База соединения данных Имя базы
www.books-shop.com
ГЛАВА 9:
SQL Server и остальной мир
457 (продолжение)
Любой текст
MS
Псевдоним SQL*Net для БД Oracle
Microsoft OLEdB Provider for Jet
Любой текст
Microsoft. Jet.OLE
Полный путь к файлу БД
ODBC источник
Microsoft OLEdB Provider for ODBC
Любой текст
MSDASQL
ODBC источник
Microsoft OLEdB Provider for ODBC
Любой текст
MSDASQL
Файловая система
Microsoft Любой OLEdB текст Provider for Indexing Service
MSIDXS
Имя каталога службы ин дексирования (Indexing Service)
Microsoft OLEdB Provider for Jet
Microsoft. Jet.OLE DB.4.0
Полный путь к файлу Excel
Oracle
Microsoft Provider for Oracle
Access/Jet
Microsoft Excel
Jet
Любой текст
Имя систем ного DSN для ODBC источника Строка соединения в нотации ODBC
Excel 5.0
Было бы неплохо оформить это диалоговое окно средствами ин терактивного построения параметров соединения, но сейчас у Вас два варианта: все (не так уж много) написать вручную или сначала пост роить описание соединения средствами инструментов Visual Basic, a затем перенести строку описания в этот диалог. После того как сервер описан, открываются его таблицы (или то, что провайдер воспринимает как таковые), и можно напрямую обра щаться к ним, как если бы это были «настоящие» таблицы SQL Server. Почти так же. Поскольку данные расположены за пределами серве ра, чтобы указать ему на них, надо применить нота цию. Для только что созданного нами сервера вызов будет таким: SELECT * FROM Как видите, я указываю имя сервера данные хранятся в БД Testdata, понятие владельца объекта у отсутствует, я его пропускаю и указываю таблицу. Применяя эту нотацию, я могу создавать представления, которые будут использовать внешние данные. Далее я буду называть структу ры хранения «таблицами», потому что именно в табличном представ
www.books-shop.com
Microsoft SQL Server 2000, Новейшие технологии
458
лении информация возвращается на сервер. Хотя, строго говоря, иногда исходная структура хранения может быть иной. Итах, создание представлений. После того как мы подключили внешний источник данных, список его таблиц отображается в пра вой панели консоли администрирования (рис. К сожалению, если щелкнуть правой кнопкой одну из таблиц, контекстное меню не предлагает ничего, кроме копирования имени таблицы и вызова оперативной помощи. Для доступа к данным нуж но либо дать вышеописанную команду SELECT, либо построить представление. Представление строится обычным образом: открыв окно конструктора, Вы просто перетаскиваете нужные таблицы. Без тут не обойтись, так как Конструктор видит только таб лицы в текущей БД (там, где Вы создаете представление). Я приведу пример представления, к БД Visual FoxPro, так как тут есть несколько особенностей, усложняющих жизнь. ПРИМЕЧАНИЕ Я специально делаю особый акцент на использовании БД Visual FoxPro, так как описаний доступа к БД Access или SQL Server в документации пруд пруди. Если в случае, скажем, с данными другого SQL Server или MS Access перетаскивание таблицы формирует нормальную ссылку, то при работе с Visual FoxPro Вы получаете нечто такое: SELECT
FROM
Visual INNER JOIN
Visual Studio\MSDN98\98VS\1033\Samples\VFP98\data\Testdata.dbc. orditemsl ON = Как видите, хотя конструктор совершенно верно распознал отно шения между таблицами — правильно сформировано предложение INNER JOIN, он совершенно неправильно указал ссылку на сами Для нормальной работы представления Вам придется вруч ную переписать: Files\Microsoft Visual
www.books-shop.com
ГЛАВА 9; SQL Server и
мир
459
Это связано с тем, как ODBCдрайвер откликается на запрос о его возможностях. После того как все поправлено, представление пре красно работает, и Вы можете на него ссылаться как на любое стан дартное представление, обращающееся к БД SQL Server. Еще два способа получения информации из внешнего источника основаны на вызовах новых TSQLфункций OPENQUERY и OPEN ROWSET. OPENQUERY это оболочка к SQL выражению, обра щенному к связанному серверу. Синтаксис вызова очень прост: связанного
SQL
Результат, возвращаемый функцией, можно использовать в соста ве выражения SELECT, как если бы это была физическая таблица. Перефразируя приведенное ранее выражение, можно написать: SELECT stor_id,
FROM
*
Как видно, первый передаваемый функции параметр по сути дела описывает все, что нужно для успешного подключения к данным, а второй формулируется в терминах уже конкретной БД. Если выраже ние, передаваемое в качестве второго параметра, возвращает несколь ко наборов данных, функция обрабатывает только первый из них. Для работы с представлениями VisualFoxPro используйте указание БД и имени представления: SELECT
company FROM
* from
Если Вы не собираетесь регулярно использовать информацию из внешнего источника, можете применить вторую функцию — OPEN ROWSET: rovide
позволяет «на лету» описать все параметры соединения. select * from
PWD=; Visual
www.books-shop.com
Microsoft SQL Server 2000, Новейшие
* from Параметр SourceDB можно опустить. Не самая элегантная форма записи, но это работает. Впрочем, каждый раз писать десятихвостоу каталог, куда Visual Studio теперь прячет тестовую БД, хва тит терпения далеко не у всякого, поэтому лучше программно создать связанный сервер, а затем, если нужно, уничтожить его. Еще одна функция, новая в составе языка SQL Server 2000, — OPENDATASOURCE, очень похожая по функциональности и спо собу применения на Точно так же Вам потребуется передать всю информацию о подключении, точно так же она работа ет медленно и не открывает всю функциональность связанных серве ров в части передачи полномочий доступа. Вызывается она так: SELECT * FROM
Sou
r
Создать связанные серверы программно позволяют две хранимые процедуры: и Первая представ ляет собой программный эквивалент диалогового окна (рис. 911) и вызывается с параметрами: =] [, [, [, [, [, [,
=] =] =] =] =] ' =]
]
Для создания связанного сервера FOXSERVER1 мы поступим так: = = = NULL, = NULL
= годится любой = = NULL,
,
Информация о новом связанном сервере помещается в таблицу Master. а в таблицу добавляется запись для ново го идентификатора пользователя. В случае с Visual FoxPro, не требу
www.books-shop.com
ГЛАВА 9; SQL
и
мир
461
ющего регистрации, эта запись по большей части содержит значения NULL. Если речь идет о сервере, требующем полноценной регистра ции, используйте хранимую процедуру которая обеспечит связь пользователя в рамках текущего сервера с тем, под именем которого он будет известен «там». Процедура вызывается так: =] [,
=] =]
[,
=]
=] идентификатор самого имя удаленного удаленного
Как видите, доступ может быть организован двумя способами: сер вер использует собственный идентификатор (параметр @useself = или применяется идентификатор конкретного пользователя. В первом случае подключение к удаленному серверу выполняется под именем учетной записи, применяемой службой самого SQL Server, при этом все остальные параметры игнорируются. Во втором, когда пара метр @useself = FALSE, применяется указание, что локальный пользо ватель ставится в соответствие удаленному с Того же эффекта можно добиться при работе с вкладкой Security диалого вого окна свойств связанного сервера (рис. 912).
Здесь Вы указываете связь локальных и удаленных пользователей.
www.books-shop.com
462
Microsoft SQL Server 2000, Новейшие технологии
SQL Server 8.0 как OLE Automation+клиент SQL Server может выступать в качестве OLE Automationклиента. Эта функциональность появилась еще в предыдущей версии и поддержи вается набором расширенных хранимых процедур. Хотя имена этих процедур и начинаются с SP_, в реальности они используют библио теку odsole70.dll, которая и выполняет всю работу (не удивляйтесь, имя у нее действительно включает Манипулирование компо нентами выполняется совершенно обычным образом. создается вызовом хранимой процедуры sp_OACreate. Про цедуре передается либо CLSID, либо PROGID соответствующего компонента, вторым параметром является имя локальной перемен ной, в которой будет храниться ссылка на созданный экземпляр (эта переменная должна иметь тип и дополнительно, в третьем пара метре, можно указать тип OLE сервера (InProcess, и то и Получив ссылку на объект, Вы начинаете его использовать. Для этого имеется свой набор процедур. Процедура возвращает значение указанного свойства. Ей передается ссылка на объект, имя свойства, переменная, куда будет помещено значение свойства и при необходимости набор параметров для указанного свойства. Замечу: параметры передаются по порядку, а не по имени. Для назначения свойству новой величины применяется процедура В качестве параметров она принимает ссылку на объект, имя свойства, новое значение и при необходимости набор параметров свойства. Если у объекта есть набор методов, они вызы ваются процедурой sp_OAMethod. Снова Вы передаете ссылку на объект, имя метода, переменную, куда будут помещены результаты исполнения метода и набор параметров метода. Ошибки обрабатыва ются по результатам исполнения процедуры Унич тожить экземпляр объекта поможет процедура sp_OADestroy. После первого вызова процедуры sp_OACreate в рамках сервера создается среда исполнения OLE Automationкомпонентов. Если нуж но остановить работу этой среды, вызовите процедуру sp_OAStop. При остановке сервера среда будет уничтожена автоматически. В раз деле OLE Automation Sample Script документации Вы найдете пример кода, использующего перечисленные выше процедуры. Учтите, что SQL Server и OLE Automation используют несколько разные типы данных. Во избежание проблем обратитесь к докумен тации (раздел Data Type Conversions Using OLE Automation Stored Pro чтобы получить дополнительную информацию о преобразо ваниях типов «туда и Что за нужда во внешних компонентах? Все очень просто. Все мы сталкивались с ситуацией, когда стандартный TSQL не в состоянии
www.books-shop.com
ГЛАВА 9: SQL Server и
мир
463
обеспечить нужную функциональность. Эту проблему можно решить, создав: • расширенную хранимую процедуру средствами • стандартную хранимую процедуру средствами TSQL. Оба способа по меньшей мере непросты, а второй, вполне возмож но, и не поможет, если TSQL не предоставляет нужной функцио нальности. Объекты OLE Automation открывают еще один путь. Создание компонента OLE Automation позволяет применить всю таких языков, как VB или Visual более простых в ис пользовании и отладке. С версии 6.0 компоненты Visual FoxPro могут исполняться в среде Microsoft Transaction server (компоненты, создан ные средствами VB, могли это и что заметно ускоряет заг рузку компонентов. Специализированный компонент может быть вызван из хранимой процедуры или триггера для выполнения нуж ных действий. Перечисленные выше специализированные процеду ры упрощают работу с компонентами, так как они скрывают все слож ности по инициализации объектов и конвертированию параметров SQL Server в параметры объектов OLE. Поскольку OLEкомпоненты с SQL Server не связаны (у Вас, воз можно, уже целая библиотека полезных их можно использо вать и в других приложениях. Этого не скажешь о расширенных хра нимых написанных на С и ODS: они не только сложны в разработке, но и ничего не стоят за пределами сервера. Internet и XML Еще одно существенное нововведение версии 8.0 — доступ к данным сервера по HTTP. Помимо хорошо известных технологий и серверов, таких как IIS, HTML, в дело вступает новый «спаситель человечества» — XML. Если Вам не приходилось иметь дело с этим зверем, то вкратце XML можно охарактеризовать как язык разметки докумен тов, позволяющий в рамках определенных правил описывать струк туру передаваемой информации. Возможно, ктото найдет более удач ную формулировку — сейчас только и говорят об XML и его возмож ностях. Если Вы готовы разбираться со спецификациями на стандарт языка, обратитесь на www.xml.org. На сайте http://www.asptoday.com Вы найдете массу полезной информации об этой технологии и дру гих, связанных с доступом к данным через Интернет. Великолепную литературу выпускает издательство Wrox (WWW.Wrox.com). Это тема самостоятельной книги, и не одной, поэтому я не стану останавли ваться на тонкостях самого а рассмотрю его практическое при менение с точки зрения SQL Server 2000.
www.books-shop.com
464
Microsoft SQL Server 2000, Новейшие технологии
Для организации доступа к данным через Интернет до последнего времени имелся только один способ — на которых на языке сценариев были прописаны те же команды, что мы только что рассмотрели, говоря об ADO. Версия 8.0 дала возможность брать дан ные, так сказать, напрямую, не создавая дополнительного кода, ну, или почти никакого. Для нормального отображения информации в браузере пользователя Вам придется заняться форматированием по лученных строк. Но для начала посмотрим на утилиту IIS Virtual Directory Management. Этот инструмент создает виртуальный каталог на Интернетсервере и назначает ему ряд дополнительных атрибутов, перенаправлять запрос от IIS на SQL Server для извлече ния информации. Выглядит это так. В числе ярлыков, создаваемых при установке сервера, появляется один, указывающий на ту самую утили ту. Вызвав ее, Вы попадаете в дружеские объятия очередного мастера. Часть вопросов мастера не отличается от тех, что задает мастер, вызываемый из консоли управления IIS. Так, на первой вкладке диа логового окна мастер попросит указать имя виртуального каталога и путь к физическому каталогу. Следующая вкладка позволяет описать правила проверки привилегий доступа (рис.
Здесь Вы указываете права на доступ к новому виртуальному каталогу.
www.books-shop.com
ГЛАВА 9;
SQL Server и остальной мир
465
Вы можете указать, что все запросы будут проходить от одного и того же например, учетного имени SQL Server 2000 или учет ного имени Windows. Если выбрать авторизацию средствами Windows, мастер автоматически подставит учетное имя, под которым работает анонимный пользователь сервера>). Можно выбрать и интегрированную авторизацию средствами Windows, и будет задей ствовано то учетное имя, под которым пользователь зарегистрировал ся в сети, или будет выведен запрос на ввод учетного имени пользо вателя SQL Server и пароля (стандартная авторизация). На вкладке DataSource от Вас потребуют указать имя сервера и имя его базы данных, а на вкладке Settings (рис. — параметры досту па к данным сервера.
914. Помимо прав на доступ к каталогу, Вы можете определить дополнительные ограничения на способы работы с самим сервером.
Рассмотрим эти параметры подробнее. Если чтото сразу покажет ся непонятным, не страшно, мы вскоре начнем работать с сервером, и Вы разберетесь что к чему. Итак, первый флажок Allow URL Queries (Разрешить использовать текст запроса непосредственно в URL). Если его пометить, сервер будет принимать запросы, текст которых вставлен прямо в URL, набираемый в окне браузера. Такой запрос может выглядеть как:
Обратите внимание на символы поставленные вместо пробе лов: они заменяют который автоматически вставляется IE. Кро ме того, новый атрибут FOR XML указывает серверу, что команда SELECT должна вернуть данные в формате XML. Вроде бы ничего дурного тут нет, но... Вопервых, с точки зрения безопасности, лучше не распространяться насчет имен таблиц и их полей. Вовторых, длинный запрос все равно сюда не вставить. Поэто му по умолчанию флажок и не выделен. Второй флажок — Allow Template Queries (Разрешить использова ние запросов с шаблонами) — позволяет применять запросы, упако ванные в XMLшаблон. Выбор третьего флажка — Allow XPath (Разре шить запросы средствами XPath) — позволяет задействовать подмно жества языка XPath, работающего с аннотированными схемами описа ния XMLдокумента. И, наконец, флажок Allow POST разрешает или модификацию данных средствами XMLдокументов. До полнительно к этому флажку можно указать объем данных, которые будет принимать сервер. На вкладке Virtual names (Виртуальные имена) можно указать вир туальные имена дополнительных каталогов или файлов, используе мых при отправке запросов на сервер. Виртуальные имена присваи ваются объектам трех видов: (объект БД), template (шаблон) и schema (схема). Вкладка Advanced позволяет указать альтернатив ный путь к динамической библиотеке, поддерживающей весь этот механизм [библиотека написана как IIS API и до полнительные параметры. Все настроили — можно работать. Создадим виртуальный каталог SQL2000 и выполним к нему запрос такого содержания:
Результат представлен на рис. 915. Согласитесь, что все это очень интересно, но вряд ли пользователь станет прорываться через дебри
www.books-shop.com
ГЛАВА 9: SQL
и остальной мир
467
XML. Чтобы привести это безобразие в человеческий вид, воспользу емся шаблоном форматирования XSL.
Puc. «Сырая» информация требует дополнительного форматирования.
Создадим шаблон, который, вопервых, скроет текст запроса, а во вторых, позволит передавать параметры для фильтрации отбираемых данных. Шаблон будет использовать хранимую процедуру (еще одна линия защиты от несанкционированного Create procedure AS SELECT orderdate =
@0rderdate OrderDate FROM orders WHERE FOR XML AUTO
Процедура принимает параметр, позволяющий отобрать только нужные данные. Шаблон для ее вызова выглядит так:
> exec SelectOrderDate
www.books-shop.com
Microsoft SQL Server 2000. Новейшие технологии
468
В шаблон включен текст запроса (тег и имя параметра (тег sql:param name). Если параметр не передан, шаблон использует значение умолчания 12/12/1996. Полученный результат не сильно отличается по читабельности от что показан выше. Придется создать шаблон, который будет форматировать данные и представит их в виде привычной таблицы: Вот текст шаблона для извлечения данных: EXEC и текст шаблона для форматирования полученных результатов: match = /> match =
select = select = select = select =
<xsl:value)of select =
/> /x/Bx/TD> /> /> /x/TD>
match = ' / ' > { background)color:
. :300; '> Orders
www.books-shop.com
ГЛАВА 9: SQL Server и остальной мир
469
Order
select =
/>
Как видите, шаблон пропускает через себя результат запроса и форматирует данные обычными HTMLтегами. Процедура для получения данных выглядит так: CREATE PROCEDURE AS DECLARE IF IS NULL OR SET = ELSE SET =
= NULL
= '
+
FROM Orders oh INNER JOIN [Order Details] od ON WHERE LIKE ORDER BY oh.Orderld,
= od.orderid
FOR XML RAW GO
Результат выглядит совершенно нормально, только способ полу чения данных отличается от всего, к чему Вы до сих пор привыкли (рис. 916). Что касается получения информации, клиентским приложениям болееменее понятно. Теперь посмотрим, как записывать информа цию в таблицы SQL Server с использованием XML. Основой для за писи XMLданных служит новая функция языка OPENXML, позво ляющая представить XMLдокумент как таблицу. Это происходит в памяти, a OPENXML играет роль провайдера, выполняющего преоб разования. Но перед преобразованием документ нужно подготовить как это иногда говорят). Для этого предназначена но
www.books-shop.com
Microsoft SQL Sewer 2000, Новейшие технологии
470
системная хранимая процедура Она вы полняет разбор текста и размещает разобранный документ во внут реннем кеше сервера. Имейте в виду: для хранения разборки доку ментов используется общий пул памяти сервера, и обработанный до кумент следует удалить из памяти процедурой ment. Так вот, документ разобран, помещен в память, и теперь его можно открывать средствами OPENXML. Вызов функции следует использовать в тексте команды SELECT, а полученные результаты можно отображать, записывать в переменные для дальнейшего ис пользования или вставлять в команду INSERT с помощью комбина ции INSERT INTO ... SELECT ... FROM
Использование шаблона превращает XMLтекст в обычную HTMLтаблицу.
В документации приведен такой пример: DECLARE DECLARE
int
www.books-shop.com
ГЛАВА 9:
SQL Server и
мир
SET @doc ='
<0rder
) Create an internal representation of the XML document. EXEC OUTPUT, @doc ) Execute a SELECT statement using OPENXML provider. SELECT * FROM OPENXML WITH (CustomerlD varchar(10), ContactName EXEC Так вот, команду SELECT можно заменить на группу: Create table TestXML (CustomerlD Varchar(10), ContactName INSERT INTO TestXML ContactName) SELECT * FROM OPENXML WITH (CustomerlD varchar(10), ContactName SELECT * FROM TestXML Результатом этой модификации будет добавление двух записей в таблицу TestXML. Очевидно, что XMLдокумент можно передать в качестве параметра хранимой процедуры. С точки зрения ADO, XMLдокумент следует помещать в уже опи санный объект STREAM и работать с ним на клиенте.
www.books-shop.com
472
Microsoft SQL Server 2000. Новейшие технологии
Заключение Удобная и гибкая объектная модель ADO позволяет полностью за действовать возможности сервера. Поскольку все серверные прило жения, выпущенные в последнее время или планируемые к выходу, проектировались с учетом возможности использования этого интер фейса, SQL Server 8.0 легко встраивается как в системы, построенные с применением технологий Интернет/Интранет, так и в классичес кие системы архитектуры клиент — сервер. Средства поддержки XML позволяют использовать SQL Server 2000 в качестве хранилища при обслуживании биз несприложений.
www.books-shop.com
Глава
Утилиты
администрирования
Несмотря на все усилия разработчиков, некоторые аспекты работы с сервером остались довольно примитивными. В этой главе я представ лю набор утилит, которые я создал для собственных нужд еще в эпоху версии 7.0. Когда выходил очередной SQL 2000, я со смешан ными чувствами ждал изменений, которые сведут на нет мои стара ния. Но оказалось, что старался я не напрасно. И новая версия имеет ряд ограничений, не позволяющих посмотреть избирательность ин дексного ключа, размещение файлов баз данных по группам, теку щую активность процессов в реальном времени и пр. Странно, что полезные функции версии 6.5, выброшенные из «семерки» так и не вернулись в новом качестве версии 8.0. Избирательность индекса Начнем с утилиты, позволяющей проанализировать избирательность ключа индекса. Проблема возникла, когда мне понадобилось проана лизировать качество индексов в БД, включающей более 250 таблиц. Все, что предлагалось, — использовать TSQL и DBCC. В версии SQL в диалоговом окне Manage indexes для каждого индекса можно получить информацию о его избирательности и, сле довательно, полезности. В «семерке» эта функциональность пропала, а в версию 8.0 ее не добавили. Чтобы получить нужные сведения, при ходится открывать Query Analyzer и вводить DBCC Show_statistics, передавая имя таблицы и имя индекса. Имя индекса выдаст процеду ра которой надо передать имя таблицы. Версия 8.0 пре доставляет немного больше информации, чем раньше, но все равно ручного труда остается немало.
www.books-shop.com
474
Microsoft SQL Server 2000, Новейшие технологии
Вводить DBCC SHOW_STATISTICS несколько сот раз было весь ма обременительно, поэтому я проверил только основные таблицы и решил написать сценарий, который проходил бы по БД и для каждой каждого индекса и полей в составе индексного ключа выво дил бы избирательность с рекомендациями о полезности (строить индекс для поля, которое имеет пару десятков уникальных значений на миллион записей, не очень разумно). Так как обработка результатов исполнения DBCC SHOW_STA T1STICS из кода на TSQL — задача не из легких, я применил «гру бую силу». Сначала я определяю поля в составе индексного ключа, затем вычисляю число уникальных значений этого поля и определяю избирательность индекса. Поля в индексном ключе я определяю сред ствами функции INDEX_COL, принимающей имя таблицы, номер индекса и идентификатор ключа. Я рассматриваю индекс с избира тельностью 0.3 и выше как неудачный. Избирательность в диапазоне от до 0.3 — неплохо, индексы с избирательностью меньше — очень хорошо. Сразу оговорюсь, что я вообще исключаю из рассмот рения уникальные индексы: они и так хороши. Можно не соглашать ся с выбранными критериями полезности: код перед Вами, внесите коррективы в соответствии с книжкой, которую Вы недавно прочли. Заметьте: я активно использую курсоры и временные таблицы, так что TempdB получает приличную нагрузку. Дополнительно я проверяю владельца таблицы, так как не всегда имя является DBO. В итоге все мои ссылки получаются в полной нотации Написав сценарий и прогнав его на сервере заказчика, я нашел еще несколько совершенно индексов. Я решил, что это не очень современный подход, так как у приложения нет графичес кого интерфейса. Хотя сценарий на TSQL имеет целый ряд преиму ществ (о них позже), у нас есть еще несколько вариантов, помимо командной строки. Тут я и решил написать приложение, которое по зволяло бы легко переключаться между серверами и базами данных и могло быть включено в состав ММС. OCX в составе ММС Я уже говорил о возможности применения пользовательских компо нентов в ММС. Я решил снова пойти тем же путем. Задача была до вольно проста: подключиться к серверу, получить список БД, выб рать нужную и получить список всех таблиц. Когда пользователь вы бирает одну или более таблиц, я показываю избирательность (то, что DBCC называет density) для всех индексов и полей в составе индекс ного ключа. Естественно, я применяю SQL DMO, позволяющую доб раться до административного интерфейса SQL Server. Компонент
www.books-shop.com
ГЛАВА 10:
Утилиты
администрирований
включает несколько текстовых полей для ввода имени пользователя, сервера и пароля. Для подключения к серверу я создаю соответству ющий объект и вызываю метод Connect с нужными параметрами. После успешного подключения, я получаю список БД и заполняю список. Вот как это делается: ' Предполагается, что у нас уже есть обьект SQLServer ' Получаем число БД на сервере = ' Получаем имена БД и заполняем список ' Для работы нам не нужны системные БД, такие как Master, MSDB, Model, Distribution и пр. ' Интересующая нас информация находится только в пользовательских БД For i = 1 То dbcount Next Когда пользователь дважды щелкнет имя одной из БД, я обраща юсь к коллекции Tables и заполняю второй список именами таблиц. Тут следует отметить одну особенность. При подключении к серверу соединение автоматически выбирает БД, назначенную пользователю по умолчанию. Это значит, что все наши действия выполняются в контексте этой БД, если не указано полное имя объекта <имя БД>.<владелец>.<имя объектах Для изменения контекста БД мне надо работать с объектом, указывающим на интересующую меня БД. Для переключения контекста создаем объект Database, ссылающийся на определенную БД Set SQLDatabase = sqltables
+ 1)
For i = 1 To sqltables = ' Нам не нужны системные таблицы If Not = "SYS" Then ' так как не факт, что таблица была создана от имени необходимо получить имя владельца CurrTabOwner = TabListEntry = + CurrTabOwner + + CurrTabName + (TabListEntry) End If Next Ⱦɚɧɧɚɹɜɟɪɫɢɹɤɧɢɝɢɜɵɩɭɳɟɧɚɷɥɟɤɬɪɨɧɧɵɦɢɡɞɚɬɟɥɶɫɬɜɨɦ%RRNVVKRS ɊɚɫɩɪɨɫɬɪɚɧɟɧɢɟɩɪɨɞɚɠɚɩɟɪɟɡɚɩɢɫɶɞɚɧɧɨɣɤɧɢɝɢɢɥɢɟɟɱɚɫɬɟɣɁȺɉɊȿɓȿɇɕ Ɉɜɫɟɯɧɚɪɭɲɟɧɢɹɯɩɪɨɫɶɛɚɫɨɨɛɳɚɬɶɩɨɚɞɪɟɫɭ[email protected]
476
Microsoft SQL Server 2000,
технологии
Получив имена таблиц, я могу выбрать одну, несколько или все для запроса об избирательности индексов. Версия 8.0 позволяет для каждого индекса получить три набора записей, соот которые мы получили бы средствами Query Analyzer. Помимо прямого исполнения команды DBCC, можно при менить метод EnumStatistics, передавая ему имя индекса, но для это го надо создавать дополнительный объект Index и работать с коллек цией Indexes. Результаты идентичны, так что я решил исключить до полнительные шаги. Вот результат исполнения этой команды в Query Analyzer (рис. 101):
Результат исполнения DBCC
Как видите, версия 8.0 дает больше информации (нижняя полови на рисунка), чем «семерка». Результатом исполнения команды явля ются три набора данных: первый — с общими данными о статистике; второй описывает все комбинации ключа для конкретного индекса, и третий включает собственно выборку с индивидуальными значени ями ключей, полученную при построении статистики.
www.books-shop.com
ГЛАВА
Утилиты
администрирования
477
Для обработки полученных наборов мне нужен метод адресованный соответствующему объекту БД. Этот ме тод позволяет работать более чем с одним набором и переключаться между ними. Одна проблема: формат возвращаемых наборов (объек ты данных требует специфического подхода к извлече нию данных. Данные из QueryResult извлекают методы GetCo типа которые сразу преобразуют ее к соответству ющему типу (если это возможно). В моем приложении я применяю только строки, поэтому буду работать с методом ' Этот код исполняет основную работу For i = 1 То ) 1 If Or = 1 Then Tablename = ' Создаем ссылающийся на определенную таблицу Set SQLTable = SQLDatabase.Tables(Tablename) ' Получаем число индексов этой таблицы, ' сюда входят и "нормальные" индексы и созданная сервером статистика IndCount = For k = 1 To IndCount ' Для каждого индекса строим команду DBCC и исполняем ее IndexName = SQLstring = show_statistics & _ + Tablename + + IndexName + ' После каждого исполнения мы получаем объект QueryResult, ' который может содержать до трех наборов данных Set SQLResult = Для пустой таблицы мы ничего не получаем, поэтому ' сначала нужно проверить, вернул ли сервер что)то полезное If > 0 Then ' Мы знаем, что первый набор содержит только одну запись, поэтому нам не надо применять цикл NextRow = Tablename & Chr(9) & IndexName & Chr(9) & _ sqlresult.GetColumnString(1, 5) NextRow Переходим к следующему набору sqlresult.CurrentResultSet = 2 SQLResultRows = ' Здесь мы можем получить больше одной записи, начинаем цикл For j = 1 То SQLResultRows ' Если мы строим строку так, она будет иметь пробелы перед
www.books-shop.com
SQL Server 2000, Новейшие технологии
478
' текстом, это облегчает выделение блоков текста = & Chr(9) & _ & 3) & _ Chr(9) & 1) NextRow Next End If Next End If Next Работающий компонент выглядит примерно так (рис. 102):
Рис. 102.
Компонент в составе
Подключитесь к серверу, выберите БД, несколько ее таблиц и щелкните кнопку Check. Если все нормально, Вы получите данные об индексах и их избирательности. Чтобы проверить все таблицы, щелкните флажок рядом с кнопкой Check. OCX или T+SQL Почему код на TSQL иногда оказывается более удачным решением, чем OCX в составе ММС? При исполнении команда DBCC возвраща ет информацию о первом поле индексного ключа, комбинации перво
www.books-shop.com
ГЛАВА 10:
Утилиты
479
го и второго, первого, второго и третьего и т. д. Вы не получаете неза висимые данные для каждого поля в составе ключа. Эту информацию можно получить только посредством ручного Чтобы заставить OCX работать на компьютере заказчика, там дол жно стоять довольно много всякого ПО, или Вам придется просить доступ в корпоративную сеть со своего переносного компьютера. При работе со TSQLсценарием просто пошлите заказчику текстовый файл, а он Вам — результаты его работы. Если на сервере отключен режим автоматического обновления статистики, DBCC вернет устарев шую информацию или, что хуже, вообще ничего не вернет. Прямой доступ всегда использует текущие данные, хотя для больших таблиц может потребоваться немало времени на исполнение сценария. SELECT GO set nocount on float, char(255), declare @total_records int declare char(25), char(30) declare smallint, tondid smallint, char(25) Вы можете оформить этот сценарий как хранимую процедуру и передавать ей имя БД как параметр set = Create table char(25), selectivity create table #table_list sysname, int, userid smallint, char(25) NULL, recordcount int NULL) Create table sysname, table_id int, index_id int) insert into table_id, userid) select name, id, uid from sysobjects where type order by name declare table_user cursor for select userid from for update of username Я готовлю список имен пользователей для получения возможности строить обращение в форме таблицы> к объектам, созданным не от имени DBO open table_user fetch next from into WHILE = 0
www.books-shop.com
430 BEGIN set
Microsoft SQL Server 2000. Новейшие технологии
= (select distinct
from sysusers where
=
update #table_list set username = where current of table_user fetch next from table_user into END close table_user deallocate table_user insert into table_id, index_id) select name, id, from sysindexes where indid > 0 and status 2 ) Exclude unique indexes and exists (select table_id from where = order by name declare curr_table cursor forward_only for select table_name, table_id, username, recordcount from for of recordcount Print cursor open curr_table fetch next from into WHILE = 0 BEGIN set = into from ' + ' + + + + + ']' execute set = (select recnum drop table update tftable_list set recordcount = where current of curr_table fetch next from into END drop table close deallocate curr_table Л Тут Вы можете ввести дополнительные критерии, отбрасывающие слишком
end fetch next from curr_ind into @indid end deallocate curr_ind fetch next from
into end Теперь начинается основная работа declare curr_ind cursor forward_only for select from for update of selectivity open fetch next from into while = 0 begin set = ' + rtrim(@keyname) + ' from ' + + ' group by ' + select execute set = select of groups for ' + + ' = ' + convert (char( 10), set = (select distinct recordcount from where table_name = select records in ' + + set select update of curr ind
= is: ' + set selectivity =
where current
www.books-shop.com
ГЛАВА 10:
Утилиты
администрирования
483
fetch next from into end deallocate curr_ind deallocate curr_table close table_user select *, = CASE when selectivity <= 0.15 then when (selectivity > and selectivity < 0.3) Then when (selectivity > Else
Then
not use this field in indexes'
END from tfflselectivity order by drop table drop table Drop table select Очевидно, что эту программу точно же можно оформить в виде OCX или иного «красивого» приложения с графическим интерфей сом, только основная часть работы выполняется на сервере, поэтому лучше всего оформлять этот код в виде хранимой процедуры и на клиенте обрабатывать только финальный результат. Права
пользователей проблема, которую я пытался решить средствами SDQL DMO и Visual Basic, — назначение пользователям прав на уровне ин дивидуальных полей. В SQL Server версии 6.x было очень удобное окошко, позволявшее назначать пользователям права на уровне индивидуальных полей. Все, что Вы могли при работе с версией 7.0, — это написать код с применением команд GRANT/REVOKE/DENY. Почему разработчи ки решили не опустить эту функциональность, Бог весть, но похоже, они осознали свою ошибку и в версии 7.0 можно вызвать диалоговое окно, позволяющее назначить индивидуальным пользователям права доступа на индивидуальные поля. Но мою утилиту рано списывать в утиль: как и любой специнструмент, она позволяет делать больше и с большим комфортом.
www.books-shop.com
484
Microsoft SQL Server 2000, Новейшие технологии
Каждый пользователь имеет права Одна из важных административных задач — обеспечение прав досту па. Можно назначить пользователям сложные пароли, разработать изощренные схемы ролей... Или ограничить права доступа на уровне индивидуальных полей. Версия 7.0 требовала написания команд типа GRANT/DENY/REVOKE <тип права> (<список столбцов>) ON <имя ТО <имя пользователя/ролиХ Никакой графики. Версия 8.0 получше, но все равно не настолько, чтобы моя утилита оказалась бесполезной. Идея довольно проста: подключаемся к серверу, читаем список БД, для выбранной — считываем список таблиц и зарегистрирован ных пользователей и для выбранного пользователя считываем его права на уровне индивидуальных полей. Так как назначение прав пользователям — чисто административ ная задача, я решил не прибегать к Раньше я почти всегда обнаруживал, что метод в разных его модифи кациях предпочтительнее работы с коллекциями и объектами SQL DMO. Но в этот раз мне удалось сделать все, что надо, и не создать ни единого SELECT! Это только подтверждает тот факт, что SQL DMO в первую очередь создавался как административный интерфейс к SQL Server. Поначалу я хотел обратиться только к SQL DMO, но позднее ока залось, что объект ADO Recordset пойдет на пользу. Вообще было бы неплохо, если бы некоторые методы SQL DMO возвращали наборы, совместимые с Recordset. Но пока придется мириться с особыми ти пами объектов SQL DMO, которые как результат вы полнения методов. Как обычно, начнем с создания объекта Server и средствами его метода Connect подключимся к серверу. Для выбранного сервера по лучим коллекцию БД и создадим объект Database, связанный с инте ресующей нас БД. Это необходимо, так как нам следует работать в контексте конкретной БД. Из объекта Database мы выделим две дру гие коллекции: Tables и Users. Для каждой таблицы и для каждого пользователя/роли в БД мы получаем коллекцию объектов Permission. В свою очередь объект Permission содержит коллекцию объектов Column. Используя перечисленные коллекции, можно тип разрешений для пользователя: SELECT/UPDATE и то, есть ли у пользователя право на соответствующие операции (свойство Процесс прав пользователя очень интуитивным не назовешь, особенно если учесть, что документация по SQL DMO со держит только голые факты без подробных пояснений (что характерно для документации Microsoft по различным API). Многие статьи носят
www.books-shop.com
ГЛАВА 10:
Утилиты
администрирования
485
слишком общий характер, и мне пришлось поэкспериментировать, прежде чем я разобрался что к чему. Словом, поборовшись, я написал нужный код. Тут пошли с интерфейсом. Я решил использо вать MS FlexGrid для отображения набора прав. Но этот объект можно наполнить данными только в цикле. Вы не можете указать в качестве источника объект типа Recordset. Все бы ничего, но при запросе спис ка прав я получаю только те поля, для которых было конкретно сказа но DENY/GRANT. Например, у меня есть таблица с 20 полями, и я выполняю команду GRANT SELECT (MyFieldl2) ON MyTable TO MyUser. Запросив список разрешений, я получу только один объект. В итоге я решил, что буду заранее заполнять FlexGrid именами полей и впоследствии просто поменяю значения ячеек, которые содержат кон кретно выданные права на соответствующие поля. Теперь мне при шлось выполнять несколько проходов по FlexGrid для отображения всех прав на SELECT и UPDATE. Если таблица имеет большое число записей, то весь процесс занимает слишком много времени. Я решил заменить FlexGrid на и использовать ADO Reco rdset. Красотой пришлось пожертвовать. Зато новое решение работа ет быстрее, и для поиска нужного поля можно применить метод Find. Что у него хорошо, так это то, что при следующем вызове мы начина ем с того места, где остановились в прошлый раз. Отсутствие полей меня не беспокоило, так как я заранее позаботился записать их в Recordset. Следующей задачей было построить критерий поиска для Find. Так как Recordset создавался «из воздуха» и только потом за полнялся данными, мне пришлось определить поля по максимуму (128 Чтобы найти искомое, нужно было использовать опе ратор LIKE. В итоге строка поиска выглядела так: Like & & Чтобы после подстановки строка выглядела нормально, я исполь зовал дополнительные кавычки. Вот результат: FieldName Like Прежде чем получить права на индивидуальные поля, мне было нужно поместить в набор записей список ролей, связанных с выб ранным пользователем. Мне кажется, это правильно, так как отказ пользователю на уровне роли делает персональное разрешение бес смысленным — все равно SQL Server задействует наиболее жесткое ограничение. Вот как выглядят некоторые из методов моего приложения: ' Этот код формирует список таблиц Private Sub
If Not = 0 Then Сначала выясним, какие разрешения (если они вообще имеются) есть у текущего пользователя на поля выбранной таблицы. ' Прежде чем заполнять recordset новой информацией, его надо очистисть. Сначала я хотел закрывать и заново открывать объект. Но у меня нет объекта к объекту recordset, так что этот подход не работает. Тогда я попытался использовать метод Delete, но, как оказалось, он не поддерживает adAffectAll, и мне пришлось бы использовать цикл. ' Это В итоге проще всего оказалось удалить recordset и создать его заново. Set ADORec = Nothing With ADORec 128, adChar, 6, adFldMayBeNull adChar, 6, adFldMayBeNull = adUseClient .CursorType = adOpenStatic End With Enabled = True = False = True = = 0 = = "Tables + TBList.Text + TBList.Col = 1 = Set SQLTable = = Set SQLUser = Получаем список ролей для выбранного пользователя Set RoleList = ' Если пользователю не назначали прав на уровне роли, мы увидим только список полей RoleCount = For i = 1 To RoleCount = Set =
www.books-shop.com
ГЛАВА
Утилиты администрирования
487
= For k = 1 To SQLPermNumber Set = = "GRANT", "DENY") = & ADORec Like & CurrUserName & If Or Then = SQLRoleName &
End If If . End If If
role" = "SELECT" Then
UCase$(SQLPermName) = "UPDATE" Then =
End If End With Next = Next Получаем информацию о разрешениях пользователя для текущего поля таблицы Set SQLUserPermissions = ' Для текущего пользователя мы получаем объект permission, который содержит один или более объектов, перечисляющих поля, на которые ' у пользователя есть определенные разрешения. ' Для хранения информации поместим ее в массив SQLPermNumber = ColCount = ' Теперь нужно пройти по всем полям и проверить разрешения. ' Для каждого пользователя может быть до двух объектов: ' для операций SELECT и UPDATE ' Первый объект содержит список полей, на которые у пользователя есть ' Второй список полей, с которыми пользователю работать запрещено. ' Весь список полей и набор разрешений мы храним в массиве. For i = 1 То ColCount With ADORec
www.books-shop.com
488
Microsoft SQL Server 2000. Новейшие технологии = = "NULL" = "NULL"
End With Next For i = 1 To Set SQLPermiss = = SQLPermNamel = "GRANT", "DENY") If Then SQLPermNamel = "NULL" End If Set SQLTableColList = ColCount = For k = 1 To ColCount Так как список полей поддерживает четыре возможных разрешения, а поля могут быть в любом месте полученного списка, нам придется каждый раз начинать сначала. Кроме того, я так и не смог разобраться, есть ли определенный порядок в формировании списка полей. При желании можно поставить трассировку и посмотреть формируемые к серверу запросы, но я не стал этого делать. Set SQLTableColumn = CurrColName = SQLPermName + + CurrColName = SQLPermName ADORec. Like & CurrColName & Select Case SQLPermName Case "SELECT" ADORec. = SQLPermNamel Case "UPDATE" = SQLPermNamel End Select Next Next Set = ADORec Я был уверен, что большое количество циклов должно сильно нагружать сервер.
www.books-shop.com
ГЛАВА
Утилиты
489
' Однако оказалось, что вызовы SQL DMO транслируются в обращения к ' недокументированной процедуре и активность очень невелика. ' Если Вас интересует код процедуры: ' USE Master ' sp_helptext sp_MSobjectprivs Else MsgBox "Пожалуйста, выберите пользователя", vblnformation, "He выбран пользователь" End If End Sub Когда вся информация получена, форма выглядит так (рис. 103).
103. полей.
Назначение прав пользователей на уровне индивидуальных
Если у пользователя нет конкретно назначенных прав на уровне роли, список ролей не появляется; если для некоторого поля нет кон кретно назначенных прав, поле содержит строку «NULL» (это всего лишь строка, а не «настоящий» NULL). Для модификации разрешений щелкните соответствующее поле. Для назначения нового разрешения я использую алгоритм: = Select Case SQLPermNamel Case "NULL"
www.books-shop.com
490
Microsoft SQL Server 2000. Новейшие технологии =
Case = Case "DENY", SQLPermNamel = "NULL" End Select Разрешения меняются по кругу: если не назначено ничего, я даю GRANT, если присутствует GRANT, даю DENY, а если запрещение уже в силе, меняю его на NULL. Определив все разрешения, щелк ните кнопку Set. Если Вы соберетесь поменять разрешения для таб лиц в составе БД Master или MSDB, я выведу предупреждение, что Вы вступили на опасную почву. При изменении разрешения на что то иное, чем «NULL», я использую символ для что сле дует назначить новое значение. Для таблиц с большим числом полей, из которых только небольшая часть должна иметь специфические разрешения, я применяю специальное меню, позволяющее назначить разрешения всем полям сразу, потом Вы модифицируете разрешения для нужных полей: это будет быстрее, чем щелкать поля по одному. Private Sub ' Проверяем, не собрался ли пользователь внести изменения в системные БД: если он такой на всякий случай напомним об опасности If = "MASTER" Or _ = "MSDB" Then i = you sure that you want to change access rights in system vbYesNo + vbCritical + If i = 2 Then Exit Sub End If End If ' If Recordset field contains "Grant" or "Deny" (and star flag) we will assign right Если для поля разрешение содержит "NULL", предполагается, что никаких изменений не требуется. Нам нужны четыре строки: ' 1 ) для назначения всем полям GRANT на SELECT ' 2 ) для всем полям DENY на SELECT ' 3 ) для назначения всем полям GRANT на UPDATE ' 4 ) для назначения всем полям DENY на UPDATE
www.books-shop.com
ГЛАВА
Утилиты администрирования
SQLGrantSelect = = SQLGrantUpdate = = While Not If Not InStr(1, "role", Then ' Проверяем, есть ли что назначать и что именно. = If 1) = Then If 4) = "DENY" Then SQLDenySelect = SQLDenySelect + Else SQLGrantSelect = SQLGrantSelect + End If End If If 1) = Then If Left(SQLPermName, 4) = "DENY" Then SQLDenyUpdate = SQLDenyUpdate + Else SQLGrantUpdate = SQLGrantUpdate + End If End If End If Wend If Len(SQLGrantSelect) > 0 Then i = Len(SQLGrantSelect) SQLGrantSelect = Left(SQLGrantSelect, i ) 2) SQLDMOPriv_Select,
> 0
+ +
+ +
SQLGrantSelect
End If
If Len(SQLDenySelect) > 0 Then i = Len(SQLDenySelect) SQLDenySelect = Left(SQLDenySelect, i ) 2) SQLDMOPriv_Select, End If
If Len(SQLGrantUpdate) > 0 Then i =
www.books-shop.com
SQL Server 2000, Новейшие технологии
492
= Left(SQLGrantUpdate, i ) 2) SQLGrantUpdate
End If If Len(SQLDenyUpdate) > 0 Then i = Len(SQLDenyUpdate) SQLDenyUpdate =
i ) 2) SQLDenyUpdate
End If = True UserList.BackColor = &H80000005 SelectedUser = = "Current user is: TbList_DblClick End Sub Я понимаю, что это приложение можно расширять, но в любом случае это неплохое начало, и я сам использовал утилиту в работе. Текущая активность пользователей Уже в нескольких версиях подряд административный интерфейс SQL Server позволяет отслеживать текущую активность пользователей. Но и «восьмерка» не получила средств, позволяющих это делать в реаль ном времени. Каждый раз, когда нужна эта информация, Вы добира етесь до узла «Current activity» на дереве администрирования SQL Server в ММС и либо используете контекстное меню и команду Ref resh, либо нажимаете F5, после чего все нижележащие узлы: «Process info», «Locks / Process ID» и «Locks / Object» — закрываются, и Вы сно ва спускаетесь до соответствующего узла и щелкаете его, чтобы уви деть нужные сведения. Этот интерфейс не позволяет фильтровать по номеру процесса или сортировать данные по определенному критерию. Можно пойти в Query Analyzer и вручную запускать соответствую щие процедуры. Но и тут масса ограничений. Так, Вы можете указать SPID # в качестве параметра, а ограничить список отображаемых по лей — нет. Для облегчения себе жизни я написал утилиту (рис. 104) с таки ми свойствами: • периодический опрос сервера одной из трех команд SP_WHO2, SP_LOCK); • частота опроса регулируется либо вручную, либо таймером; • фильтрация результатов опроса по номеру SPID; • вывод содержимого Input buffer для определенного SPID; • запись результатов опроса в журнал.
www.books-shop.com
ГЛАВА
администрирования
493
Ниже я буду ссылаться на некоторые аспекты функциональности, такие как интервал срабатывания таймера или имя хранимой проце дуры. В текущей реализации некоторые параметры жестко прописа ны в коде, но, кажется, без особого труда можно установить интервал таймера интерактивно или добавить средства выбора каталога и име ни файла, куда будет записываться журнал. Кстати, когда я уже начал писать эту главу, то столкнулся с одной особенностью, как я пола гаю, работы Windows 2000. Сначала я прописал в коде, что журнал должен создаваться на диске С: в корневом каталоге. Мной двигала святая уверенность, что при любых обстоятельствах диск С: на ком пьютере присутствует всегда. Каково же было мое удивление, когда я обнаружил, что после установки очередной системы Windows 2000 Advanced Server (в дополнение к DOS, Win98 и W2K Server), при заг рузке в AS диска С: на компьютере не оказалось! Он получил букву D. Как это объяснить, я не знаю, смысла в этом не вижу, но решил не рисковать, и теперь журнал записывается в текущий ката лог приложения, т. е. либо там, где лежит сам Visual Basic, либо там, куда Вы поместите исполняемый файл утилиты.
Рис. 104.
Форма отображения текущей активности сервера.
По умолчанию утилита начинает опрашивать сервер командой SP_who. При необходимости щелчок кнопки динамически
www.books-shop.com
Microsoft
494
2000, Новейшие технологии
чает систему на вызов выбранной процедуры. Флажок Start timer по зволяет включить таймер и активизирует движок, диапазон изме нения у которого в пределах от 0 до 10 (соответственно таймер начи нает срабатывать с указанным интервалом). Кнопка Start/Continue опрашивать сервер, посылая команды вручную. Если Вы используете таймер и почемулибо сервер отзывается плохо, в программе предусмотрен механизм динамического уменьше ния частоты опроса до тех пор, пока не будет достигнута максималь ная задержка таймера секунд), после чего таймер отключается. Для получения результатов я применил ADO, но того же можно добиться средствами SQL DMO. Разница лишь в том, что ADO по ставляет удобный для работы объект recordset, тогда как у SQL DMO гораздо сложнее в разборе. SQL DMO — прекрасный административный интерфейс, но он никогда не предназначался для построения запросов к БД. Полученный recordset я отображаю средствами VB FlexGrid. По чему FlexGrid? Можно было обратиться к DataGrid и просто переда вать ему ADO Recordset. Это проще, почти наверняка быстрее (если я не тестировал), но я бы не мог контролировать отображе ние. Средства FlexGrid позволяют показать красным записи, которые относятся к блокированным или блокирующим процессам. Я могу разбирать строки и заменять текст как угодно. Ну и, кроме того, наи меньший интервал таймера составляет 1 секунду, и я полагаю, что современные компьютеры способны обработать много информации за этот промежуток. Если на сервере открыто множество процессов, но нас интересует только один, укажите его SPID и полученный Recordset будет отфиль Для выделения нужного процесса я описываю критерий филь трации как: = «SPID =
+
А для случаев «торможения» сервера я создал механизм плавного отката: я ввел переменную, которая меняет значение лишь по окон чании обработки предыдущего запроса. Если предыдущий запрос не обработан, новый не посылается. Вот как это работает: Private Sub If Then StartPing_Click Else ' Если мы не готовы к работе, увеличиваем интервал таймера на 1000
www.books-shop.com
ГЛАВА 10:
Утилиты
администрирования
495
и выходим NewPinglnterval = + 1 Если достигнут максимальный интервал таймера, отключаем его вовсе Timer. Interval = 0, ' снимаем выделение с флажка "Start timer", ' Перемещаем движок в 0 и выдаем предупреждение If NewPinglnterval > Then = 0 Pinger. Interval = 0 Value = 0 "Maximum possible ping interval reached!" + Chr(10) + "Please check if server is available", vbCritical, "Warning!" Else = NewPinglnterval End If End If End Sub Большая часть работы выполняется в методе Click кнопки Этот метод вызывается щелчком кнопки (ручной режим) или из объек та Timer, когда программа готова к передаче очередного запроса (ре жим Private Sub = ReadyToGo = False If DBCCInputBuff And
= 1 Можно сформировать команду для получения сведений о конкретном процессе, например, sp_who или sp_who2 или sp_lock Пока же я получаю все и просто фильтрую на рабочей станции If TraceSPID And <> Then = = + Else = If SPIDCount = Если процесса более не существует, нет смысла нагружать сервер пустой работой. Остановимся и выдадим предупреждение If SPIDCount = 0 Then "No SPID with such number + Chr(10) + _ "Resetting vbCritical, "No data to display" = 0 = 0 = = 0 TraceSPID. Value = 0 Exit Sub End If Вместо цикла для разбора recordset можно использовать и просто связать его свойство DataSource с ADO recordset. ' Если Вы озабочены скоростью исполнения, попробуйте такой вариант For i = 1 То SPIDCount Select Case Чтобы построить строку, выполнить некоторые преобразования типов и для читаемости обрезать длинные строки Case = = = = Value) =
' Я не использую специального форматирования и не беру данные в том виде, как они получены от процедуры (строка журнала будет слишком ' Для данных, которые пришли от SP_who2, нам не нужно указывать время, так как она возвращает параметр "Last batch". Для большей точности синхронизируйте время рабочей станции и сервера If = 1 Then Print = Chr(9) + End If NewRow Next = True
End Sub Для подключения к серверу я указываю ряд свойств соответству ющих объектов ADO. Программа использует объекты Connection, Recordset и Command. Код, назначающий нужные свойства, таков: ' Я использую OLEDb: что он работает быстрее, чем OLE)dB) провайдер для ODBC, использующий дополнительный слой ODBC)драйвера = Создаем строку соединения, включающую имена сервера, БД, пользователя и пароль SQLConnectStr = ServerName + _ Initial Database = + "User Id = + + + Password + Открываем соединение с сервером SQLConnectStr Связываем активное соединение с объектом Command. Объект Command позволяет мне указать тип команды для сервера = SQLConnect По умолчанию начинаем с вызова процедуры Sp_who = ' Я конкретно указываю, что текст команды представляет вызов хранимой процедуры. Это повышает производительность, так как соединение не станет пытаться исполнить команду по имени таблицы, как простое SQL) выражение и только в конце как имя процедуры = adCmdStoredProc ' Мне не требуется никакой обработки на сервере, поэтому я заказываю
www.books-shop.com
ГЛАВА 10: Утилиты администрирования
499
client side, static, read only курсор = adUseClient = adOpenStatic = adLockReadOnly ' Это еще один Recordset, содержащий текст последней выполненной команды для определенного процесса ' Эта информация нужна, если на форме отмечен флажки "Show DBCC Input buffer" и "Trace only one RecInputBuffer.ActiveConnection = SQLConnect Надеюсь, эта утилита позволит более четко анализировать проис ходящие на сервере процессы. «Иде ж мой индекс, иде ж моя таблица?» Начиная с версии 7.0 SQL Server поддерживает «группы файлов» — набор файлов ОС, в которых размещаются пользовательские табли цы, системный каталог и другие объекты, совместно именуемые ба зой данных. Группы файлов пришли на смену сегментам ранних вер сий SQL Server. При создании новой БД Вы можете опустить все па раметры команды CREATE DATABASE, кроме имени самой базы. В этом случае SQL Server создает единственную группу файлов по име ни PRIMARY, и все Ваши данные, индексы и системный каталог ока жутся в этой По целому ряду причин этот подход неоптимален. Поэтому ко манды создания объектов БД позволяют указать группу файлов, в которую попадает создаваемый объект. Все это здорово, но как по нять, куда попал объект, если Вы анализируете чужую БД? Информация из таблиц и нескольких системных про цедур позволяет узнать место, где находится конкретный объект. В первую очередь это великолепная процедура SP_HELP, позволяющая узнать очень многое о конкретном объекте БД, включая имя группы, где он расположен. SP_HELP использует, в частности, недокументи рованную процедуру SP_OBJECTFILEGROUP, обращающуюся к таблицам sysfilegroups и sysindexes для получения имя группы для кон кретного объекта. К сожалению, на данный момент нет средства, позволяющего вы вести имена групп для всех объектов указанной БД. Поэтому я решил создать такой код: )alter procedure DECLARE INT, CHAR(1),
as INT, VARCHAR(255), VARCHAR(255),
www.books-shop.com
Microsoft SQL Server 2000, Новейшие технологии
500 CHAR(30), Char(30) PRINT CONVERT(CHAR(30),
INT,
TINYINT, + CONVERT(CHAR(30),
+ CONVERT(CHAR(40),
+
+
group Print 150) DECLARE DataObjects CURSOR FOR SELECT id, name, Type FROM sysobjects WHERE type OPEN DataObjects FETCH NEXT FROM DataObjects INTO WHILE = 0 Для каждой таблицы мы создаем курсор, хранящий информацию об индексах BEGIN IF EXISTS (SELECT * FROM sysobjects WHERE id = AND type = ') BEGIN DECLARE CURSOR FOR SELECT indid, groupid, Name FROM sysindexes WHERE id = OPEN Indexlnfo FETCH NEXT FROM Indexlnfo INTO WHILE = 0 BEGIN SET = (SELECT FROM WHERE groupid = Indid = 0 пользовательская таблица без индекса Indid = 1 кластерный индекс Indid > 1 некластерный индекс Indid = 255 для таблиц с полями типа Text и Image SET = CASE WHEN 0 THEN WHEN 1 THEN WHEN 255 THEN or image ELSE 'Non clustered END
www.books-shop.com
ГЛАВА 10:
Утилиты администрирования
PRINT CONVERT(CHAR(30), + + FETCH NEXT FROM
+
+
INTO @CurrentObjId,
END
CLOSE Indexlnfo DEALLOCATE Indexlnfo FETCH NEXT FROM DataObjects INTO END END CLOSE DataObjects DEALLOCATE DataObjects Заключение В этой главе я представил набор утилит, которые позволяют компен сировать некоторые ограничения административных средств SQL Server. Надеюсь, они Вам пригодятся и помогут лучше понять внут реннее устройство сервера и средств работы с ним. Увы, мне не хватило времени написать дубликаты утилит средства ми Visual FoxPro. Но мне кажется, что Visual Basic и VFP достаточно сблизились, чтобы перенос кода стал не такой уж сложной задачей. Оба инструмента предоставляют практически одинаковый набор объек тов интерфейса и средств разработки. Хотелось бы, правда, отметить, что при разработке на VFP логичнее использовать его собственные средства хранения. Полное отсутствие какихлибо механизмов хра нения данных у Visual Basic делает неизбежным применение ADO, тогда как собственные курсоры VFP обеспечивают не только боль шую гибкость, но и работают быстрее. Поэтому я бы предложил вме сто кода с объектами ADO писать на «нормальном» VFP средствами SqlConnect, SQLExec, формы строить средствами Grid и т. д. — уве рен, кода будет меньше, отлаживать будет гораздо удобнее, работа пойдет быстрее. Никакое ADO не сравнится с VFP по части манипу лирования данными, фильтрации и пр.
www.books-shop.com
www.books-shop.com
Приложение 1
Изначально этот текст появился в моей предыдущей книге. Когда я начал готовить материал для этого издания, передо мной встал воп рос о полезности повтора. Дело в том, что мастер по переводу баз дан ных версии 8.0 практически не отличается как с точки зрения внутрен него устройства, так и внешне от представленного в SQL Server 7.0. Поэтому я решил не переделывать ранее написанный материал. Так что не удивляйтесь тому, что далее в тексте Вы не встретите упомина ния о версии 8.0. Мастер по переводу баз данных Как следует из названия, Upgrade wizard предназначен для перевода БД, созданных в ранних версиях SQL Server, в новый формат. На что можно рассчитывать Процесс перевода спроектирован так, что вначале для всех объектов БД создаются соответствующие сценарии, которые затем исполняют ся на SQL Server 7.0. Мастер также отвечает за экспорт данных из базы версии 6.x и импорт в базу версии 7.0. По окончании процесса Вы по лучаете полностью функциональную копию БД. Процесс перевода весьма прост. Установите SQL Server 7.0 на той же машине, где установлена вер сия .х, или на другой. 2. На компьютере с SQL Server 7.0 запустите мастер. 3. Укажите ему, на каком сервере расположены БД, которые Вы хо тите обновить. 4. Щелкните кнопку Finish — процесс пошел: все выбранные БД бу дут автоматически обновлены, включая объекты в их составе: хра нимые процедуры, триггеры и пользовательские объекты. Можно рассчитывать на высокую скорость перевода. В одном из внутренних тестов специалисты Microsoft за час выполнили пере вод очень сложной БД SAP R3 объемом более 100 Гб, и все данные и объекты были успешно конвертированы без вмешательства админис тратора .
www.books-shop.com
504
Microsoft SQL Server 2000, Новейшие технологии
Типичная БД объемом Гб должна быть конвертирована примерно за часов, объемом 10 Гб — и того меньше. ИЕ! Все эти характеристики зависят от конкретного оборудова ния и структуры данных. Указанные цифры можно использовать толь ко в качестве ориентира. Процесс перевода, или Upgrade Wizard как он есть Итак, обвязавшись покрепче веревкой, Вы решились на обновление имеющихся БД в формат 7.0 и запустили программу Upgrade.exe из каталога сервер не участвовал в репликации, то исходный (версии 6.x) и целевой (версии 7.0) серверы могут располагаться на разных ком пьютерах или на одном и том же. Если сервер в репли кации, допускается только второй вариант: обе версии SQL Server на одной машине. Дополнительная страховка Мастер создает только те идентификаторы пользователей, для кото рых исходная БД назначена по умолчанию. Если в одной из баз, не включенных в список для перевода, имеется, скажем, пользователь — владелец таблицы в переносимой БД, а его база, выбираемая по умолчанию, не входит в список конвертируемых, у Вас возникнут так как объект не может быть создан. Допустим, Вы собираетесь перенести базы Salary, Account и Invoice. Пользователь OldMan по умолчанию владеет базой MyOldDatabase, но при этом он успел создать объекты в БД Invoice. Учетная запись этого пользователя не будет создана, и все объекты в БД Invoice, владельцем которых он является, не могут быть созданы. Мастер, помогающий выполнить перевод, в первую очередь хочет знать объем предстоящей работы (рис. Если Вас интересует только структура базы и приписанные к ней пользователи, обратитесь к утилите командной строки Scptxfr.exe — ее можно найти в каталоге Mssql7\upgrade\. Основные параметры утилиты: SCPTXFR /s <имя сервера> /d БД> /Р <пароль> /F нужно создаваемый сценарий> /f приводит к созданию одного большого
куда этого ключа
www.books-shop.com
Приложение
Рис.
505
Укажите, что Вы хотите сделать.
Если задан ключ /F, программа создает в указанном каталоге мно жество файлов с кодом для создания таблиц, пользователей, правил и других объектов БД. Утилите все равно, с какой версией SQL Server работать, так что Вы можете использовать ее как с версией 6.x, так и с 7.0. Она подключается к серверу под именем SA. Полученный сцена рий можно выполнить на сервере для создания схемы БД. Если же Вам понравилось эксплуатировать мастер, то в диалоговом окне (рис. укажите способ перекачки данных: по прямому кана лу — переключатель Named Pipe import/export) [Имено ванный канал (одновременный или через проме жуточный ленточный накопитель — переключатель Таре (requires an NT tape driver to be installed) [Лента (должен быть установлен драйвер ленточного Завершив перекачку, мастер может прове рить созданную БД. По умолчанию выбирается флажок Validate suc cessful object data transfer (Проверить успешный перенос данных) — это чисто количественная проверка переноса: 15 000 записей исход ного сервера перенесены в 15 000 записей целевого. Более тщатель ная проверка задается флажком Exhaustive data integrity verification (Выполнить исчерпывающую верификацию целостности данных) — будет произведено побайтовое сравнение исходных и созданных дан ных, что должно минимум вдвое удлинить о чем Вас честно предупредят.
По щелчку кнопки Next мастер предложит указать имена серве ров, участвующих в процессе, и пароль системного администратора. Для обоих серверов можно задать дополнительные параметры коман дной номера флагов трассировки (параметр Т <номер фла га>) или иные параметры исполняемого файла Если имя сервера и пароли указаны верно, появляется окно мас тера со списком БД, которые могут быть обновлены (рис. А12).
Рис. А12. Вы можете конвертировать только пользовательские и Model.
По умолчанию в правом списке перечислены все пользовательс кие БД, зарегистрированные на сервере, и Model. Если хотите обно вить только некоторые, перенесите остальные в левый список, щелк нув имя БД и кнопку Exclude (Исключить). Щелчок кнопки Next открывает следующее окно, где можно со гласиться с конфигурацией, принимаемой по умолчанию, использо вать БД, ранее созданные в SQL Server 7.0, или указать сценарий, при меняемый при переводе. Сценарий позволяет создать БД и их объе мы, используемые при переводе. Прежде чем перейти в это окно, мастер анализирует схему размещения файлов, составляющих устрой ства БД SQL Server 6.x, и делает предположения, скорректировать ко торые можно, щелкнув кнопку Edit. При этом открывается дополни тельное окно (рис. А13):
www.books-shop.com
Приложение 1
Рис. А13.
507
Вы попрежнему контролируете ситуацию.
В этом окне приводится перечень выбранных Вами БД и парамет ры файлов, куда эти базы предполагается поместить. Кнопка vanced\Simple позволяет выбрать режим подробного или упрошенно го вывода информации. Щелчок кнопки Advanced открывает допол нительную панель диалогового окна, отображающую не только путь, но и начальный размер, дискретность приращения размеров, допус тимость автоматического роста файла. Щелкнув индивидуальный файл в верхней правой панели, можно откорректировать выбранные мастером значения. Скорее всего у Вас появились вопросы по прин ципам хранения БД в новой версии SQL Server. Подробный разговор об этом мы пока отложим — скажу лишь, что теперь файлы с БД SQL Server могут автоматически расти и не имеют ничего общего с уст ройствами версии 6.x. Отредактировав предложенное мастером или убедившись, что его предложения Вас устраивают, Вы соглашаетесь с ним, щелкнув кноп ку Accept, и возвращаетесь в предыдущее окно, где щелкаете кнопку Next и идете дальше. Вы получаете право задать параметры сервера: приведение к стандарту ANSI, использование величин NULL и ка вычек. Здесь же Вы указываете, перенести ли на новый сервер кон фигурацию старого.
www.books-shop.com
508
Microsoft SQL Server 2000. Новейшие технологии
Если Вы не переносите данные через промежуточное хранилище, то на этом подготовка кончается. Вам предлагается еще раз взглянуть на параметры, которыми мастер будет руководствоваться при пере носе (рис.
Рис. А14.
Следующий шаг начнет процесс обновления.
Щелкнув кнопку Finish, Вы ведете наблюдение за процессом. Мо жете выбрать режим, когда все задачи, запланированные мастером, будут исполняться без Вашего участия, или режим, при котором мас тер будет требовать подтверждения на исполнение каждой задачи. Для этого предназначена кнопка Pause between steps (Приостанавливать выполнение между задачами) (рис. Если мастер не в силах разрешить сам проблемы, возникшие при переводе, появляется окно со списком файлов, где хранится описа ние проблемы, — можете попробовать еще раз выполнить задачу. Закончив обновление, загляните в каталог где най дете каталог с именем, состоящим из имени компьютера, даты и вре мени выполнения работы — чтото вроде В нем мастер поместит служебные файлы, созданные при обновле нии. Вы сможете проанализировать их на досуге для более близкого знакомства с процессом переноса БД из одной версии SQL Server в другую.
www.books-shop.com
1
Рис. А15.
509
Вы можете приостановить процесс.
Если вы используете промежуточную копию на ленту, то един ственным отличием будет появление дополнительного экрана масте ра (рис. А16).
Рис. А16. Помимо диска, Вы можете использовать ленточный накопитель.
www.books-shop.com
Microsoft SQL Server 2000,
510
Обратите внимание на флажок Backup 6.x devices before exporting data (Создать копию устройств 6.x перед экспортом данных). Два свя занных с ним переключателя позволяют скопировать файлы БД пре дыдущих версий на ленту или сетевой диск. Первый — всего лишь предупреждение, его выбор не создает фактической копии. Вы уви дите предупреждение (рис. А17). Создавать копию придется Вам.
Puc. файлов
7.
Перерыв в процессе переноса позволяет создать копию
Немного подробнее о процессе перевода А зачем, собственно, нужен процесс конвертирования? Почему нельзя просто восстановить на новом сервере данные из копии или средства ми Transfer manager перенести базы данных их 6.x в 7.0? Давайте разберемся. В версии 7.0 иной формат хранения данных. В отличие от версии 6.x, хранящей данные в так называемых «устрой ствах» (device), «семерка» использует концепцию «файл» или «группа файлов». Внутренняя структура файлов основана на использовании страниц размером 8 Кб. В силу отличий форматов хранения перевод неизбежен, но этот процесс должен быть однократным. Это значит, что в обозримом будущем изменение формата хранения не планиру ется. Для облегчения перевода была создана специальная утилита, которая берет на себя практически всю головную боль по переводу
www.books-shop.com
Приложение I данных и созданию новых структур хранения. Подчеркну: процесс перевода прост, надежен и предсказуем. Для переноса используются OLE dB, COM и другие современные методы работы с данными. Кроме того, процесс организован так, что бы администратор или пользователь мог повторно выполнить отдель ные этапы, корректировать свои действия и пр. Для переноса НЕ ис пользуется ВСР или Transfer Manager. При работе с Upgrade Wizard от пользователя не требуется особенных усилий: у мастера всего око ло 5 экранов. Сразу по завершении перевода Ваши БД готовы к рабо те, при этом они используют все преимущества, предоставляемые новой версией SQL Server. Желающие могут применить «классический» подход со сценария ми и ВСР для переноса данных, но скорее всего результатом такого эксперимента будет осознание, что этого делать не нужно. Благодаря изменению формата хранения администратор больше не столкнется с проблемами, вызванными «устройствами» и их рас ширениями (segment). Значительно переработана и подсистема вво давывода, а данные хранятся на страницах размером 8 Кб. Стурукту ра хранения «пост 6.x» обеспечивает качественный скачок и с точки зрения оптимальности хранения. Почти наверняка при переводе БД в новый формат физический размер файлов на диске уменьшится. Новый формат хранения также поддерживает новую функциональ ность, появившуюся в компоненте Relational engine. Он отвечает за работу сервера с хранимыми процедурами, триггерами и т. п. При этом версия 7.0 сохраняет полную совместимость с предыдущими вер сиями SQL Server с точки зрения кода на Transact SQL, наборов объектов в составе БД и типов данных. Среди параметров сервера предусмотрен даже «режим совместимости» (compatibility mode) для индивидуальных БД. Немного подробнее о причинах перехода на новый формат хране ния. Большинство решений было продиктовано стремлением повы сить масштабируемость систем, разрабатываемых в SQL Server, и уп ростить работу с ними. БД хранится в одном или нескольких файлах, объединенных в группы. Файлы могут автоматически расширяться и сжиматься. При задании автоматического расширения файлов дан ных и журнала Вы указываете дискретность роста и его пределы. снимает с администратора значительную часть нагрузки по отслежи ванию текущего состояния файлов и свободного места в них. Концепция файлов и групп файлов обеспечивает гораздо более гиб кую среду с точки зрения оптимального размещения файлов на диско вой подсистеме, будь то RAIDмассив или просто несколько дисков.
www.books-shop.com
512
SQL Server 2000. Новейшие технологии
архитектура хранения играет важную роль и с точки зрения масштабируемости. Это относится и к размеру страницы (8 Кб), и к организации хранения данных типа Text и Image. Эти данные хра нятся в версии 7.0 совершенно иначе, чем раньше. • Некоторая часть данных этого типа хранится на странице с дан ными, что позволяет сразу получать доступ к данным небольшого объема. • Основная часть хранится на страницах, организованных в виде бинарного дерева, что значительно ускоряет поиск и работу с ними. Страницы с «нормальными» данными не пересекаются с данными неструктурированного типа, что также ускоряет работу сервера. • При определении структуры таблицы (команда CREATE TABLE) можно указать файл или группу, в которых будут размещаться не структурированные данные, тем самым разместив их на самостоя тельном диске. Чего в результате добились? Вопервых, БД версии 7.0 хранит ту же информацию, что и БД версии 6.x, только в новом формате. Во вторых, новый формат проще в использовании и администрировании, БД ведет себя более предсказуемо, работу системы легче понять. Сразу после перевода БД получает возможность задействовать все преиму щества, предоставляемые новой архитектурой хранения и функцио нальностью сервера. Системы, построенные вокруг БД нового форма та, лучше масштабируются, обеспечивают более высокую производи тельность и проще в использовании. Перевод выполняется мастером. В самом начале он анализирует то, с чем ему придется иметь дело, затем переносит идентификаторы пользователя (Login) и системную конфигурацию (определяемую После этого производится экспорт объектов посред ством создания сценариев, описывающих все объекты БД. Специаль ная утилита (Scriptin.exe) обеспечивает высокую скорость исполне ния сценариев на приемном сервере. После создания объектов мас тер переносит собственно данные. Есть два способа перемещения данных: по прямому каналу «direct pipeline» и через ленточный накопитель, используемый как промежу точное хранилище. В первом случае источник (SQL Server 6.x) и при емник (SQL Server 7.0) могут располагаться на одном компьютере или на разных машинах. Если на приемнике не хватает места, можно со здать образ данных на выполнить резервное копирование всех данных сервера версии 6.x и затем удалить файлы, чтобы освободить место. Последний шаг — перевод и инициализация MSDB. Необхо
www.books-shop.com
этого шага обусловлена значительными изменениями, вне сенными в MSDB в версии 7.0. Мы еще об этом поговорим, пока же достаточно сказать, что основные изменения связаны со значитель ной переработкой подсистем репликации и управлениями заданий. Где бы ни располагались серверы: на одном компьютере или на разных — только один из них активен в любой момент времени. Вто рой вариант позволяет использовать прямой канал или ленту для пе ремещения данных. Если исходный и целевой серверы находятся в разных доменах, между доменами должны существовать доверитель ные отношения. Непосредственному переводу поддаются БД, рабо тающие под управлением SQL Server версий 6.0 и 6.5. Базы, создан ные для SQL Server надо сначала перевести под версию 6.5. Это связано с практически полным отсутствием поддержки ANSI, огра ничений в этой версии и с тем, что 4.21 официально не поддержива ется для работы на NT 4.O. Для начала перевода необходимо настроить процесс: что и как будет перенесено и т. д. Мастер позволяет перенести только объек ты или объекты и данные. Дополнительно можно указать, насколь ко тщательно будет проверяться качество переноса. По умолчанию проверяются чисто количественные параметры, например, число записей в таблице. Эта проверка осуществляется компонентом Dbcheck.exe. Дополнительно можно заказать «исчерпывающую про верку данных», которая подразумевает проверку CRC для переноси мых данных. При этом проверяются все данные во всех полях. По добная проверка, конечно, способна минимум вдвое замедлить пере нос данных. Следующий этап — определение имен серверов, в процессе, и пароля системного администратора, под именем которо го мастер подключится к серверу. Дополнительно можно указать па раметры, с которыми будет запускаться каждый сервер. После подключения к серверу мастер способен определить на нем список БД. Перечень баз, доступных для перевода, выводится в спис ке, который не включает Master, MSDB и Pubs. Первые две БД не включены потому, что они либо будут созданы при установке новой версии сервера (Master), либо автоматически переведены на после днем этапе процесса (MSDB). Pubs нет смысла переводить в силу ее незначительности. Однако из системных баз может быть переведена Model — это позволит сохранить все параметры, заданные для серве ра предыдущей версии. Настоятельно рекомендуется переводить все БД за раз, хотя про цесс можно разбить на несколько этапов. Перенос всех БД сервера за
www.books-shop.com
Microsoft SQL Server 2000, Новейшие технологии один прием может быть необходим, если имеются связи между объек тами БД (например, хранимая процедура в базе А ссылается на таб лицу в базе Б). После выбора БД предлагается определить принцип размещения файлов баз на целевом сервере. По умолчанию мастер предлагает для каждого индивидуального устройства, на котором расположены БД версии 6.x, создать самостоятельный файл. При этом администратор может изменить рекомендуемые параметры. Один из последних эле ментов настройки — определение условий работы с величинами NULL, кавычками и т. п. Получив все ответы, мастер выводит список с параметрами про цесса для окончательного подтверждения пользователя, после чего начинается перевод. Предварительная подготовка подразумевает сбор информации: тип среды переноса, требования к дисковому пространству, сообра жения относительно группирования файлов БД и параметров конвер тирования. Мастер определяет реально занятое данными простран ство, состав файлов и дает соответствующие рекомендации, которые можно принять или изменить. При определении числа файлов, необ ходимых для размещения БД, мастер исходит из соображений «одно устройство — один файл». Особо отмечу, что для операции перевода мастер создает два до полнительных файла (кроме созданных для Tempdb по умолчанию) для размещения дополнительной информации в Tempdb: для данных и для журнала. Оба файла получают возможность автоматического роста. По окончании переноса эти файлы удаляются, так как мастер не может определить реальные потребности приложения в части ис пользования Tempdb, и окончательная настройка размеров, атрибу тов и размещения Tempdb остается на совести администратора. Далее мастер проверяет соответствие порядка сортировки и набо ра символов для целевого и исходного серверов. Хотя эти параметры на двух серверах не обязательно должны совпадать, мастер будет по стоянно предупреждать о возможных проблемах, и этого лучше избе гать, кроме случаев, когда это действительно оправданно. Затем мас тер начинает работу с конфигурацией целевого сервера, зарегистри рованными идентификаторами пользователей и параметрами модели Мастер активно использует сценарии, описывающие объекты БД. При переносе объектов создаются базы и файлы для их размещения, затем переносятся объекты.
www.books-shop.com
Приложение 1 Поскольку в версии 7.0 у некластерного индекса указатели связа ны с ключами кластерного индекса, а не со страницей данных, клас терный индекс должен быть создан до того, как будут созданы некла стерные. С помощью специальной утилиты Scptxfr.exe мастер создает сце нарии, исполняемые утилитой Execstmt.exe, которая создает описан ные объекты на целевом сервере. При импорте данных исходный сер вер не работает, используется OLE dBкомпонент, напрямую считы вающий файлы данных. Это позволяет избежать накладных расходов, связанных с применением процессора данных сервера, и гарантирует максимально высокую пропускную способность. Перевод зашифрованного кода хранимых процедур выполняет хра нимая процедура, принимающая зашифрованный набор данных в ка честве параметра, и в результате открытый код нигде не появляется. То же самое происходит с паролями пользователей. execute ftaddlogin ' null update sysxlogins set password=convert(varbinary(256), ) ) как видите, пароль переносится в зашифрованном виде where and srvid is null GO Одна из важнейших особенностей перевода — возможность оста новки, приостановки и повторного исполнения любого этапа. Систе ма всегда знает, в какой точке она находится, что позволяет аккуратно выполнить все, что хочет пользователь. Управлять процессом можно посредством собственных сценариев, модификации созданных масте ром сценариев и создания собственных объектов нужной структуры. Все операции, выполняемые при переносе, аккуратно ются для последующего анализа (если это надо). Все компоненты, отвечающие за перевод БД, создание сценариев, анализ исходных БД и т. д., представлены как исполняемые файлы, которые могут быть вызваны из командной строки. Это позволяет не только выполнить некоторые операции «вручную», но и использовать эти утилиты са мостоятельно в дальнейшем. При наличии нескольких процессоров перенос данных только выиграет, так как это позволит открыть несколько параллельных ка налов для передачи информации. Для переноса данных используется OLE DB RowSet provider, вы полняющий прямое чтение информации из файлов данных 6.x и пере дачу на целевой сервер. На целевом сервере, который в этот момент
активен (очевидно, что нужно процесс, управлять выделением результат формируется в виде команды IN SERT FROM SELECT, которая и размещает данные в таблице. При переносе журналируется только выделение страниц данных, что зна чительно сокращает нагрузку на журнал транзакций. Каждая таблица переносится в рамках индивидуальной транзакции. Это значит, что откат или повтор можно выполнить на уровне индивидуальной табли цы, а кроме того, промежуточный набор записей, из которого данные попадают в таблицу целевого сервера, по размеру равен или чуть боль ше самой таблицы. Поскольку этот набор располагается в Tempdb, на диске должно хватать места для размещения самой большой име ющихся таблиц в Tempdb. По окончании импорта данных для таблиц создаются соответству ющие индексы. При перезапуске на этапе переноса данных минимальный уровень, на котором это возможно, — таблица. Таблицы с данными не импорти руются, так как мастер не несет ответственности за возможные конф ликты по правилам работы (уникальность ключа, правила IF NOT EXISTS (SELECT * FROM sysobjects WHERE id = AND OBJECTPROPERTY(id, = 1) ) Как видите, мастер проверяет наличие таблицы, ) но не будет уничтожать ее, если таблица уже создана BEGIN CREATE TABLE END 4851, Level 0, State 1, Server Procedure , Line 1 Data import: Table already has data. Skipping to next table. 13:36:34 Это дает Вам возможность управлять процессом с точки зрения состава переносимых таблиц. Если таблица пуста, данные будут пе ренесены. А если надо «на лету» поменять структуру таблицы, Вы можете на целевом сервере создать таблицу с нужным набором по лей, но только пустую. Новая структура должна иметь столько же полей, что и исходная таблица, но сами поля могут быть иного типа или другой размерности. При этом следует учитывать, что новый тип поля должен позволять неявную конвертацию старых данных, иначе Вы получите сообщение об Msg
Level 16, State 4, Server NT_DIMAA, Procedure , Line 1
www.books-shop.com
1 SQL Server Driver][SQL Server]Insert Error: Column or number of supplied values does not match table definition. 4849, Level 16, State 2, Server Procedure , Line 1 [Microsoft][ODBC SQL Server Driver][SQL not import table Error 203. Изменения в реализации подсистемы репликации вызвали необ ходимость модификации системных каталогов, особенно MSDB. Со ответственно информация о параметрах репликации и подсистемы исполнения задач (Task) версии 6.5 должна быть модифицирована, чтобы отражать новые принципы работы сервера. Одно из значитель ных изменений в подсистеме автоматического выполнения заданий заключается в том, что задания (Job) версии 7.0 могут включать мно жество шагов и логику перехода между шагами исполнения в зависи мости от того, как развивается процесс. Это не могло не сказаться на структуре MSDB. При переводе БД с серверов, участвующих в процессе реплика ции, первыми должны быть переведены Distribution и Publisher, затем можно переводить все серверыподписчики, и тут порядок перевода не имеет значения. В частности, это связано с тем, что «семерка» не может быть подписчиком сервера 6.x. По окончании перевода мастер проверяет качество переноса. По умолчанию проверяются в основном количественные характеристи ки: число переданных записей, наличие всех объектов. При желании на этапе настройки процесса можно потребовать выполнить более полную (и длительную) проверку. Исчерпывающая проверка подра зумевает сравнение CRC исходных и полученных данных. Выбирая поэтапный перевод БД, администратор должен учесть следующее: • переведенная база данных должна использоваться только на сер вере версии 7.0; • если в пропущенных БД есть объекты, связанные зависимостями с объектами в переносимых БД, объекты в переносимых БД не будут созданы, так как нарушена целостность ссылок; мастер не пытается разрешать ссылки за пределами множества БД, назна ченных для перевода; • этот режим в основном предназначен для Вы можете отказаться от переноса системной конфигурации (sp_ параметров SQL Executive (MSDB) и репликации. Тогда все
www.books-shop.com
518
Microsoft SQL Server 2000,
технологии
эти параметры можно назначить «вручную» или принять значения умолчания. по сравнению с версией 6.x число параметров сократилось: многие (число блокировок, открываемых объектов, использование памяти) задаются динамически. Администратор может подключить собственные сценарии для создания объектов, выполнения настрой ки и т. д., однако подобное решение скорее пригодно для разреше ния нежели как основное средство работы.
www.books-shop.com
Приложение 2
Особенности совместимости с SQL Server 6.x В описано поведения сервера в зависимости от установлен ного уровня совместимости. Единственное отличие уровня совмес тимости 80 от уровня 70 в нескольких зарезервированных словах. sp
60 или 65
sp_dbcmptlevel 70/80 (используется по умолчанию)
При выполнении команды SELECT наличие предложения GROUP BY, если нет предложения ORDER BY, приводит к сортировке записей в соответствии с перечнем полей
Присутствие в команде SELECT предложения GROUP BY не приво дит к сортировке записей выборки. Для получения отсортированного набора используйте предложение ORDER BY.
Если имя поля используется с неверным псевдонимом (Alias) таблицы в предложении SET команды UPDATE, это не вызывает ошибки
Неверные псевдонимы не принимаются.
Поля с типом данных bit, созда ваемые без конкретного указания NULL или NOT NULL в команде CREATE TABLE или ALTER TABLE, создаются с атрибутом NOT NULL.
Поведение полей типа bit при отсутствии конкретного указания или NOT NULL определяет ся настройкой SET ANSI_NULL_ или SET ANSI_NULL_ DFLT_OFF сессии, или настройкой на уровне БД SET ANSI NULL DEFAULT.
В команде ALTER TABLE нельзя использовать предложение ALTER COLUMN.
Предложение ALTER COLUMN допускается использовать в команде ALTER TABLE.
www.books-shop.com
520
Microsoft SQL
2000, Новейшие технологии (продолжение)
sp_dbcmptlevel 60 или 65
70/80 (используется по умолчанию)
При нового триггера любой существующий триггер данного типа замещается. Для создания множественных триггеров используется предложение WITH в команде CREATE TRIGGER
При создании новый триггер с уникальным именем в пределах БД добавляется к уже подразумевается использование предложения WITH APPEND.
При синтаксическом анализе или компиляции набора команд (Batch) или процедуры, содержащих ссыл ку на несуществующий объект, возвращается предупреждение. При исполнении возвращается сообщение об ошибке. Этот запрос исполняется, игно рируя таблицу Y и вставляя результат исполнения команды SELECT в таблицу X: INSERT X SELECT
Если набор команд или процедура ссылаются на несуществующий объект, предупреждение при компиляции или синтаксическом разборе не выдается. При испол нении выдается сообщение об ошибке. Сервер выдает сообщение о синтаксической ошибке.
По умолчанию пустая строка интерпретируется как одиночный пробел в командах INSERT или присвоения, обращающихся к данным типа varchar. При сло жении строковых величин для данных типа varchar, char или text пустая строка интерпрети руется как одиночный пробел. Некоторые функции или выра жения возвращают NULL при следующих условиях: возвращает 1 ("пустая строка интерпретируется как пробел) возвращает 2 интерпретируется как единственный пробел Unicode)
Если уровень совместимости установлен на 7.0, Microsoft SQL Server интерпретирует пустую строку именно как пустую строку.
Эти функции и выражения Transact SQL возвращают пустую строку при следующих условиях: возвращает О
возвращает О
www.books-shop.com
Приложение 2
521
m) возвращает null, когда m = О
(продолжение) m) возвращает пустую строку, когда m = О
m) возвращает null, когда m > длины строки m) возвращает null, когда m = 0 m) null, когда m = 0 m) возвращает когда m = 0
m) возвращает пустую строку, когда m = О m) возвращает пустую строку, когда m = О m) возвращает пустую строку, когда m > длины строки m) возвращает пустую строку, когда m = О
') возвращает null
') возвращает пустую строку
') возвращает null
') возвращает пустую строку
SPACE(O) возвращает NULL
SPACE(O) возвращает пустую строку
n) возвращает NULL, когда m < длины строки или когда n = О
m, n) возвращает пустую строку, когда m < длины строки или когда n = 0.
m, n) возвращает NULL, когда m > длины строки или n = 0.
m, n) возвращает пустую когда m > длины строки или n = 0.
Функции CHARINDEX и PATINDEX возвращают null, только если и шаблон и выражение — NULL
Функции CHARINDEX и PATINDEX возвращают null, когда хотя бы один из входных параметров — NULL.
При попытке обращения к полям типа text или image в таблицах inserted и deleted возвращается NULL
Обращения к полям типа text или image в таблицах inserted и deleted не допускаются
www.books-shop.com
522
Microsoft SQL Server 2000, Новейшие технологии
ПРИМЕЧАНИЕ Изменение уровня совместимости не влияет на основ ную функциональность сервера. Так, блокировки на уровне записи никуда не деваются, неизменными остаются и системные таблицы. Версия 8.0 не превращается в версию 6.x — просто Ваш код потребует меньше модификаций, и Вы получаете более плавную миграцию ра нее разработанных приложений. Установка уровня совместимости влияет на то, какие слова счита ются зарезервированными. Ниже приведен перечень слов, являющих ся зарезервированными в зависимости от установленного уровня со вместимости. Уровень совместимости
Зарезервированные слова
80
COLLATE, FUNCTION, OPENXML
70
BACKUP, CONTAINS, DENY, PERCENT, RESTORE, ROWGUIDCOL, TOP
Системные хранимые процедуры, Server Profiler версий 7.0 и 8.0 Процедуры версии 7.0
работу SQL
Соответствующие им процедуры Server 2000
sp_trace_create
www.books-shop.com
Приложение 2
523 (продолжение) sp_trace_setevent
xp_trace_destroyqueue
sp_trace_setstatus
sp_trace_setstatus
www.books-shop.com
524
SQL Server 2000, Новейшие технологии (продолжение)
Процедуры версии 7.0
Соответствующие им процедуры SQL Server 2000
xp xp trace xp xp xp xp xp trace
www.books-shop.com
Приложение 3
SQL Server 2000 Сервер поставляется в нескольких редакциях, позволяющих строить приложения для широкого спекта компьютеров: от карманных уст ройств до многопроцессорных серверов уровня корпорации. SQL Server 2000 корпоративная редакция (Enterprise Edition) Используется для развертывания рабочих приложений. Поддержива ет всю функциональность, доступную для SQL Server 2000, обеспечи вает масштабирпование, необходимое для поддержки самых крупных Webузлов, систем OLTP и хранилищ данных масштаба предприятия. SQL Server 2000 стандартная (Standard Edition) Используется в качестве сервера баз данных для небольших рабочих групп или отделов предприятия. SQL Server 2000 персональная редакция (Personal Edition) Используется мобильными которые часто находят ся в отрыве от корпоративной сети, но используют приложения, тре бующие присутствия хранилища на базе SQL Server. Также использу ется самостоятельными приложениями, требующими локального хра нилища на базе SQL Server. SQL Server 2000 редакция для разработчиков (Developer Edition) Используется разработчиками, создающими решения на базе SQL Server 2000. Хотя эта редакция поддерживает всю имеющуюся функ циональность, позволяющую разрабатывать и тестировать приложе ния самого высокого уровня, лицензионные ограничения позволяют использовать эту редакцию только для разработки и тестирования, но не для развертывания приложений.
SQL Server 2000 для Windows CE (Windows CE Edition) Эта редакция используется для хранения данных на устройствах под управлением Windows CE. Способна осуществлять репликацию с лю бой другой редакцией SQL Server 2000 для поддержания актуальных данных устройства на базе Windows CE. SQL Server 2000 для тестирования (Enterprise Evaluation Edition) Полноценная версия, доступная в свободном распространении. Пред назначена только для целей тестирования, прекращает работу по ис течении 120 дней с момента установки. Desktop Engine Помимо перечисленных редакций, Microsoft поставляеткомпонент SQL Server 2000 Desktop Engine, предназначенный для встраивания в приложения третьих фирм, нуждающихся в распространяемой копии сервера. Функциональность этого компонента сходна с функциональ ностью остальных редакций сервера, но в него заложено ограниче ние на размер базы данных — 2 Гб. И персональная редакция, и Desktop Engine имеют встроенное ограничение на число одновременно работающих пользователей. Когда система обнаруживает, что она исполняет более 5 пакетных заданий одновременно, ее производительность начинает прогрессив но падать. Ситема не отвергает шестое и последующие задания — она просто делает их жизнь невыносимой. Для анализа частоты активи зации ограничителя даже придумана специальная команда DBCC Миграция с одной редакции на другую Personal Edition на Enterprise Edition или на Standard Edition. Standard Edition на Enterprise Edition. Функциональные особенности редакций сервера Материализованные представления, для которых созданы кластерный индекс, поддерживают команду CREATE STATISTICS. Если пред ставление напрямую указано в запросе и в тексте запроса использу ется указание оптимизатору будет использована стати стика самого представления. В противном случае используется ста тистика базовых таблиц, которая учитывается при построении плана
www.books-shop.com
Приложение 3
527
до того как туда попадет анализ Подобная «подмена» статистики поддерживается только в серверах корпоративной редак ции и редакции для разработчиков (Enterprise и Только корпоративная редакция и редакция для разработчиков поддерживают операции INSERT, UPDATE и DELETE на распреде ленных представлениях. Отличия процессора данных для различных редакций SQL Server 2000 Для разра Насто льная
Для Тестовая Windows СЕ
Да
Да
Да
Нет
Да
Нет
Нет
Да
Нет
Нет
Да .
Да
Нет
Нет
Да
Нет
Нет
Да
Да
Нет
Нет
Да
Нет
Нет
Да
Да
Нет
Нет
Да
Нет
Нет
Да
Да
Нет
Нет
Да
Нет
Нет
Да
Да
Нет
Нет
Да
Нет
Нет
Да
Да Индексиро ванные представления Распределенные Да представления
Нет
Нет
Да
Нет
Нет
Да
Нет
Нет
Да
Нет
Нет
Да
Функциональность
Корпора Стандарт тивная ная
Множественные экземпляры Кластеризация (до 4 узлов) Администри рование клас тера средствами SQL Server Enterprise Manager Порти журнала транзакций Параллельное исполнение DBCC Параллельное создание индексов (CREATE INDEX) Расширенные возможности опережающего чтения и сканирования
Да
Да
Да
www.books-shop.com
Microsoft SQL
528
2000, Новейшие технологии (продолжение)
Функциональность Корпора+ тивная
Персо+ Для разра+ Насто+ Для Тестовая льная Windows СЕ
Поддержка System Area Network SAN
Да
Нет
Нет
Да
Нет
Нет
Да
Графические утилиты адми нистратора и
Да
Да
Да
Да
Нет
Нет
Да
Да
Нет
Нет
Нет
Нет
Нет
Нет
Да
Да
Да Да (кроме Win dows 98)
Нет
Нет
Да
мастера Графические средства настройки языка Полнотекс товый поиск
Функциональность репликации, поддерживаемая различными редакциями SQL Server 2000 Функциональность Корпора+ Стандарт+ Персо+ Для разра+ Насто+ Для Тестовая тивная ная нальная льная Windows СЕ Репликация моментальных снимков
Да
Да
Да
Да
Да
транзакций
Да
Да
Да
Нет
Да
Только Да для под писчика
Только Нет
Да
Да
Да
Да
Да
подпис чика
сведением
Только Да
для ано нимных подпис чиков
Подписчики с немедленным обновлением
Да
Да
Да
Да
Да
Нет
Да
www.books-shop.com
Приложение 3
529 (продолжение)
Подписчики с отложенным обновлением
Да
Да
Да
Да
Да
Нет
Да
Функциональность Data Transformation Services, поддерживаемая различными редакциями SQL Server 2000 Функциональность
Корпора+ Стандарт+ Персо+ Для разра+ Насто+ тивная ная нальная льная
Для Тестовая Windows СЕ
Data mation Services
Да
Да
Да
Да
Только Нет для развер тывания
Да
Максимальное число процессоров, поддерживаемое редакциями SQL Server 2000
ОС
Корпора+ Стандарт+ Персо+ Для разра+ Насто+ Для Тестовая тивная ная нальная ботчиков льная Windows СЕ
Microsoft Win dows 2000 DataCenter
32
4
2
32
2
He поддер живается
32
Windows 2000 Advanced Server
8
4
2
8
2
He
8
Windows 2000 Server
4
Windows 2000 Professional
N/A
Microsoft Win dows NT 4.0 Server, Enter prise Edition
живается 2
He поддер живается
4
2
He поддер живается
2
8
2
He поддер живается
Windows NT 4.0 Server
4
2
He поддер живается
4
Windows NT 4.0 Workstation
He под He под 2 держи держи вается вается
2
He
2
N/A
2
2
2
www.books-shop.com
Microsoft SQL Server 2000,
530
технологии (продолжение)
Стандарт+ Персо+
ОС
1
Для разра+ Насто+ Для Тестовая льная Windows СЕ
Microsoft Windows 98
He под He под держи держи вается вается
Microsoft Windows
He под He под He под He под держи держи держи держи вается вается вается вается
СЕ
Исполь зуйте Desktop Engine
1
He He под поддер держи жива вается ется
He держи вается
He под держи вается
Масксимальный объем памяти, адресуемый различными редакциями SQL Server 2000
ОС
Корпора+ Стандарт+ Персо+ Для разра+ Насто+ Для Тестовая тивная ная нальная ботчиков льная Windows СЕ
Windows 2000 DataCenter
64 Гб
2 Гб
2 Гб
64 Гб
2Гб
Не под держи вается
Windows 2000 Advanced Server
8 Гб
2
2
8 Гб
2 Гб
Не 8 Гб поддер живается
Windows 2000 Server
4 Гб
2 Гб
2
4 Гб
2 Гб
Не 4 Гб поддер живается
Windows 2000 Professional
Не под Не под держи держи вается вается
2 Гб
2 Гб
2 Гб
Не 2 Гб поддер живается
64 Гб
Windows NT 4.0 3 Server, Enterprise Edition
2 Гб
2 Гб
3 Гб
2 Гб
Не 3 Гб поддер живается
Windows NT 4.0 Server
2 Гб
2
2 Гб
2 Гб
2 Гб
Не 2 Гб поддер живается
Windows NT 4.0 Workstation
He под Не под держи держи вается вается
2 Гб
2 Гб
2 Гб
Не 2 Гб поддер живается
www.books-shop.com
Приложение 4
Где
найти
информацию
На русском языке Переписка по вопросам использования Microsoft SQL Server и других СУБД: www.sql.ru На английском языке Большое количество полезной литературы по Microsoft SQL Server (доступной в электронном виде): http://www.itknowledge.com/reference/dir.databases.html
Основной адрес по Microsoft SQL Server от производителя продукта http://www.microsoft.com/sql/ Семинары Microsoft http://www.microsoft.com/seminar/1033/Index/BrowseTitle.htm Страница технической поддержки Microsoft для SQL Server http://support.microsoft.com/support/SQL Центр разработчиков MSDN для SQL Server http://msdn.microsoft.com/sqlserver/ Microsoft TechNet http://www.microsoft.com/technet/sql/ Microsoft http://terraserver.microsoft.com/default.asp
www.books-shop.com
532
Microsoft SQL Server 2000. Новейшие технологии
Журнал SQL Server Magazine (статьи в электронном виде) http://www.sqlmag.com Издательство Pinnacle Publishing (статьи в электронном виде, исходный код программ)
Статьи, подсказки, книги, группы пользователей http://www.sqlservercentral.com Глобальная группа пользователей SQL Server http://www.sswug.org Новости о SQL Server http://www.sqlwire.com Сайт Майкла Хотека (Michael R. Hotek) содержит технические статьи, код на TSQL книги о SQL Server и обзоры продуктов http://www.mssqlserver.com Примеры кода http://www.dbmaint.com Примеры кода, ответы на вопросы, обсуждение программных продуктов http://www.sqlsecurity.com/ Ответы на вопросы http://www.mssqlserver.com/faq http://www.swynk.com/faq/sql/sqlserverfaq.asp http://www.sqlserver.co.uk Совет по обработке транзакций (Transaction Processing Performance Council), знаменит стандартными тестами на производительность СУБД http://www.tpc.org Сайт, вопросам оптимизации SQL Server http://www.sqlserverperformance.com/
www.books-shop.com
Словарь терминов
ActiveX Data Objects (ADO) — удоб ный позволяющий обращать ся к OLE из таких языков про граммирования, как Visual Basic, Visual FoxPro, Visual Basic Ap plications и Visual Basic Scripting Edition (в том числе Active Server Pages).
В Bulk copy — общий термин, ис пользуемый для описания опера ций массивного копирования дан ных в/из БД SQL Server. Обычно копирование реализует команда BULK INSERT. Bulk Copy Program (BCP) ути лита командной строки, постав ляемая в комплекте SQL Server для загрузки информации из тек стовых файлов в БД. Bulk load — процедура загрузки большого количества данных. Это может быть реализовано коман дой BULK INSERT или утилиты ВСР. Cartesian product — результат со единения, имеющего ограни чивающего предложения WHERE. В результате подоб ного запроса создается набор за писей, число которых равно про
изведению числа записей таблиц, участвующих в запросе. Обычно декартово произведение является ошибкой программирования. Cascading delete — операция уда ления записей, на которые указы вает первичный ключ родительс кой Cascading update — операция мо дификации первичных ключей за писей дочерней таблицы при мо дификации значения первичного ключа родительской таблицы. Checkpoint — операция записи модифицированных страниц дан ных на диск. Clustered index — кластерный ин декс. Комбинация индекса и таб лицы в рамках одного объекта БД. Индекс хранится в виде сбаланси рованного дерева, а данные распо ложены на самом уровне (leaf nodes — листья) индекса. Кластер ный индекс обеспечивает физи ческое хранение данных согласно логической структуре индекса. Collation — набор правил, опре деляющих сравнение, сортиров ку и представление данных. Сор тировка символьных данных вы полняется с учетом страны, по рядка сортировки и параметров учета регистра. Columnlevel collation — правило разбора, реализованное на уров
www.books-shop.com
534
Microsoft SQL Server 2000, Новейшие технологии
не индивидуального поля табли цы. Новая функциональность SQL Server 2000, позволяющая в од ной таблице хранить данные, от носящиеся к различным языкам, порядкам сортировки и т. п.
Database consistency checker (DBCC) — встроенная утилита для проверки логической и фи зической целостности базы дан ных, получения сведений о про изводительности и параметрах сервера, управления его некото рыми функциями. Database Owner (Dbo) — член роли database administrator для базы данных (БД). В каждой БД может быть только один DBo, который имеет полные права для данной БД и определяет права доступа и разрешения для остальных пользователей. См. также роль. DENY — команда управления си стемой безопасности, запрещает выполнение действий или доступ к объекту БД для учетного имени и исключает наследование разре шений от роли или группы, к ко торой принадлежит учетное имя. Distributed Partitioned Views — распределенные представления. Эта новая функциональность SQL Server 2000 обеспечивает распре деление больших таблиц по не скольким физическим серверам. Распределенные данные связы ваются вместе посредством со здания представления, использу ющего оператор UNION. DTS — набор графических инст рументов и программируемых
объектов, позволяющих извле кать, преобразовывать и консоли дировать данные из разнородных источников в один или несколь ко однородных или разнородных приемников информации. DTS package ~ пакет DTS — орга низованная коллекция описаний соединений, заданий службы Da ta Transformation Services (DTS), DTSпреобразований и правил организации процесса исполне ния.
Federated Server ~ федеративный сервер — новая функциональ ность SQL Server 2000, позволя ющая распределить БД по не скольким физическим серверам, выступающих как единый логи ческий блок. I Identity — атрибут, позволяющий располагать в определенном поле таблицы уникальное числовое значение, генерируемое систе мой. При добавлении новой за писи в таблицу, поле которой имеет атрибут identity, SQL Server автоматически создает новое значение на основе последнего использованного значения (при каждом добавлении записи про исходит приращение счетчика) и величины приращения, опреде ленной при назначении атрибута. См. также глобально уникаль ный идентификатор. Indexed ~ индексированные представления — новая функци ональность SQL Server 2000, по
www.books-shop.com
Словарь создавать устойчивые индексы на представления, ис пользование которых но ускоряет исполнение запро сов. Instance ~ экземпляр — копия SQL Server, исполняющаяся на ком пьютере. С версии 8.0 SQL Server поддерживает работу множества экземпляров службы на одном физическом сервере. Linked server ~ связанный сервер — определение OLE Dbисточника, используемое распределенными запросами SQL Server 2000. Опре деление связанного сервера вклю чает указание на OLE Dbпровай дер, используемый для доступа к данным, и набор информации, по зволяющий OLE подключиться к источнику дан ных. Таблицы (или их аналоги) связанного сервера могут исполь зоваться для выполнения распре деленных запросов.
N index ~ некластерный индекс — индекс, у которого ло гический порядок хранения от личается от физического поряд ка хранения данных на диске. NULL — неопределенное значе ние; не эквивалентно 0 или пробе лу. Операции сравнения не опре делены по отношению к NULL и всегда возвращают False OLE dB — интерфейс доступа к данным любого формата, для ко
535 торых имеется OLE dBпровай дер. OLE dB consumer — приложение, использующее OLE dB API. OLE ~ OLE dB pro vider — программный компо нент, открывающий OLE dBин терфейс. Каждый OLE dBпро вайдер работает с определенной структурой хранения данных (на пример, базой данных SQL Ser ver, базой данных Access). REVOKE — команда управления системой безопасности. Снимает разрешение с учетного имени (хотя последнее может наследо вать разрешение в силу принад лежности к группе или Roll forward — способность SQL Server восстанавливаться после серьезных сбоев системы (напри мер, носителя), используя ин формацию журнала транзакций для повторного исполнения всех доступных и завершенных тран закций, не отображенных в ос новных таблицах базы данных. Rollback — способность SQL Ser ver устранить результаты неза вершенной или частично завер шенной транзакции после сбоя базы данных или другой систем ной Также способность отменить сделанные изменения по результатам проверки логи ческого условия, определенного в программе. — объект OLE dB, исполь зуемый для хранения результиру ющего набора записей. В зависи мости от параметров, заданных
536 приложением, может вести себя подобно курсору.
SQL Mail — компонент SQL Ser ver, управляемый набором хра нимых процедур и позволяющий серверу отправлять и получать почтовые сообщения. Использу ет встроенный интерфейс управ ления почтовыми приложениями (MAPI). SQL Server Agent — одна из двух основных служб SQL Server, предназначенная для админист рирования подсистемы управле ния заданиями, оповещениями и операторами. Этот компонент контролирует все, что исполняет ся по графику. SQL Server Enterprise Manager — графическое приложение, пред ставляющее собой центральную административную консоль для управления всеми доступными SQL Server так же, как другими серверными приложениями. Ад министративный интерфейс по строен на основе Microsoft Ma nagement Console (MMC), позво ляющей работать с объектами по технологии drag and drop. Enter prise manager открывает доступ ко всем БД и индивидуальным объектам в них, позволяет управ лять подсистемой репликации и заданиями. ММС может служить контейнером для ActiveXком понентов, для дополнительного расширения функциональности консоли администратора. SQL Server Profiler — инструмент SQL Server, позволяет в реальном
SQL
2000, Новейшие технологии
времени отслеживать события на подсистемах сервера. Результаты можно группировать, фильтровать, выводить на экран, в файл или таб лицу. В последних двух случаях порядок событий можно воспро извести на том же или другом сер вере в разных режимах. SQL Server Query Analyzer — ути лита для выполнения произволь ных запросов и хранимых проце дур. Позволяет вывести графи ческий план исполнения запро са. Включает средство анализа и оптимизации запросов. SQL Server Service Manager — графическая утилита, позволяю щая запускать, останавливать и приостанавливать исполнение службы SQL Server и вспомога тельных служб (SQL Server Agent, MS DTC). SQL Distributed Management Fra mework — интегри рованная система объектов, служб и компонентов, использу емых для управления Microsoft SQL Server. Предоставляет дос туп практически к любому аспек ту функционирования сервера из любого инструмента, поддержи вающего OLE Automation. Прак тически все административные функции, исполняемые из адми нистративной консоли (ММС), используют вызовы SQLDMF, преобразуемые в вызовы систем ных хранимых процедур. Второй уровень системы — DMO (distri buted management objects) — пре доставляет объектный интерфейс к основным компонентам SQL Server.
www.books-shop.com
Словарь терминов — новый тип данных, введенный в SQL Server 2000. По зволяет хранить в полях данные любого типа, кроме text, ntext, timestamp и
Unicode — набор букв, цифр и символов, которые SQL Server распознает в полях, содержащих данные типов nvarchar и ntext. Unicode способен хранить 65 000 возможных значений в от личие от обычного набора сим волов, ограниченного 256 значе но для хранения каждый элемент в кодировке Unicode требует вдвое больше места (2 байта). Unicode поддерживает наборы символов большинства языков мира. Unicode collation — правила рабо ты SQL Server с данными в коди ровке Unicode, определяющие порядок сравнения, сортировки и представления Unicodeданных при выполнении запросов к БД. Update statistics — процесс сбора статистики о распределении ключей, необходимой оптимиза тору
автоматическое восстановление ~ automatic recovery — происходит при каждом запуске SQL Server, обеспечивает защиту в случае сбоя системы. При этом для каж дой БД анализируется содержа ние журнала транзакций. Обна ружив в журнале зафиксирован ные, но сброшенные на диск транзакции, сервер выполняет их
53? повторно. Это действие известно под названием roll forward. агент распределения ~ distribution agent — компонент подсистемы репликации, перемещающий транзакции и моментальные снимки из таблиц базы данных Distribution к подписчикам. См. также подписчик. агент сведения ~ merge agent — при репликации сведением пере дает первичный моментальный снимок для синхронизации баз данных подписчика и издателя. Этот же компонент сводит инди видуальные модификации, вы полненные после наложения пер вичного моментального снимка. агент создания моментальных снимков ~ snapshot agent — ком понент подсистемы репликации, создающий файлы — моменталь ные снимки опубликованных таблиц и хранимых процедур. Моментальные снимки хранятся на Агент также хранит сведения о статусе синхронизации подписчиков. агент чтения журнала ~ log reader agent — компонент подсистемы репликации, обеспечивающий перемещение транзакций, отме ченных для репликации из жур нала транзакций базы данных из дателя в БД Distribution. анонимная подписка ~ anonymous subscription — позволяет серверу, известному серверуиздателю только на время действия соеди нения, получить доступ к статьям публикации. Анонимная подпис ка менее накладна, так как сведе
www.books-shop.com
538
Microsoft SQL
ния о подписке не сохраняются на сервереиздателе или сервере дистрибьюторе. См. также дист рибьютор; издатель; статья.
база данных (БД) ~ database — со вокупность данных, таблиц и других объектов, организован ных для обслуживания опреде ленных задач, облегчения поис ка, сортировки и комбинирова ния данных. база данных Distribution — БД промежуточного хранения (store содержит транзак ции, ожидающие передачи под писчикам. В Distribution помеща ются транзакции от агента чтения журнала транзакций (Log Reader Agent) и хранятся там, пока агент распределения не передаст их подписчикам. См. также агент распределения; подписчик. база данных Model — создается при установке SQL Server и ис пользуется как шаблон для БД, создаваемых пользователем. При создании БД SQL Server создает копию Model и меняет ее размер согласно указаниям пользовате ля. Новая база не может быть меньше Model. Model содержит системные таблицы, необходи мые для новой БД. Для создания устойчивых изменений шаблона Model можно модифицировать и добавить объекты, которые будут появляться в каждой новой БД. база данных Tempdb — хранили ще для временных вре менных хранимых процедур и промежуточных таблиц, создава
2000, Новейшие технологии
емых при исполнении запроса. Для использования Tempdb (т. е. создания временных таблиц или исполнения команд, требующих временного хранения промежу точных результатов) специаль ных разрешений не требуется. Временные таблицы размещают ся в Tempdb независимо от того, в контексте какой БД работает пользователь. Бдерево ~ Btree — способ орга низации данных в виде дерева, в котором доступ к любому экзем пляру данных осуществляется за одинаковое количество обраще ний. SQL Server хранит в виде Б деревьев индексы и поля типа text/image. блок страниц ~ extent — часть об ласти хранения, выделяемая при создании такого объекта БД, как таблица или индекс. В SQL Server блок страниц — непрерывная об ласть в 8 страниц. блокировка lock — ограничение на доступ к ресурсу в многополь зовательском окружении. блокировка диапазона ключей ~ key range lock — блокировка диа пазона записей в таблице для предотвращения вставки, изме нения или удаления записей из блокируемого диапазона. блокировка изменения ~ update lock — налагается на ресурс, ко торый может быть изменен; при меняется для избежания «смер тельных захватов» при измене нии данных. блокировка на уровне записи ~ row lock — налагается на одиночную запись.
www.books-shop.com
Словарь терминов блокировка на уровне таблицы ~ table lock — налагается на табли цу целиком, включая все данные и индексы. блокировка намерения ~ intent lock — устанавливается на ресурс при наложении блокировки на ресурс более низкого уровня. Предотв ращает наложение блокировки на ресурс верхнего уровня, когда другие процессы совершают опе рации на более низком. большой бинарный объект ~ binary large (BLOB) — обобщен ный тип, предназначенный для хранения больших объемов не структурированных данных (изоб ражений, текста, мультимедиа данных). В SQL Server реализо ван в виде типов данных text и image.
В владелец объекта ~ object owner —
идентификатор пользователя, обладающего особыми правами на объект БД, обычно владелец объекта. Также называется вла дельцем объекта БД. владелец объекта базы данных ~ database object owner — пользова тель, который создает объект БД (таблицу, индекс, представление, триггер или хранимую временная таблица ~ temporary table — размещается в Tempdb и уничтожается после окончания сессии. Имя временной таблицы всегда начинается с символа # или (для создания локальной или глобальной таблицы соответ ственно). См. также база данных Tempdb.
539
временная хранимая процедура ~ temporary stored procedure — раз мещается в БД Tempdb и унич тожается по завершении сессии. Имя временной хранимой про цедуры всегда начинается с сим вола # или ## (для создания ло кальной или глобальной проце дуры соответственно). См. так же база данных Tempdb. гетерогенные данные ~ heteroge neous data — получаются из сме шанных источников, включая одну или более БД SQL Server. глобально уникальный идентифи катор ~ GUID — уникальная ве личина, в виде байтной строки. Формируется по сложному алгоритму, гарантиру ющему глобальную уникаль ность. Если соответствующий ат рибут назначается полю табли цы, последнее при каждом до бавлении новой записи будет по лучать уникальное гомогенные данные ~ homogeneous data — данные из одной или не скольких БД SQL Server. горизонтальное разделение ~ hori zontal partitioning — используется для создания статьи, содержащей только определенный набор запи сей из основной таблицы. Под писчики получат только подмно жество данных. Фильтрация оп ределяется условием, налагае мым на таблицу. графический план исполнения ~ graphical — способность утилиты SQL Server Query Analyzer выводить план исполнения
www.books-shop.com
540
Microsoft SQL Server 2000, Новейшие технологии
ca в виде графических элементов с указанием последовательности ис полнения этапов плана. группа файлов file group — име нованный набор из одного или более файлов, используемых для хранения БД. грязное чтение ~ dirty read — чте ние данных в процессе их изме нения. двухфазная фиксация ~ twophase commit — фиксации из менений на более чем одном сер вере, проходящий в два этапа (от сюда Инициирующий транзакцию сервер рассылает зап рос на подготовку всем участвую щим серверам; получив подтверж дения о готовности, инициирую щий сервер рассылает сообщение фиксации изменений. декартово произведение ~ Carte sian product — все возможные комбинации записей таблиц, уча ствующих в запросе. Количество строк результирующего набора равно произведению количества строк в таблицах. диаграмма базы данных ~ database diagram — графическое представ ление полной или части схемы БД. Схема — описание БД, ис пользуемое СУБД и выполнен ное на языке определения дан ных, поддерживаемом СУБД. динамическое блокирование ~ dy namic locking — автоматическое определение типа и уровня бло кировки при исполнении зап росов.
дистрибьютор ~ distributor — сер вер, хранящий БД Distribution. Дистрибьютор принимает все из менения в опубликованных дан ных, размещает их в Distribution и передает подписчикам. Один компьютер может совмещать функции дистрибьютора и изда теля. См. также издатель; ло кальный дистрибьютор; подпис чик; удаленный дистрибьютор. дифференциальное копирование ~ differential backup — способ созда ния страховочной копии БД, ког да копируются только измене ния, имевшие место со времени создания последней полной ко пии БД. Дифференциальная ко пия меньше полной, быстрее вос станавливается, и при ее созда нии система испытывает мини мальное воздействие. доверительное соединение ~ trusted connection — проверенное соеди нение между клиентом и серве ром. При использовании системы идентификации Windows NT нужны сетевые протоколы, под держивающие доверительные со единения. задание ~ task — именованный набор шагов, выполняющих оп ределенные административные задачи. Заменил «задачу» (job) SQL Server
И идентификатор защиты ~ security identifier (SID) — уникальное зна чение, идентифицирующее под ключенного пользователя. SID
www.books-shop.com
Словарь терминов может быть присвоен индивиду альному пользователю или груп пе и хранится в таблице Sysusers. идентификация пользователей средствами SQL Server ~ SQL Server authentication — использу ет встроенные средства SQL Ser ver для идентификации пользо вателей при подключении к сер веру. При идентификации не учи тывается факт регистрации в до мене Windows NT (если таковой имел место). идентификация пользователей средствами Windows NT ~ Windows NT authentication — режим про верки прав доступа, позволяю щий пользователям получать до ступ к серверу без ввода допол нительного пароля, кроме того, что вводился при регистрации в сети. издатель ~ publisher — сервер, от крывающий данные для репли кации. Издатель поддерживает опубликованные БД и рассылает копии всех изменений на сервер дистрибьютор. измерение ~ dimension — струк турный атрибут куба, представ ляющий собой организованную иерархию категорий (уровней), описывающих информацию в таблице фактов. Эти категории обычно описывают сходный на бор элементов для проведения анализа. Так, географическое из мерение может включать уровни Страна, Область, Город, Район. См. также уровень, мера. индекс ~ index — объект БД, по зволяющий значительно ускорить поиск информации в таблице.
541 интервал восстановления ~ recovery interval — временной интервал, оп ределяющий частоту выполнения операции Checkpoint путем назна чения времени, необходимого сер веру для восстановления.
К киоск данных ~ data mart — под множество содержимого храни лища размещенного в БД. Киоск обычно содержит ин формацию на уровне отдела или относящуюся к определенной об ласти бизнеса. Киоски часто орга низуют для сокращения объема перерабатываемой информации. См. также хранилище данных. кластерный индекс ~ clustered in dex — задает физический поря док записей в таблице. ключ ~ key — поле (группа по уникально определяющее за пись (PRIMARY KEY) или связь между таблицами (FOREIGN KEY), также используется для построения индекса. композитный индекс ~ composite index — индекс с ключом, состо ящим из нескольких полей. контроллер автоматизации ~ OLE Automation controller — среда про граммирования (например Visual FoxPro) или приложение, способ ные управлять объектами авто матизации. куб ~ cube — подмножество дан ных, обычно получаемое из хра нилища, организованное и про суммированное в многомерную структуру, определяемую набо ром измерений и мер. Данные
www.books-shop.com
542
Microsoft SQL
куба хранятся в одном или более физических разделах (partition). кэш ~ cache — буфер для хране ния данных, перемещаемых меж ду оперативной памятью и дис ком. кэш процедур ~ procedure cache — временное хранилище для теку щей, исполняемой версии храни мой процедуры.
Л локальный дистрибьютор ~ local distributor — сервер, сконфигури рованный как издатель и одно временно играющий роль дист рибьютора. В такой конфигура ции и открытая для публика ции, и БД Distribution располага ются на одном компьютере. См. также база данных Distribution; удаленный дистрибьютор. м мастер ~ wizard — графическая утилита — набор диалоговых окон, предоставляющих пользовательс кий интерфейс для выполнения стандартных административных действий: создания учетного име ни, БД и т. п. мера ~ measure — количествен ный, численный столбец в табли це фактов. Меры обычно пред ставляют анализируемые величи ны. См. также измерение. модифицируемая репликация date replication — любой тип реп ликации, позволяющий подпис чикам модифицировать реплици рованные данные. Си. также реп ликация сведением; синхрониза ция
2000, Новейшие технологии
монитор производительности ~ Windows NT performance monitor — утилита, используемая для от слеживания в реальном времени состояния компонентов SQL Ser ver. Позволяет устанавливать по роговые значения отслеживаемых при выходе за лы которых монитор производи тельности способен генерировать оповещения или предпринимать некоторые действия (например, запускать приложение или храни мую процедуру SQL Server). монитор репликации ~ replication monitor — графический инстру мент в SQL Server Enterprise Ma nager, используемый для упроще ния мониторинга репликации и разрешения проблем. монопольная блокировка ~ exclu sive lock — предотвращает полу чение другими процессами дос тупа к ресурсу до окончания тран закции. Применяется при опера циях изменения данных (IN SERT, UPDATE или DELETE).
н набор ~ recordset — объект ADO, используемый для размещения результата исполнения запроса. Набор также имеет свойства кур сора в зависимости от парамет ров, назначенных объекту прило жением. Наборы ADO соответ ствуют объектам rowset OLE dB. См. также ActiveX Data Objects. набор символов ~ character set — определяет типы символов, кото рые SQL Server распознает в по лях типа char, varchar и text. На бор символов — 256 букв, цифр и
www.books-shop.com
терминов специальных символов, специфи ческих для страны или языка. Первые символов одинаковы для всех наборов, последние 128, иногда называемые «расширен ным набором», уникальны для каждого набора. начальный моментальный снимок ~ initial snapshot — процесс, гаранти рующий, что опубликованные и целевые таблицы содержат ту же схему и данные, прежде чем под писчик начинает принимать реп лицируемые транзакции от изда теля. Процесс выполняют агенты распространения моментальных снимков и распределения. См. также синхронизация. некластерный индекс ~ nonclus index — индекс, у которого логический порядок ключей не обязательно совпадает с физи ческим порядком хранения запи сей на немодифицируемая реплика ~ readonly replica — публикация, которая не может быть модифи цирована подписчиком. неповторяемое чтение ~ nonrepea — ситуация, когда в промежутке между повторными чтениями в рамках одной тран закции данные изменяются дру гими транзакциями. Таким обра зом, операции чтения одних и тех же данных в рамках одной тран закции могут возвращать разные результаты. неявная транзакция ~ implicit transaction — транзакция, в кото рой каждое отдельное SQLпред ложение фиксируется или отка тывается по
543 нижний уровень
~ leaf level —
нижний уровень индексного де рева. Для кластерного индекса это страницы данных, для некла стерного — нижний уровень со держит указатели на данные. обновление статистики ~ update statistics — процесс обновления статистической информации о распределении значений ключа в указанных индексах. Получен ные данные оптимизатор запро сов использует для определения наиболее эффективного плана исполнения. объект автоматизации ~ OLE Au tomation object — СОМобъект, открывающий приложениям или инструментам свои интерфейсы. объект БД ~ database object — компонент БД: таблица, индекс, триггер, представление, ограни чение, значение умолчания, пра вило, пользовательский тип дан ных или хранимая процедура. ограничение ~ constraint — прави ло работы с данными в рамках индивидуального поля или груп пы полей таблицы. Ограничение обеспечивает ссылочную целост ность данных, позволяет выпол нять проверку уникальности зна чения поля, размещать в поле значения умолчания. SQL Server поддерживает работу с ограниче ниями CHECK, FO REIGN KEY, REFERENCE, PRIMARY KEY и UNIQUE. В отличие от правила ограничение не предназначено для проверки
www.books-shop.com
544
Microsoft SQL Server 2000. Новейшие технологии
состава данных. См. также пра вило. однопользовательский режим ~ singleuser mode — режим, при котором только один пользова тель может работать с БД. оператор ~ operator — объект под системы управления заданиями, которому обычно передаются со общения, созданные оповещени ями или заданиями. Обычно с каждым объектом оператор свя зан конкретный человек, имею щий почтовый адрес или адрес пейджера. опережающая запись ~ writeahead log — способ протоколирования модификаций, гарантирующий, что запись в журнале всегда бу дет создана до фактической мо дификации данных на диске. оповещение ~ alert — определен ная пользователем реакция сер вера на событие. Оповещение мо жет вызвать на исполнение зада ние, послать сообщение по элек тронной почте или на оператору. См. также оператор. опрос состояния сервера ~ server state polling — частота, с которой опра шивается состояние самого сервера и вспомогательных служб. оптимизатор запросов ~ query opti mizer — компонент SQL Server, вырабатывающий оптимальный план исполнения запроса. опубликование ~ publish — предо ставление данных для реплика ции. опубликованная база данных ~ pu blication database — является ис точником реплицируемых дан
ных. Одна или более таблиц БД открыты для репликации. основная таблица ~ base table — таблица, на базе которой строит ся представление. Представление может быть построено на основе одной или более основных таблиц или основных представлений. очередь ~ queue — временное хра нилище, используемое SQL Ser ver Profiler для событий сервера, которые следует передать клиен тскому приложению.
п первичный ключ ~ primary key — поле (группа полей), уникально определяющее запись в таблице. период хранения ~ retention — срок хранения транзакции в БД Distri bution. подзапрос ~ — предложе ние SELECT, включенное в другое или подписка ~ subscribe — согласие на получение публикуемой инфор мации. Целевая БД у подписчика принимает данные из публикуе мой БД издателя. подписчик ~ subscriber — сервер, получающий экземпляр публи куемых данных. пользователь SQL Server ~ SQL Server user — учетное имя, связан ное с идентификатором пользова теля. На основе учетного имени SQL Server определяет права на деятельность в рамках конкрет ной БД. пользовательская база данных ~ user databases — создается пользо вателем.
www.books-shop.com
Словарь терминов пользовательский тип данных ~ user defined datatype — описание формата хранения данных, сде ланное на базе основных типов данных, поддерживаемых SQL Server. Создание пользовательс ких типов данных позволяет уни фицировать схему создаваемых таблиц за счет ограничения дли ны строковых полей, указания возможности/невозможности хранения величин NULL и т. п. правило ~ rule — объект БД, при вязанный к полю таблицы и пользовательскому типу данных. Правило определяет состав дан ных, хранящихся в поле, к кото рому привязано правило. При каждой модификации (добавле нии) записи сервер проверяет вносимые данные на соответ ствие установленным правилам. См. также ограничение. принимающий сервер ~ forwarding server — сервер, на котором ис полняется Microsoft SQL Server, принимающий сообщения от других серверов. принудительная репликация ~ push subscription — тип реплика ции, когда инициатором переда чи изменений выступает изда тель, по указанному графику рассылающий изменения под писчикам. Агент распределения располагается на сервередист рибьюторе. См. реплика ция по запросу. присоединенный сервер ~ linked ser ver — абстрактное представление источника, доступного через OLE dB API. Присоединенный сервер виден локальному как еще один
545 сервер, имеющий ассоциирован ный с ним OLE ко торый управляет источником дан ных. публикация ~ publication — груп па статей, открытых для реплика ции как единый блок. Публика ция может содержать одну или более опубликованных таблиц или статей на основе хранимых процедур из одной пользователь ской БД. Каждая БД может иметь одну или более публикаций. публикация с ограниченным досту пом ~ restricted publication — пуб ликация с ограниченным досту пом. По умолчанию все новые публикации видны всем зареги стрированным подписчикам без необходимости предоставления дополнительных прав доступа. Публикация с ограниченным до ступом видна только тем зареги стрированным подписчикам, ко торым такое право предоставле но в явном виде. См. также сво бодная публикация. разделение ~ partitioning — способ физического разбиения данных на логические подмножества, ис пользуемый для разделения на грузки или снижения возможно сти конфликтов. разделяемая блокировка ~ shared lock — применяется для опера ций чтения. Пользователи могут читать данные одновременно, но доступ на изменение не разреша ется до снятия всех разделяемых блокировок.
для объекта ~ object permission — разрешения на ис полнение команд SELECT, IN SERT, UPDATE и DELETE, об ращенные на таблицу или представление. распределенный запрос ~ distributed query — единый запрос к разно родным источникам данных. результирующий набор ~ result set — набор строк, получаемых в ре зультате исполнения команды SELECT. Формат индивидуаль ных строк определяется списком столбцов в формулировке выра жения SELECT. репликация ~ replication — рас пространение структуры таблиц и/или данных или определения хранимых процедур от исходной БД к целевой, обычно располо женной на другом сервере. репликация моментальных сним ков ~ snapshot replication — тип репликации, при котором мо ментальный снимок данных на издателе передается подписчику и полностью замещает предыду щую реплику. Моментальный снимок передается по опреде ленному графику в отличие от транзакций, которые передаются по мере внесения изменений. См. также репликация сведени ем; репликация транзакций. репликация по запросу ~ sub scription — тип репликации, ког да инициатором передачи изме нений выступает подписчик, запрашивающий изменения от издателя. Агент распределения располагается на подписчике.
Подобная схема снижает нагрузку на сервердистрибьютор. См. так же принудительная репликация. репликация сведением ~ merge replication — тип репликации, по зволяющий выполнять модифи кации в БД подписчика с после дующим сведением изменений на издателе; не гарантирует тран закционную целостность дан ных. См. также репликация мо ментальных снимков; реплика ция транзакций. репликация транзакций ~ tional replication — тип реплика ции, когда подписчик получает модификации, выполняемые ин дивидуальными транзакциями над опубликованной БД на сер вереиздателе. См. репли кация моментальных снимков; репликация сведением. роль ~ role — административный компонент SQL Server, пред ставляющий собой именованный набор прав, охватывающий иден тификаторы пользователей SQL Server, группы и индивидуальных пользователей Windows NT или другие роли. роль приложения ~ application role — роль SQL Server, создаваемая для поддержки системы безопас ности индивидуального клиентс кого Активизирует ся с передачей пароля. См. так же роль. свободная публикация ~ unrestri cted publication — по умолчанию все новые публикации видны
www.books-shop.com
Словарь терминов всем зарегистрированным под писчикам без предоставления до полнительных прав доступа. См. также публикация с ограничен ным доступом. свойство Identity ~ Identity pro perty — применимое к полю таб лицы свойство, позволяющее при вставке автоматически заполнять поле значениями, генерируемы ми системой, которые монотонно возрастают в соответствии с уста новками для конкретного поля. сервер автоматизации ~ OLE Au tomation server — делающий доступными для другого приложения или инстру ментального средства объекты серийность ~ serializable — уровень изоляции транзакций, при кото ром результирующий набор не изменяется до окончания тран закции. синхронизация ~ synchronization — процесс поддержания идентич ной схемы и состава данных пуб ликации на сервереиздателе и реплике на сервереподписчике. См. также начальный момен тальный снимок. синхронизация транзакций ~ synchronous transaction — одна из особенностей репликации, по зволяющая подписчику моди фицировать реплицированные данные и переслать модифика ции на сервериздатель по про токолу двухфазной фиксации. Выполняется средствами репли кации транзакций или реплика ции моментальных снимков.
54? системные БД ~ system databases — создаются при установке но вой копии SQL Server: • Master — управляет всеми пользовательскими БД и опера циями SQL Server; • Tempdb — используется для размещения временных объек тов (таблицы хранимых проце
дур); •
Model — используется как шаб лон при создании новых поль зовательских БД; • Msdb — используется SQL Ser ver Agent для управления зада ниями и оповещениями. системные таблицы ~ system tables — хранят информацию о конфи гурации SQL Server и определе ния всех объектов, пользователей и их прав в рамках индивидуаль ных БД. Конфигурация сервера хранится в системных таблицах, размещенных в БД Master. Каж дая БД имеет системные табли цы, хранящие информацию о пользователях, объектах и разре шениях для этой БД. Master со здается при установке SQL Ser ver. В пользовательских БД сис темные таблицы создаются при их создании. системные функции ~ system func tions — возвращают информацию о SQL Server, позволяя получить доступ к информации о БД из вы ражения, например, предложения WHERE команды SELECT. системные хранимые процедуры ~ system stored procedures — набор хранимых процедур, позволяю щих получить информацию о са
www.books-shop.com
548
Microsoft SQL
MOM SQL Server, его компонентах и процессах на сервере. Систем ные хранимые процедуры ис пользуются при администриро вании сервера. Имена всех сис темных процедур начинаются с sp_. Системные хранимые проце дуры размещаются в БД Master, их владельцем является dbo (сис темный администратор). Боль шинство системных процедур можно исполнить, находясь в контексте иной, чем Master, БД. При этом процедура обращается к системным таблицам текущей БД. Пользователь может создать собственную процедуру, присво ить ей имя, начинающееся с sp_, поместить в Master, и она приоб ретет все свойства системной хранимой процедуры. системный администратор ~ sys tem administrator (SA) — члены фиксированной роли sysadmin, действующей в рамках индивиду ального сервера. В роль для обес печения обратной совместимос ти включен идентификатор SA. Члены роли sysadmin выполняют действия за рамками системы разграничения доступа (для них SQL Server не выполняет провер ки прав доступа). Члены этой роли рассматриваются как вла дельцы любой БД, которую они в данный момент используют. системный каталог ~ system ca talog — набор системных таблиц, присутствующих только в БД Master. системы поддержки принятия реше ний ~ decision support system (DSS) — приложения БД, оптимизиро
2000,
технологии
ванные для извлечения данных, но плохо поддерживающие изме нение данных. DSSприложения обычно работают в режиме толь ко для чтения. сквозной запрос ~ passthrough query — передается на внешний сервер для исполнения без пред варительной интерпретации. Ре зультирующий набор записей сквозного запроса можно ис пользовать в предложении FROM запроса, как если бы он представлял собой таблицу. служба ~ service — процесс, ис полняющий определенные сис темные функции и часто предос тавляющий другим приложениям доступ к API. В отличие от при ложения не требует вмешатель ства пользователя для остановки или запуска. «смертельный захват» ~ deadlock — ситуация, когда один пользо вательский процесс пытается блокировать ресурс, заблокиро ванный другим, который в свою очередь ожидает освобождения ресурса, заблокированного пер вым процессом. SQL Server ав томатически определяет «смер тельные захваты» и устраняет их путем остановки одного из про цессов. соединение ~ join — комбинация данных из разных таблиц в одном результирующем наборе. Обычно производится на основании об щих данных, хранящихся в со единяемых таблицах. статья ~ article — основной эле мент репликации. Статья содер жит данные из таблицы или хра
www.books-shop.com
Словарь терминов процедуры, отмеченной для участия в процессе реплика ции. Публикация включает одну или более статей. См. также пуб ликация. страница ~ page — в системе хра нения данных — непрерывный блок адресного пространства фиксированной длины. При ра боте с данными копируется как неделимый элемент в память и на диск. При выделении простран ства SQL Server делает это в стра ницах. Размер страницы — 8 Кб. схема ~ schema — описание фи зической структуры БД команда ми определения данных (DDL) СУБД. схема звезды ~ star schema — структура реляционной БД, в ко торой данные размещены в един ственной таблице фактов (цент ре схемы) и нескольких таблицах измерений. Каждая таблица из мерений связана с таблицей фак тов ключевым полем. См. также схема снежинки. схема снежинки ~ sche ma — расширение схемы звезды, заключающееся в использовании нескольких таблиц для описания измерения. В схеме снежинки с таблицей фактов напрямую свя заны только основные таблицы измерений. Дополнительные таблицы измерений связываются с основными таблицами измере ний. См. также схема звезды. сценарий ~ script — набор выра жений или иного языка, используемых для выпол нения некоторых операций. Сце
549 нарии обычно хранятся в виде файлов с расширением таблица ~ table — объект БД, ко торый хранит данные в виде на бора записей. тип данных Nchar ~ Nchar datatype — тип данных с фиксированной длиной поля, позволяющий хра нить до 4 000 символов в кодиров ке Unicode. См. также Unicode. тип данных Ntext ~ Ntext datatype — поле переменной длины для хранения до (1 073 741 823) символов, (или байт ин формации 2 147 483 647). Поля типа Ntext хранят указатель дли ной 16 байт в основной записи. Собственно данные хранятся от дельно. тип данных Nvarchar ~ Nvarchar datatype — тип данных с перемен ной длиной поля, позволяющий хранить до 4 000 Unicodeсимво лов. См. также Unicode. транзакция ~ transaction — груп па операций в БД, представляю щих собой единое логическое це лое. Операции, исполняющиеся в рамках транзакции, фиксиру ются или откатываются все вме сте. триггер ~ trigger — хранимая про цедура, автоматически запускаю щаяся при изменении данных в таблице (INSERT, UPDATE, DE LETE). удаленная хранимая процедура ~ remote stored procedure — храни мая процедура (именованный на
www.books-shop.com
550
Microsoft SQL Sewer 2000, Новейшие технологии
бор выражений SQL конструкций языка TSQL) на удаленном сер вере. Удаленную хранимую про цедуру может вызывать клиентс кое приложение или другой SQL Server. удаленные данные ~ remote data — хранятся на ином, чем локаль ный, SQL Serverкомпьютере, доступ к ним организован по средством присоединенного сервера либо произвольного со единения. См. также присоеди ненный сервер. удаленный дистрибьютор ~ remote distributor — сервер, исполняю щий роль дистрибьютора и уста новленный на ином компьютере, чем сервер, исполняющий роль издателя. В такой конфигурации опубликованная БД и БД Dist ribution располагаются на разных компьютерах. См. также локаль ный дистрибьютор. удаленный сервер ~ remote server — SQL Server, доступный по сети с локального сервера. уникальный индекс ~ unique index — индекс, в котором записи не могут иметь одинаковое значе ние ключа. уровень ~ level — элемент иерар хии измерения. Уровни определя ют порядок иерархии данных: от наиболее общей к более деталь ной. Например, географическое измерение может включать уров ни Страна, Область, Город, Рай он. См. также измерение. уровень изоляции ~ isolation level — параметр, определяющий пра вила блокирования; устанавлива ется на уровне сессии.
уровень ошибки ~ severity level — степень «серьезности» ошибки. Допустимые уровни от 1 до 25. Ошибки уровней 19 рассматри ваются как информационные со общения, — как ошибки, которые перехватыва ются анализом значения пере менной @@error, от 19 и выше — как «фатальные»; система прину дительно «убивает» поток, выз вавший эту ошибку. условие соединения ~ join condition — условие сравнения, которое оп ределяет связь таблиц через поля, входящие в хранилище данных ~ data ware house — БД, структурированная для поддержки аналитических запросов; обычно содержит исто рическую информацию ведения бизнеса в организации.
Ф файл БД ~ database file — исполь зуется для размещения БД. Одна БД может размещаться в несколь ких файлах. файл данных ~ data file — содер жит данные (таблицы, записи и хранимые процедуры). БД может размещаться на нескольких фи зических файлах. файловая группа ~ — име нованный набор файлов, пред ставляемый как единое целое для размещения данных и админист рирования. фантом ~ phantom — ситуация, когда одна транзакция пытается извлечь несуществующую запись,
www.books-shop.com
Словарь терминов а другая вставляет запись до ее за вершения. Такая запись является фантомом для первой транзакции. фиксированная роль БД ~ fixed da tabase role — предопределенная роль, действующая в рамках ин дивидуальной БД. Присутствует в каждой БД. См. также роль. фиксированная роль сервера ~ fi xed server role — предопределен ная роль, действующая в рамках всего сервера. См. также роль. фильтр ~ filter — набор критери ев для выделения множества за писей или их сортировки. целевая база данных подписчика ~ subscription database — БД, в кото рой размещаются таблицы и дан
551 ные, передаваемые из опублико ванной БД. эскалация блокирования ~ lock es calation — процесс перевода боль шого количества блокировок низ кого уровня в меньшее количе ство блокировок более высокого уровня. Например, группа блоки ровок на уровне страниц перево дится в единственную блокиров ку на уровне явная транзакция ~ explicit trans action — группа SQLпредложе ний, ограничиваемая командами управления транзакциями BE GIN TRANSACTION, COMMIT TRANSACTION или ROLL BACK TRANSACTION.
www.books-shop.com
www.books-shop.com
Предметный указатель
А ADO — аутентификация пользовате лей 421 — использование DSN 422 — работа с параметрами 442 — раннее связывание 420 — соединение без использования DSN 423 — типы серверных курсоров 425
Pump DTC — использование в DTS
M Meta Data Services MultiDimensional MDX 407
378 Expressions
418 418
s SQL Profiler — режим «черного ящика»
Transact SQL — Create database
138 — детерминированные выраже ния 176
W Windows — Windows 95 1 — Windows CE Edition — Windows ME 1 Windows NT 4.0 1
2
анализ статистики 476 архитектура — Checkpoint — Lazy Writer 47 — администратора запросов 59 — компоненты сервера 74 — материализованные представле ния 167 — поддержка storage area network (SAN) 136 — привязка представлений к схе ме 166 — сжатие БД 137
м 90
миграция — мастер по копированию БД — пакет DTS 32
32
п 228
перемещение больших объемов данных 393
www.books-shop.com
554
Microsoft SQL Server 2000.
репликация 47 — в Интернет 366 — использование DTS 359 роли sysadmin 67, 68, 69, 230, 245, 248, 250, 255, 256 — в рамках БД 255 — права массивного копирова ния 394 — явные и неявные 252
— sp_who 73 — xp_enumlogins 260 — автоматизация SQL Server 462 — отображение в SQL Profiler 87 службы DTC 72
У управление — Failsafe operator 65, 289 MMC 35 — MMC Author mode 37 — SQL Server Service Manager — диаграмма БД 162 — журнал SQL Server Agent 63 — журналы служб 72 — именованный экземпляр 41 — компоненты SQL Server Agent 275 — монитор портирования журнала транзакций 300 — пользователь SA 42 — пользовательские сообщения об ошибках 286 — построение диаграмм БД сред ствами Visual Studio 163 — принудительное отключение пользователей 140 — создание категорий заданий 277 — типы шагов задания 279 — учетное имя пользователя 245 установка — Domain user account 13 — Local system account 13 — RAID массив на IDE дисках 10 — административные привиле гии 3
www.books-shop.com
Предметный указатель — двусторонние доверительные отношения 14 — именованный экземпляр 34, 308 — использование RAID 133 — типы установки 3 — требования к операционной си стеме 2