Программные интерфейсы для выполнения задач из области управления

Тем, кто имел опыт работы с предыдущими версиями SQL Server, наверняка известны специальные программные средства, предназначенные для выполнения административных задач. Программные средства разработки элементов управления OLTP-сервером назывались SQL-DMO (SQL Distributed Management Objects), а программные средства, с помощью которых создаются средства управления и администрирования OLAP-сервером, — DSO (Decision Support Objects).

Эти средства представляли собой функции, скомпилированные в библиотеки. Однако они были не особенно удобны в применении, и пользовались ими не очень активно. В новой версии SQL Server эти библиотеки принципиально переработаны и более того — переведены на платформу .NЕТ.

Применение объектов управления OLTP-сервером

При использовании SQL Server существует два способа выполнения административных задач. Первый — применение Transact-SQL с использованием языка определения данных DDL (data definition language) и встроенных системных хранимых процедур для создания учетных записей и пользователей, баз данных, таблиц и хранимых процедур. Второй — использование Microsoft SQL Server Enterprise Manager, предоставляющего более удобный графический интерфейс для управления этими самыми объектами. Большинство пользователей предпочитают второй способ, потому что его можно освоить быстрее и с меньшими усилиями.

В своей работе Enterprise Manager в свою очередь использует язык Transact-SQL и SQL-DMO. SQL-DMO — это основанный на объектной модели COM (Component Object Model) интерфейс SQL Server 2000, служащий не для извлечения данных, а для управления объектами SQL Server. Точнее говоря, это структурированный, организованный на основе наборов и простой в использовании программный интерфейс, предназначенный для работы с SQL Server.

Разработчики же SQL Server 2005 предоставили нам более удобное и мощное средство — SQL Server Management Objects (SMO). SMO является .NET-эквивалентом старого SQL-DMO. Он более надежен, предоставляет разработчикам усовершенствованные средства создания сценариев, определяющих структуру базы данных, и поддерживает более полный набор объектов и наборов базы данных. Кроме того, в нем реализованы новые средства программирования. SMO — это интерфейс администрирования SQL Server 2005. С его помощью можно решить любую задачу, связанную с управлением.

Основы SQL Management Object (SMO)

Объекты управления SQL (SQL Management Objects, SMO) — это объектная модель управления для SQL Server 2005. SMO отражает значительные улучшения в дизайне и архитектуре объектной модели управления SQL Server. Использовать ее просто, но она представляет собой сложную объектную модель, основанную на управляемом коде .NET Framework. SMO — это главный инструмент для разработки приложений управления базами данных с использованием .NET Framework. SMO используется каждым диалоговым окном в SQL Server Management Studio, и любое действие, которое администратор может выполнить в SQL Server Management Studio, он также осуществит и с помощью SMO.

Новая объектная модель SMO и Microsoft Windows Management Instrumentation (WMI) API заменяют SQL-DMO. Там, где это возможно, SMO включает в себя для простоты использования такие же объекты, как и в SQL-DMO. Можно еще применять SQL Server 2005 Beta 2 с SQL-DMO, но SQL-DMO не будет обновляться для управления специфическими особенностями SQL Server 2005.

Как соотносятся SMO и SQL-DMO? Объектная модель SMO — это логическое продолжение проделанной в SQL-DMO работы. Модель SMO совместима с SQL-DMO и содержит множество тех же объектов. Где это возможно, сохраняется исходный дизайн SQL-DMO, но SMO имеет несколько дополнительных возможностей помимо функций SQL-DMO. Для максимального покрытия языка определения данных и административных возможностей SQL Server 2005 в SMO добавлено более 150 новых классов.

Основными преимуществами модели SMO являются ее производительность и масштабируемость. SMO использует кэшированную объектную модель, которая позволяет изменять несколько свойств объекта перед сохранением изменений в SQL Server. В результате выполняется меньше обращений к серверу. SMO также имеет оптимизированную загрузку объектов. Это означает, что можно загружать объекты частично или полностью. Можно быстро загружать множество объектов, не загружая все их свойства.

