Microsoft SQL Server 2000. Краткий обзор новинокИсточник: КомпьютерПресс, 9'2000 Алексей Федоров
Оглавление
В данном обзоре мы ознакомимся с основными новинками в Microsoft SQL Server 2000 - следующей версии серверной СУБД фирмы Microsoft, выпуск которой ожидается в скором времени. Отдельная статья, публикуемая в данном номере, посвящена обсуждению Analysis Services в Microsoft SQL Server 2000 - новых OLAP- и Data Mining-средств, появившихся в SQL Server 2000. Новая версия Microsoft SQL Server - Microsoft SQL Server 2000 - построена на базе Microsoft SQL Server 7.0 (обзор современных серверных СУБД см. в КомпьютерПресс 5’2000) Варианты поставки SQL Server 2000Microsoft планирует выпустить следующие варианты поставки SQL Server 2000:
А теперь перейдем к рассмотрению основных новинок в SQL Server 2000. Расширения реляционной базы данныхПоддержка XMLНаиболее заметной новинкой в SQL Server 2000 стала поддержка языка XML и реализация возможности возвращения данных в формате XML - универсальном формате представления, передачи и хранения данных. Так как основное назначение генерации XML-результатов запросов - это использование SQL Server в Web, то поддержка XML тесно связана еще с одной новинкой в данной версии - возможностью доступа к серверу по протоколу HTTP через URL. Таким образом, первым нашим шагом будет создание виртуального каталога на Web-сервере, что достигается вызовом команды Configure SQL XML Support in IIS из меню Programs / SQL Server Tools. Каждый виртуальный каталог связан с конкретной базой данных на сервере. Новое ключевое слово FOR XML позволяет получить результат запроса в виде XML. Имеется три режима вывода результата: RAW, AUTO и EXPLICIT. Данное ключевое слово позволяет также получить DTD-схему документа.
возвращает <row CustomerID="1" OrderDate="10.12.99" /> <row CustomerID="2" OrderDate="12.01.00" />
возвращает <Customers CustomerID="1» > <Orders OrderDate="10.12.99» /> <Orders OrderDate="15.11.99» /> </Customers>
Для доступа к серверу и выполнения SQL-запросов через URL, после того как виртуальный каталог на сервере определен, можно задать в браузере следующий «адрес»: http://localhost/northwind?sql=SELECT+’<ROOT>’;SELECT+ContactName,+ _ Phone+FROM+Customers+FOR+XML+RAW;SELECT+’</ROOT>’ что эквивалентно следующему запросу на языке Transact-SQL: SELECT ContactName, Phone FROM Northwind.dbo.Customers Более простой синтаксис используется при вызове хранимых процедур, например: http://localhost/northwind?sql=SELECT+’<ROOT>’;EXECUTE+CategoryInfo; SELECT+’</ROOT>’ где CategoryInfo - имя хранимой процедуры. При генерации XML также можно использовать шаблоны, хранимые в файлах. Такие шаблоны, написанные на языке XML, могут выполнять SQL-запросы и хранимые процедуры, а также иметь параметры. Пример шаблона показан ниже: <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> <sql:query> SELECT OrderID, UnitPrice, Quantity FROM [Order Details] WHERE UnitPrice > 10 FOR XML AUTO </sql:query> </ROOT> Шаблон выполняется заданием в браузере следующего «адреса»: http://localhost/northwind/queries/entity.xml Помимо извлечения данных в формате XML, SQL Server 2000 позволяет эффективно хранить XML-данные, поддерживать взаимоотношения и иерархии данных, использовать XML-представления реляционных данных и накладывать XML-данные на реляционные таблицы. В SQL Server 2000 введено понятие аннотаций (расширений) для языка определения схем XDR (XML-Data Reduced). Такие аннотации используются для задания двунаправленных наложений XML-данных на реляционные данные. Элементы и атрибуты XML-документов отображаются в таблицы и колонки баз данных. По умолчанию имя элемента в схеме отображается на имя таблиц или представления в указанной базе данных, а имя атрибута - на имя колонки. Существуют следующие аннотации для отношений и отображений:
Применение XML-представлений позволяет обращаться к реляционным таблицам как к XML-документам. OpenXML используется для выполнения SQL-запросов к XML-документам. OpenXML - это ключевое слово Transact-SQL, возвращающее набор данных по XML-документу. Записи из такого набора могут быть сохранены в таблицах базы данных. Ключевое слово может быть использовано совместно с выражениями SELECT, SELECT INTO там, где допускается использование таблиц, представлений или ключевого слова OPENROWSET. Для написания SQL-запросов с использованием OpenXML сначала необходимо создать внутреннее представление XML-документа - для этого служит хранимая процедура sp_xml_preparedocument. Эта процедура возвращает ссылку на XML-документ, которая затем передается OpenXML. Помимо упомянутой выше в SQL Server 2000 имеется еще пять новых хранимых процедур для манипуляции XML-данными:
Новые типы данныхВ SQL Server 2000 появилось три новых типа данных - bigint, sql_variant и table. Тип данных bigint - это 8-байтовое целое, позволяющее представлять знаковые целые числа в диапазоне от -263 до 263-1. Соответственно появились и новые функции: count_big()и rowcount_big(), которые соответствуют функции COUNT и переменной @@ROWCOUNT, но возвращают значение типа bigint. Тип данных sql_variant способен хранить любой скалярный тип данных, кроме text, ntext, image, timestamp и sql_variant, может быть использован в колонках, параметрах, переменных, индексах (если длина ключа не превышает 900 байт) и участвовать в ограничениях ключей, но не может выступать в роли identity. Применяя тип данных sql_variant, следует помнить, что необходимо преобразовывать хранимые данные к оригинальному типу - для этого служит функция CAST. Для получения информации об оригинальном типе данных можно использовать новую функцию SQL_VARIANT_PROPERTY. Тип данных table позволяет определять локальные переменные типа «таблица», например: DECLARE @t table(id int, name varchar(30)) INSERT @t values(12, ‘Alex’) SELECT id FROM @t Над переменными типа table можно выполнять операции SELECT, INSERT, UPDATE, DELETE (кроме операций SELECT…INTO и INSERT…EXEC), но операции ALTER, DROP, TRANCATE TABLE недопустимы. В приведенной таблице показаны основные отличия табличного типа от временных таблиц:
Пользовательские функцииПоддержка пользовательских функций (User-Defined Functions, UDF) является еще одной важной новинкой в SQL Server 2000. С помощью новых операторов CREATE FUNCTION, ALTER FUNCTION и DROP FUNCTION пользователи могут расширять функциональность языка Transact-SQL. Существует три типа пользовательских функций:
Ниже показан пример пользовательской функции, преобразующей дату: CREATE FUNCTION DemoFunc(@indate datetime, @separator char(1)) RETURNS nchar(20) AS BEGIN RETURN CONVERT(nvarchar(20), datepart(mm, @indate)) + @separator + CONVERT(nvarchar(20), datepart(dd, @indate)) + @separator + CONVERT(nvarchar(20), datepart(yy, @indate)) END Пользовательская функция может использоваться следующим образом: SELECT OrderID, ‘Order Date’ = dbo.DemoFunc(OrderDate, ‘/’), ‘Ship Date’ = dbo.DemoFunc(ShippedDate, ‘/’) FROM Orders WHERE OrderID < 11000 Среди ограничений пользовательских функций отметим, что в качестве параметров возможно использование только скалярных типов данных, возвращаемые функциями значения - только скаляры или таблицы. Например, пользовательская функция не может вернуть курсор. В теле функции не разрешен вызов процедур и строк, использование операторов DDL и операторов начала/завершения транзакций, нельзя модифицировать данные в таблицах, если эти таблицы не являются локальными переменными. Нельзя также создавать временные хранимые функции. Триггеры INSTEAD OF и AFTERВ SQL Server 2000 существует три вида триггеров, один из которых (INSTEAD OF триггер) является новинкой в данной версии:
Каскадная ссылочная целостностьВ SQL Server 2000 появилась возможность управления действиями, происходящими при удалении или обновлении ключа, для которого существует foreign-ключ. Для этого используются новые выражения ON DELETE и ON UPDATE в секции REFERENCES операторов CREATE TABLE и ALTER TABLE. Расширения порядка сортировкиПри установке SQL Server 7.0 было необходимо указать кодовую страницу по умолчанию и порядок сортировки. Таким образом, все базы данных были связаны с определенной кодовой страницей и порядком сортировки. В SQL Server 2000 этот подход расширен за счет введения понятия колляции (collation) - коллекции из трех свойств: порядка сортировки для Unicode-данных, порядка сортировки для не-Unicode-данных и кодовой страницы, используемой для хранения не-Unicode символьных данных. Помимо поддержки всех существовавших в предыдущей версии колляций и Windows-колляций, в SQL Server 2000 появилась возможность задания колляций на уровне базы данных или колонки, что существенно облегчает создание многоязыковых приложений. Ниже показаны возможные варианты использования колляций: == Колляции на уровне базы данных CREATE DATABASE MyDB COLLATE Latin1_General_CS_AI == Три разные колляции в одной таблице CREATE TABLE Products (ProductId char(20), _ ProductName char(20) COLLATE French_CS_AS, _ Description char(20) COLLATE French_CI_AI) == Использование колляции по умолчанию (French_CS_AS) SELECT * FROM PRODUCTS ORDER BY ProductName, Description == Указание колляции в выражении (French_CI_AI) SELECT * FROM PRODUCTS ORDER BY ProductName COLLATE French_CI_AI == Указание колляции для колонки (French_CI_AI) SELECT productId, ProductName COLLATE French_CI_AI productName,_ Description FROM Products Расширенные свойстваВ новой версии SQL Server реализована концепция расширенных свойств объектов, хорошо знакомая пользователям Microsoft Access. Расширенные свойства могут использоваться для хранения различной информации, специфичной для приложения, и представляют собой пары «имя/значение» типа sql_variant объемом до 7500 байт. Для реализации расширенных свойств введены три новые системные хранимые процедуры:
и функция fn_listextendedproperty для извлечения расширенных свойств объекта. Ниже показан пример использования расширенных свойств: EXEC sp_addextendedproperty ‘caption’, ‘Employee_Id’, ‘user’, dbo, ‘view’, foo_view, ‘column’, id SELECT * FROM ::fn_listextendedproperty (‘caption’, ‘user’, ‘dbo’, ‘view’, ‘foo_view’, ‘column’, NULL) Еще о новинкахГоворя о новинках в SQL Server 2000, нельзя не упомянуть и улучшенную оптимизацию обработки запросов с TOP N. В SQL Server 7.0 используется полная сортировка для извлечения данных, в SQL Server 2000 - специальный оптимизированный механизм Top ‘n’ Engine. Также следует отметить введение индексированных представлений (Indexed Views), использование которых существенно повышает производительность приложения в тех случаях, когда часто используются запросы, выполняющие объединения и/или агрегации. Теперь можно создавать индексы для вычисляемых колонок, указывать, как строятся индексы (в восходящем или нисходящем порядке) и должно ли ядро сервера использовать параллельное сканирование и сортировку во время создания индекса. В SQL Server 2000 появился ряд расширений в полнотекстовом поиске. Функция change tracking протоколирует все изменения в индексированных полнотекстовых данных, а фильтрация полей типа image (image filtering) позволяет индексировать и извлекать документы, хранимые в таких колонках. Поддерживаются фильтры для документов MS Office и HTML. Стоит упомянуть и еще одну новинку - Log Shipping. Этот механизм позволяет создавать резервные копии протоколов транзакций. Протокол транзакций, выполняемых в одной базе данных на исходном сервере, копируется в базу данных на другом сервере, что позволяет организовать так называемый сервер теплого резерва (warm standby server) или разгрузить сервер за счет переноса части запросов на другой сервер. Для управления Log Shipping используется Log Shipping Monitor. Расширенные средства администрированияSQL Profiler теперь позволяет подключаться к серверу, как и SQL Query Analyzer. Можно использовать шаблоны для трассировки (ранее для этого использовался мастер Create Trace Wizard и описания трассировки, хранимые в реестре), предопределенные шаблоны: Dead Lock, Replay, Tuning, Stored Procedure и т.п. Помимо этого поддерживается трассировка по размеру (size-based trace) и времени (time-based trace) и новые события для 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 Query Analyzer включает браузер объектов Object Browser, позволяющий получать информацию об объектах базы данных, в том числе пользовательские и системные таблицы, представления, хранимые процедуры, расширенные хранимые процедуры и функции. Кроме того, реализованы интегрированная трассировка, связь с Tuning Wizard, клиентская статистика, встроенный отладчик T-SQL (отладка хранимых процедур, глобальные и локальные переменные, стек вызовов), выделение синтаксиса цветом (различные цветовые схемы для SQL Server 6.5, 7.0 и 2000). Мастер Index Tuning Wizard интегрирован с SQL Query Analyzer (вместо Index Analysis в предыдущей версии). Добавлена поддержка индексированных представлений (Indexed View) и индексов для вычисляемых колонок. Удаляемые индексы отображаются на отдельной странице. SQL Mail теперь поддерживает ODBC вместо DB-Library, Extended MAPI (вместо Simple MAPI в предыдущей версии), UNICODE и параметры типа Long. Web Assistant также поддерживает UNICODE и параметры типа Long. Расширения репликацииРяд новинок, появившихся в SQL Server 2000, связан с репликацией. Так, в новой версии расширены возможности репликации моментальных снимков (snapshot replication), репликации транзакций (transactional replication) и репликации сведением (merge replication):
Расширена также интеграция репликаций и Data Transformation Services (DTS). В частности, переносимые подписки (transformable subscriptions) могут использовать механизмы переноса данных, трансформации и фильтрации DTS. Расширения Data Transformation ServicesРяд расширений, введенных в Data Transformation Services, дают возможность, в частности, использовать ключи и ограничения. Используя за счет введения мастера импорта и экспорта, можно, кроме данных, перемещать первичные и внешние ключи и ограничения. DTS Designer и объектная модель DTS позволяют создавать в SQL Server 2000 пользовательские задачи. Например, можно импортировать данные, пересылать их и пакеты на Internet- и FTP-узлы, выполнять пакеты асинхронно, создавать пакеты, обменивающиеся сообщениями, пакеты, выполняющие другие пакеты, и объединять выполнение нескольких пакетов в рамках одной транзакции. Помимо этого появилась возможность сохранения DTS-пакетов в виде файлов Microsoft Visual Basic. Это позволяет использовать пакеты, созданные в DTS Import Wizard, DTS Export Wizard или DTS Designer, в приложениях, написанных на Visual Basic, и более просто обращаться к объектной модели DTS. ЗаключениеВ этом обзоре мы рассмотрели некоторые новинки, появившиеся в Microsoft SQL Server 2000. Естественно, в рамках одной статьи невозможно осветить все изменения, улучшения и дополнения, реализованные в данной версии. Так, например, проблема использования именованных экземпляров сервера заслуживает более детального (нежели приведенное ниже) рассмотрения. Тем не менее несколько слов на эту тему хотелось бы сказать. В SQL Server 2000 появилась возможность использования именованных экземпляров - одновременно может работать до 15 копий SQL Server. По умолчанию запускается одна копия SQL Server: net start MSSQLSERVER Именованные экземпляры запускаются командой: net start MSSQLSERVER$InstanceN (где N - от 1 до 15) После того как продукт выйдет (а это должно произойти в конце нынешнего года), мы еще раз обратимся к теме новинок в SQL Server 2000 и более подробно остановимся на тех, которые нам не удалось рассмотреть в этом обзоре. Мы также планируем опубликовать ряд статей, посвященных программированию с использованием SQL Server. |