Microsoft SQL Server 2005

Вопросы перехода на новую версию. Часть 3

Алексей Федоров

Использование компонентов SNAC

Объекты базы данных на управляемом коде

Использование расширений языка T-SQL

   Изменения в операторе TOP

   Common Table Expressions — общие табличные выражения

   Операторы PIVOT и UNPIVOT

   DDL-триггеры

   Вывод данных в DML-конструкциях

   Конструкция WAITFOR

   Тип данных varchar(max)

   Аварийное завершение транзакций

Бизнес-логика на управляемом коде

Изменение/расширение архитектуры приложения

   Нотификационные сервисы

   SQL Server Service Broker

   Web-сервисы

Заключение

 

В предыдущих номерах (см. КомпьютерПресс № 9-11’2005) мы рассмотрели вопросы, связанные с переходом на новую версию SQL Server — Microsoft SQL Server 2005. Мы рассказали о доступных механизмах перехода — обновлении и миграции, обсудили использование утилиты Upgrade Advisor, а также подробно остановились на основных этапах процесса обновления — планировании, тестировании, собственно обновлении и действиях, выпоняемых после обновления. Затем мы более подробно рассмотрели вопросы обновления отдельных компонентов SQL Server, а также аппаратные требования и поддерживаемые аппаратные конфигурации.

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

В общем случае такими сценариями могут быть:

  1. Использование компонентов SNAC (SQL Native Access Components) для доступа к серверу из клиентских приложений.
  2. Перенос некоторых объектов базы данных (хранимых процедур, функций, триггеров и т.п.) на управляемый код.
  3. Использование расширений языка T-SQL.
  4. Перенос части бизнес-логики на управляемый код, выполняющийся внутри SQL Server.
  5. Изменение/расширение архитектуры приложения с целью использования новых или обновленных сервисов SQL Server 2005.

Использование компонентов SNAC

Переключение на применение компонентов SNAC вместо традиционных MDAC ODBC/OLE DB-провайдеров является первым шагом на пути к использованию различных новых возможностей SQL Server 2005, включая MARS (Multiple Active Result Sets), тип данных XML, нотификационную поддержку для запросов (Query Notifications), поддержку типов Varchar и nvarchar(max), пользовательские типы (User-Defined Types) и т.п. В первую очередь необходимо убедиться в том, что компоненты SNAC установлены. Для это следует воспользоваться панелью Add/Remove Programs. Если компоненты не установлены, нужно еще раз запустить программу Setup и выбрать соответствующую опцию. После этого необходимо изменить параметры строки соединения в клиентском приложении и проверить работоспособность приложения с применением новых компонентов доступа к данным.

SQL Native Access Components — новая технология доступа к данным, появившаяся в SQL Server 2005, — предоставляет единый программный интерфейс, используемый и OLE DB, и ODBC. Технология SNAC объединяет провайдер SQL OLE DB и драйвер SQL ODBC в одну динамически загружаемую библиотеку. Компоненты SNAC можно применять как для создания новых приложений, так и для расширения существующих за счет использования в них перечисленных выше новинок в SQL Server 2005.

Ниже приводится список изменений, которые необходимо внести в код клиентского приложения для того, чтобы переключиться на новый набор провайдеров:

 

OLEDB

Использование строки соединения

OLE DB (MDAC) “Provider=SQLOLEDB; Data Source=server_name_or_address; Initial Catalog=database_name; User ID=username; Password=password;”

OLE DB (SNAC) “Provider=SQLNCLI; Data Source=server_name_or_address; Initial Catalog=database_name; User ID=username; Password=password;”

Использование CoCreateInstance