В отличие от набора SQL-DMO, который имеет единственную корневую папку приложения, содержащую ссылки на все созданные объекты на сервере базы данных, SMO позволяет создать множество корневых папок для серверов без установки нового соединения. SMO также имеет управляемый объект, который упрощает интерфейс с WMI для поддержки мониторинга WMI и настройки сервера через интерфейс объекта SMO.

Рисунок 1. Упрощенная структура объектов SMO

На рис. 1 показана сильно упрощенная структура объектов SMO. Как можно заметить, объекты сгруппированы по коллекциям, что в значительной степени упрощает разработку приложений, делая обращение к объектам более привычным.

Поскольку SMO-объекты в большинстве своем представляют реальные объекты сервера баз данных, для упрощения изложения мы посмотрим на них на основании примеров программного кода, выполняющего различные задачи. Такой подход, на мой взгляд, способен дать наиболее полное представление о возможностях этих элементов новой версии SQL Server.

SMO обеспечивает работу с двумя типами классов для автоматизации выполнения административных задач: экземпляр сервера и утилиты. Классы экземпляра сервера представляют объекты сервера, такие как база данных, таблица, представление и т. д., а классы утилит предназначены для резервного копирования, восстановления, написания сценариев и переноса данных.

Для реализации примеров нам понадобится MS SQL Server 2005 и Microsoft Visual Studio 2005 Beta 2. Прежде чем приступать к выполнению приведенных ниже практических заданий, необходимо добавить ссылки на библиотеки Microsoft.SqlServer.ConnectionInfo, Microsoft.SqlServer.Smo, Microsoft. SqlServer.SmoEnum, Microsoft. SqlServer.SqlEnum.

Давайте создадим проект консольного приложения. Конечно, можно и графического, но ведь наша цель — научиться пользоваться объектами, а в консольном приложении это сделать проще.

Подключение к серверу начинается с импорта пространства имен:

Imports
 Microsoft.SqlServer.Management.Smo
Imports
 Microsoft.SqlServer.Management.Common

Далее идет формирование соединения с сервером, с использованием либо аутентификации Windows:

Dim myServer As New Server("(local)")
Dim conn As ServerConnection =
 myServer.ConnectionContext
conn.LoginSecure = True
conn.Connect()

либо аутентификации SQL Server:

Dim myServer As New Server("(local)")
Dim conn As ServerConnection =
 myServer.ConnectionContext
conn.LoginSecure = False
conn.Login = "sa"
conn.Password = "P@ssw0rd"
conn.Connect()

Для получения информации о сервере применяется специальный метод Information:

Console.WriteLine(myServer.Name & " " &
 myServer.Information.VersionString)
Console.WriteLine("Eddition " &
 myServer.Information.Edition)
Console.WriteLine("Language " &
 myServer.Information.Language)
Console.WriteLine("OS Version " &
 myServer.Information.OSVersion)
Console.WriteLine("Platform " &
 myServer.Information.Platform)
conn.Disconnect()

Выполнение резервного копирования можно осуществить как средствами языка Transact-SQL, так и при помощи объектов SMO. В табл. 1 приведено описание некоторых методов и свойств SMO, необходимое для выполнения резервного копирования средствами SMO. Выполнение полного резервного копирования иллюстрируется следующим кодом:

Dim bkp As Backup = New Backup()
bkp.Action = BackupActionType.Database
bkp.Initialize = True
bkp.Incremental = False
bkp.Database = "AdventureWorks"
bkp.DeviceType = DeviceType.File
bkp.Devices.Add("c:SMO.bak")
bkp.SqlBackup(myServer)

Выполнение восстановления базы данных из резервной копии также возможно с помощью объектов SMO. В табл. 2 описаны некоторые методы и свойства SMO, обеспечивающие восстановление из резервной копии. Выполнение восстановления из полной резервной копии и просмотр содержимого файла резервной копии с логическими именами файлов показаны в листингах 1 и 2.

Код листинга 2 производит те же действия, которые выполняются командой

RESTORE FILELISTONLY
 FROM DISK = N?C:SMO.bak?

с той лишь разницей, что в листинге 2 выводятся только логические имена файлов.

В SQL Server есть несколько команд, связанных с вызовом утилиты DBCC, которые позволяют проверять и корректировать (если это возможно) физическую целостность объектов сервера. В табл. 3 приведены соответствия между некоторыми командами утилиты DBCC и методами SMO, реализованными для SQL Server 2005.

Подробная информация по ним может быть получена из справочной системы SQL Server, а в листинге 3 дается пример реализации одной из команд при помощи объектов SMO.

Можно использовать SMO для создания объектов базы данных, таких как таблицы, представления, хранимые процедуры и т. д. Эти действия выполняются в определенной последовательности: сначала создаются переменные, представляющие соответствующие объекты, такие как столбцы или таблицы, затем устанавливаются соответствующие свойства объектов и далее дочерние объекты добавляются к их родительским объектам (см. листинг 4).

Объекты SMO используются и для модификации объектов базы данных, таких как таблицы, представления, хранимые процедуры и т. д. Для модификации требуется выполнить следующие шаги: создать переменные, представляющие ссылки на соответствующие объекты, такие как столбцы или таблицы; изменить соответствующие свойства объектов и вызвать метод ALTER для внесения изменений (см. листинг 5).

Надеюсь, приведенные примеры достаточно убедительны, чтобы показать, что можно делать при помощи SMO. Хотя этот интерфейс программирования и объемен, использовать его совсем несложно. SMO предоставляет администратору все, что нужно для управления SQL Server. Можно управлять любыми службами, имеющими отношение к SQL Server, запускать и останавливать их, управлять объектами на уровнях сервера и базы данных, а также средствами обеспечения безопасности.

Возникает логичный вопрос: «Зачем создавать такие приложения, если SQL Server Management Studio уже умеет все это и даже больше?» Возможно, кто-то захочет разработать программное обеспечение и включить в него простые средства управления базой данных, такие как инструменты управления пользователями. В любом случае средства, предоставляемые SMO, будут полезны, и вы не раз вспомните о них при эксплуатации SQL Server 2005.

Использование объектов управления OLAP-сервером

Итак, мы уже рассмотрели специальные классы, предназначенные для разработки собственных средств управления сервером баз данных. Это классы SMO, по своей сути являющиеся .NET-эквивалентом старого SQL-DMO. Для управления и администрирования OLAP-сервером в SQL Analysis Service 2005 также разработан новый вариант старых средств разработки, называемых Decision Support Object (DSO) и предназначенных для создания управляющих консолей аналитического сервера. Это Analysis Management Object (AMO), интерфейс администрирования SQL Analysis Service 2005. С его помощью можно решить любую задачу, сопряженную с управлением аналитическими службами SQL Server 2005.

Основы AMO

Рисунок 2. Структура АМО

AMO представляет объектную модель нового поколения (см. рис. 2), включающую в себя базы данных, аналитические модели, а также объекты OLAP-сервера. Когда пользователь работает с объектами AMO, он может напрямую манипулировать целым диапазоном различных объектов и их свойств.

С помощью AMO он может получить доступ ко всем типам моделей анализа, поддерживаемых сервером, в том числе Microsoft Association Rules, Microsoft Clustering, Microsoft Decision Trees, Microsoft Naive Bayes, Microsoft Neural Network, Microsoft Sequence Clustering и Microsoft Time Series. Также полезным применением AMO может стать разработка собственных средств управления сервером аналитики.

Принцип использования этой объектной модели очень похож на уже рассмотренный выше принцип работы с объектами SMO. Для работы с ними необходимо выполнить несколько шагов. При этом часть шагов будет всегда одинакова и не будет зависеть от типа объекта, с которым предстоит работать, а часть шагов определяется видом объекта.