OLE DB (MDAC) CoCreateInstance(CLSID_SQLOLEDB, NULL.

CLSCTX_INPROC_SERVER, IID_IDBInitialize, (void**) &pIDBInitialize

OLE DB (SNAC) CoCreateInstance(CLSID_SQLNCLI, NULL.

CLSCTX_INPROC_SERVER, IID_IDBInitialize, (void**) &pIDBInitialize

ODBC

Соединение без DSN

ODBC (MDAC) Driver={SQL Server}; Server=server_name_or_address;

Database=database_name; UID=username; PWD=password;

ODBC (SNAC) Driver={SQL Native Client}; Server=server_name_or_address;

Database=database_name; UID=username; PWD=password;

оединение с DSN

Опционально можно создать новое DSN-соединение, которое использует драйвер SQL Native Client, и изменить соответствующий код приложения.

DSN=модифицированный или новый DSN; UID=username; PWD=password;

 

 

Отметим, что для распространения новых клиентских компонентов вместе с приложением следует воспользоваться соответствующим набором, который можно найти на диске с SQL Server 2005 в папке Setup.

В начало В начало

Объекты базы данных на управляемом коде

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

Включение в SQL Server 2005 поддержки управляемого кода (SQLCLR) дает возможность перенести на него расширенные хранимые процедуры (XP_SP), используемые для расширения функциональности T-SQL и доступа к внешним (по отношению к SQL Server) ресурсам, и процедуры, выполняющие OLE Automation (sp_OA) и позволяющие вызывать COM-объекты из T-SQL. Помимо этого следует обратить внимание на традиционные хранимые процедуры, которые могут содержать код на T-SQL, выполняющий операции обработки данных.

В случае с расширенными хранимыми процедурами применялись неуправляемый код и открытые сервисы данных (open data services), поэтому в ряде случаев вопросы безопасности выполнения такого кода оставались открытыми. Следует отметить, что расширенные хранимые процедуры не будут поддерживаться в будущих версиях продукта, поэтому они — первый кандидат на перенос на управляемый код. Вторым кандидатом является код, поддерживающий OLE Automation.

В случае переноса функциональности объектов баз данных на управляемый код следует помнить следующее:

В SQL Server 2005 управляемый код может применяться для создания типов объектов баз данных указанных в приведенной ниже таблице.

Конкретный синтаксис и примеры написания объектов базы данных на управляемом коде достаточно подробно рассмотрены в Books Online, поэтому эту часть мы пропустим.

 

Код на T-SQL

  1. Подходит для операций с наборами данных.
  2. Код на T-SQL — интерпретируемый.
  3. T-SQL не оптимизирован для выполнения большого количества процедурных операций.
  4. Операции по работе со строками не оптимизированы.
  5. T-SQL содержит большой набор операций по работе с данными.

 

SQLCLR

  1. Наилучшим образом подходит для выполнения процедурных операций.
  2. Компилируемый код.
  3. Обеспечивает доступ к библиотеке классов .NET.
  4. Позволяет обращаться к внешним ресурсам (файловая система, протокол событий, реестр, Web-сервисы).
  5. Подходит для создания пользовательских функций.
  6. Используется для реализации функциональности, отсутствующей в T-SQL.

 

 

Можно предположить, что перенос на управляемый код ряда хранимых процедур и триггеров потребует меньших изменений в приложении, чем, например, реализация пользовательских функций или типов. Следует помнить о том, что в первую очередь имеет смысл переносить именно процедуры, содержащие большой набор операций по работе с данными, комплексную логику, бизнес-правила, которые сложно выразить средствами T-SQL.

В начало В начало

Использование расширений языка T-SQL

В процессе миграции на новую версию SQL Server не следует забывать, что и язык T-SQL получил большое число дополнений, применение которых, вероятно, будет способствовать увеличению производительности и масштабируемости приложений. Нижe мы кратко рассмотрим основные новинки T-SQL.

 

Изменения в операторе TOP

В SQL Server 2005 появилась возможность указывать выражение в качестве параметра оператора TOP. Выражением может быть любое допустимое T-SQL выражение, включая переменную или запрос, возвращающий скалярное значение. Помимо этого оператор TOP можно использовать в командах INSERT, UPDATE и DELETE.

Common Table Expressions — общие табличные выражения

Общие табличные выражения — это механизм для выполнения рекурсивных запросов. Рекурсия достигается за счет того, что общие табличные выражения могут ссылаться сами на себя. Для того чтобы предотвратить переполнение памяти, по умолчанию максимальный уровень рекурсии имеет значение 100. Общие табличные выражения реализованы как часть ключевого слова WITH и могут использоваться с операторами SELECT, INSERT, UPDATE и DELETE.

Операторы PIVOT и UNPIVOT

Новые операторы PIVOT и UNPIVOT предназначены в первую очередь для OLAP-сценариев, когда вы работаете с табличными, а не с реляционными данными. Оператор PIVOT позволяет превратить набор рядов в колонки, а оператор UNPIVOT выполняет обратную операцию.

DDL-триггеры

В предыдущих версиях SQL Server триггеры применялись только для событий типа вставки или удаления записей. В SQL Server 2005 триггеры можно генерировать для операций создания и удаления таблиц, представлений, процедур и т.п. DDL-триггеры могут быть связаны с командами CREATE, ALTER и DROP. Эту функциональность можно использовать, например, для отсылки нотификационных сообщений об изменениях схемы базы данных.

Вывод данных в DML-конструкциях

Еще одна новинка в языке T-SQL — это возможность вывода данных из DML-конструкций типа INSERT, UPDATE и DELETE. Новая конструкция OUTPUT позволяет получить список вставленных, обновленных или удаленных (в зависимости от DML-операции) данных.

Конструкция WAITFOR

Расширенная функциональность команды WAIFOR заключается в том, что теперь можно указать на необходимость ожидания результатов выполнения команды RECEIVE — это связано с поддержкой новой асинхронной модели на базе SQL Service Broker.

Тип данных varchar(max)

Новый тип данных varchar(max) представляет собой расширение типов данных varchar, nvarchar и varbinary. Как и типы данных text, ntext и image, тип данных varchar(max) может содержать до 2 Гбайт данных. Но, в отличие от типов данных text, ntext и image, тип данных varchar(max) может содержать как текстовые, так и бинарные данные.

Новый тип данных поддерживает ту же модель работы, что и тип данных varchar, — к нему применимы все строчные функции языка T-SQL, включая функцию SUBSTRING для извлечения фрагментов данных. Конструкция UPDATE была расширена и позволяет обновлять фрагменты данных, хранящихся в колонке типа varchar(max).

Аварийное завершение транзакций

Используя новую для SQL Server 2005 модель обработки исключений — Try/Catch, можно выполнять обработку аварийного завершения транзакций без потери транзакционного контекста. Таким образом, возможно повторное воспроизведение транзакции после ее аварийного завершения.

Язык T-SQL по-прежнему остается лучшим средством для низкоуровневых операций доступа к данным. Хранимые процедуры, выполняющие операции вставки, обновления или удаления записей, по-прежнему должны создаваться средствами языка T-SQL, тогда как обработка данных — это задача для управляемого кода.

В начало В начало

Бизнес-логика на управляемом коде

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

Следующий этап миграции — это разнесение бизнес-логики между «средним» звеном и базой данных. Цель данного этапа — обеспечить большую производительность приложения за счет того, что ряд операций по обработке данных переносится к данным. Это достигается благодаря тому, что вы выполняете рефакторинг логики, расположенной на «среднем» звене, и выделяете те части, которые связаны с обработкой данных. Основными критериями при анализе кода являются:

  • объемность операций по преобразованию данных (насколько эти преобразования связаны с бизнес-логикой);
  • объемы данных, передаваемые на «среднее» звено (насколько получаемые данные соответствуют требуемым данным);
  • характер обработки данных.

Исходя из результатов анализа и рефакторинга, можно составить план переноса части бизнес-логики на сторону данных — реализовать ее в виде хранимых процедур и функций на управляемом коде, выполняемом внутри SQL Server 2005.

Возможно, анализ «среднего» звена и рефакторинг следует совместить с работами по изменению или расширению архитектуры самого приложения, использующего SQL Server 2005 в качестве хранилища данных.

В начало В начало

Изменение/расширение архитектуры приложения

Наверное, самый существенный этап миграции на SQL Server 2005 — это решение об использовании новых сервисов и соответственно об изменении и/или расширении архитектуры самого приложения. Как и в случае с переносом части бизнес-логики на сторону сервера баз данных, здесь трудно дать какие-то конкретные рекомендации, поэтому мы рассмотрим несколько сценариев, которые могут быть реализованы благодаря применению новых или расширению сервисов SQL Server 2005.

Нотификационные сервисы

Нотификационные сервисы впервые появились в 2002 году как бесплатное дополнение к SQL Server 2000, а в SQL Server 2005 они стали полноценной частью продукта. Нотификационные сервисы — это механизм для реализации приложений, посылающих сообщения подписчикам. Эти сервисы могут использоваться для доставки персонализированной информации различным типам клиентов с помощью разных механизмов. Например, нотификационные сервисы применяются в сервисе MSN для отсылки новостей и другой информации мобильным пользователям, а в сервисе ESPN.com служат механизмом доставки спортивной информации.

Среди сценариев использования нотификационных сервисов можно выделить следующие:

• отсылка информации клиентам: всевозможные варианты рассылки (электронная почта, органайзеры, мобильные телефоны) обновленной или измененной информации — снижение остатка на счету, изменение времени вылета или прибытия рейса, совпадение критериев отложенного поиска и т.п.;

• взаимодействие бизнес-приложений: при изменении каких-либо заданных критериев нотификационное сообщение отсылается сотруднику, отвечающему за данное направление;

• операционное управление:

- нотификации от автоматизированных линий сборки,

- нотификации об ошибках и сбоях в работе систем или оборудования;

• взаимодействие между сотрудниками:

- уведомления о публикации/обновлении документов,

- рассылка отчетов и прочей информации.

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

SQL Server Service Broker

Service Broker —– это новый компонент SQL Server 2005, предназначенный для поддержки асинхронных очередей сообщений, позволяющих существенно повысить масштабируемость приложений, создаваемых на основе SQL Server 2005. Типовыми сценариями использования Service Broker могут быть:

  • асинхронные триггеры: использование Service Broker позволяет запустить асинхронную операцию и немедленно завершить текущую транзакцию. Таким образом можно существенно ускорить выполнение ряда операций;
  • распределенная обработка запросов: Service Broker обеспечивает надежную распределенную обработку запросов независимо от доступности оборудования, наличия сбоев и т.п. В этом сценарии приложение посылает запросы в виде сообщений Service Broker. Сервис получает сообщение, выполняет запрос и возвращает результат. Все три операции выполняются в рамках одной транзакции, поэтому в случае сбоя сообщение возвращается в очередь сообщений и после восстановления опять обрабатывается;
  • распределенный сбор данных: Service Broker можно использовать в качестве надежного механизма для сбора данных из различных источников. Один из вариантов реализации такого сценария — обновление центрального хранилища данных;
  • консолидация данных для клиентских приложений: в таком сценарии Service Broker можно применять для параллельного выполнения запросов к различным источникам данных — это позволит существенно сократить время реакции системы;
  • масштабная пакетная обработка данных: в этом случае Service Broker используется как механизм для организации очередей и параллельной обработки данных.

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

Web-сервисы

В SQL Server 2005 ядро базы данных обеспечивает встроенную поддержку Web-сервисов на уровне следующих стандартов: HTTP, SOAP версий 1.1 и 1.2 и WSDL. Для поддержки данной функциональности требуется HTTP Listener (Http.sys) — компонент операционной системы, доступный в Windows Server 2003 и Windows XP Service Pack 2.

Возможен такой сценарий использования Web-сервисов в SQL Server 2005, как посылка SOAP-запросов экземпляру SQL Server 2005 для выполнения пакетных команд с параметрами или без таковых и для вызова хранимых процедур и функций, возвращающих скалярные значения.

Применение Web-сервисов позволяет, например, обращаться к SQL Server 2005 с любой платформы или с любого устройства, поддерживающего XML и HTTP, что обеспечивает работу сервера в гетерогенных средах.

В начало В начало

Заключение

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

 

На нашем CD-ROM вы найдете предыдущие части этой статьи.

КомпьютерПресс 1'2006

Наш канал на Youtube

1999 1 2 3 4 5 6 7 8 9 10 11 12
2000 1 2 3 4 5 6 7 8 9 10 11 12
2001 1 2 3 4 5 6 7 8 9 10 11 12
2002 1 2 3 4 5 6 7 8 9 10 11 12
2003 1 2 3 4 5 6 7 8 9 10 11 12
2004 1 2 3 4 5 6 7 8 9 10 11 12
2005 1 2 3 4 5 6 7 8 9 10 11 12
2006 1 2 3 4 5 6 7 8 9 10 11 12
2007 1 2 3 4 5 6 7 8 9 10 11 12
2008 1 2 3 4 5 6 7 8 9 10 11 12
2009 1 2 3 4 5 6 7 8 9 10 11 12
2010 1 2 3 4 5 6 7 8 9 10 11 12
2011 1 2 3 4 5 6 7 8 9 10 11 12
2012 1 2 3 4 5 6 7 8 9 10 11 12
2013 1 2 3 4 5 6 7 8 9 10 11 12
Популярные статьи
КомпьютерПресс использует