Какие же действия всегда выполняются при работе с этими объектами? Какие шаги необходимо выполнить для создания управляющих объектов аналитического сервера? Об этом пойдет речь далее.

Поскольку AMO-объекты представляют реальные объекты сервера, для простоты мы рассмотрим их на основе примеров программного кода, выполняющего различные задачи. Такой подход даст полное представление о возможностях этих элементов.

AMO работает с одним корневым классом — экземпляром сервера. Классы экземпляра представляют объекты сервера, такие как база данных, кубы, источники данных и т. д. Для реализации примеров нам понадобится MS SQL Server 2005 и Microsoft Visual Studio 2005 Beta 2.

Прежде чем приступать к выполнению практических заданий, необходимо добавить ссылки на библиотеки System.Data, System.Data.OleDb, Microsoft.AnalysisServices.

Давайте еще раз создадим проект консольного приложения, хотя, повторюсь, можно и графического, но наша цель — научиться пользоваться объектами, а в консольном приложении это сделать проще.

Все действия начинаются с создания объекта класса Server и подключения к нему.

Imports System.Data
Imports System.Data.OleDb
Imports Microsoft.AnalysisServices
Dim srv As New Server
srv.Connect("Local")

Поскольку ссылка на сервер создана, теперь можно выполнять и остальные действия. Для получения информации о сервере используется другой подход, нежели в SMO, что показано в листинге 6.

Создание базы данных производится в рамках того же сервера, который был создан (см. листинг 7). После выполнения кода, приведенного в листинге 7, следует открыть Microsoft SQL Management Studio, подключиться к аналитическому серверу, и там будет видна вновь созданная база данных.

Одна база данных может иметь несколько подключений к источникам данных. Источники данных могут быть как реляционные, так и нереляционные, что показано в листинге 8.

Объект Data Source View — это, по сути, совокупность запросов, которые выполняются к источнику данных. В показанном ниже примере создается Data Source View и далее в него добавляется таблица фактов. Эта же таблица фактов будет использоваться как таблица размерностей (см. листинг 9).

Все объекты базы данных собраны в коллекции, просмотр содержимого которых производится по одному и тому же принципу. Сначала получаем ссылку на коллекцию и далее, используя итерацию, получаем доступ к содержимому коллекции (см. листинг 10).

В свою очередь все объекты куба, как и было описано выше, также собраны в коллекции, просмотр содержимого которых производится тоже путем итерации по коллекции (см. листинг 11).

Для выполнения резервного копирования базы данных необходимо просто по отношению к базе данных выполнить метод Backup, а для восстановления базы из копии следует для сервера применить метод Restore (см. листинги 12 и 13).

Обращаю внимание читателей на то, что в листинге 12 расширение файла должно быть только *.abf. В листинге 13 обратите внимание на третий параметр в методе Restore. Установка его в положение True переписывает восстанавливаемую базу поверх существующей.

Опять же, как мы убедились, пользоваться новой объектной моделью совсем несложно. Для этого надо лишь разобраться с архитектурой классов, лежащих в основе AMO, а дальше уже все превращается в выполнение достаточно простых однотипных операций, синтаксис и смысл которых понятен. Использование объектов AMO позволяет без особых усилий разрабатывать свои элементы управления аналитическим сервером.

Подведем итоги. Чтобы использовать объекты для разработки собственных решений, необходимо: во-первых, иметь представление о работе с платформой .NET, а во-вторых, разобраться со структурой классов, используемых для создания объектов.

К сожалению, на момент подготовки статьи в справочной системе SQL Server 2005 не было достаточного количества информации, что в значительной степени затрудняет изучение и использование объектов. Многое из того, что показано в статье, получено методом многочисленных проб и ошибок, что, безусловно, не способствует ускорению процесса обучения и разработки. Остается надеяться, что корпорация Microsoft при выпуске окончательного релиза снабдит его подробными описаниями и учебниками.


Александр Каленик - Старший преподаватель Центра компьютерного обучения «Специалист» при МГТУ им. Н.Э. Баумана