Microsoft SQL Server 2000. Краткий обзор новинок
Варианты поставки SQL Server 2000
Расширения реляционной базы данных
Каскадная ссылочная целостность
Расширенные средства администрирования
Расширения Data Transformation Services
В данном обзоре мы ознакомимся с основными новинками в 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 2000
Microsoft планирует выпустить следующие варианты поставки SQL Server 2000:
- SQL Server 2000 Enterprise Edition. Наиболее полная версия продукта, подходящая для любой организации. Рассчитан на работу с мощными компьютерами, поддерживает до 32 процессоров и 64 Гбайт памяти (благодаря использованию механизма Address Windowing Extensions, AWE, поддерживаемого в Windows 2000 Advanced Server и DataCenter Server).
- SQL Server 2000 Standard Edition. Версия, предназначенная для малых и средних организаций. Может использоваться в SMP-системах, поддерживает до четырех процессоров и 2 Гбайт памяти.
- SQL Server 2000 Personal Edition. Версия для отдельных пользователей, содержащая полный набор административных средств и реализующая практически всю функциональность Standard Edition. Помимо работы с серверными операционными системами, может функционировать под Windows 2000 Professional, Windows NT Workstation и Windows 98. Поддерживает два процессора, базы данных любого размера, но оптимизирована на одновременную работу не более чем пяти пользователей.
- SQL Server 2000 Developer Edition. Версия предназначена для разработчиков и представляет собой версию Enterprise Edition, но без лицензии на внедрение созданных приложений.
- SQL Server 2000 Desktop Engine (MSDE). Ядро базы данных без пользовательского интерфейса, средств администрирования, OLAP-средств, библиотек и Books Online. Кроме того, ограничен размер создаваемой базы данных.
- SQL Server 2000 Windows CE Edition. Версия SQL Server 2000 для устройств, работающих под управлением Windows CE. Обеспечивает программную совместимость с другими версиями SQL Server 2000, позволяя создавать приложения для широкого класса устройств — от компьютеров high-end до мобильных устройств.
А теперь перейдем к рассмотрению основных новинок в 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-схему документа.
- FOR XML RAW — в этом случае каждая запись возвращается как элемент
документа с тэгом row, каждое поле является атрибутом элемента. Например,
запрос:
SELECT Customers.CustomerID, Orders.OrderID FROM Customers, Orders WHERE Orders.CustomerID= Customers.CustomerID FOR XML RAW
возвращает
<row CustomerID="1" OrderDate="10.12.99" /> <row CustomerID="2" OrderDate="12.01.00" />
- FOR XML AUTO — в этом случае каждая запись является элементом документа
с тэгом, который несет имя таблицы. Каждое поле является атрибутом элемента.
Например, запрос:
SELECT Customers.CustomerID, Orders.OrderID FROM Customers, Orders WHERE Orders.CustomerID= Customers.CustomerID FOR XML AUTO
возвращает
<Customers CustomerID=“1» > <Orders OrderDate=“10.12.99» /> <Orders OrderDate=“15.11.99» /> </Customers>
- FOR XML EXPLICIT — позволяет получить XML любой структуры, но требует специального построения запроса.
Для доступа к серверу и выполнения 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-документов отображаются в таблицы и колонки баз данных. По умолчанию имя элемента в схеме отображается на имя таблиц или представления в указанной базе данных, а имя атрибута — на имя колонки. Существуют следующие аннотации для отношений и отображений:
- sql:relation — используется для указания имени таблицы или представления, когда это имя не соответствует полю в схеме;
- sql:field — задает отображение элемента или атрибута схемы на колонку в базе данных;
- sql:overflow-field — когда записи вставляются в базу данных из XML-документа, все неиспользованные данные из документа могут быть сохранены в колонке. При извлечении данных из базы данных посредством аннотированных схем атрибут sql:overflow-field может указать колонку, в которой хранятся такие данные;
- sql-relationship — используется для задания связи между таблицами.
Применение 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-данными:
- sp_xml_fetchdocument;
- sp_xml_removedocument;
- sp_xml_insertfromxml;
- sp_xml_removexml;
- sp_xml_fetchintoxml.
Новые типы данных
В 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 недопустимы. В приведенной таблице показаны основные отличия табличного типа от временных таблиц:
Временные таблицы | Табличные переменные | |
---|---|---|
Область действия | Вся сессия от момента создания | Только текущий модуль |
Видимость между сессиями | Да (для глобальных временных таблиц) | Нет |
Затраты на перекомпиляцию | Каждый раз при CREATE/ALTER | Нет |
Протоколирование транзакций | Как для обычных таблиц | Только на время действия оператора |
Индексы | Можно создавать явно | Только те, которые подразумеваются ограничениями PRIMARY KEY и UNIQUE |
Пользовательские функции
Поддержка пользовательских функций (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 триггер) является новинкой в данной версии:
- AFTER-триггер выполняется после действия, вызвавшего включение данного триггера. Такие триггеры, являющиеся традиционными для SQL Server, могут быть установлены только на таблицы. В новой версии SQL Server появилась возможность назначения первого и последнего триггера — с помощью системной хранимой процедуры sp_settriggerorder, но порядок выполнения промежуточных триггеров предсказать нельзя;
- BEFORE-триггер выполняется перед действием, вызвавшим включение данного триггера;
- INSTEAD OF-триггер — новинка в SQL Server 2000 — выполняется вместо какого-либо действия (INSERT, UPDATE, DELETE). Такие триггеры могут быть определены и для представлений, что существенно расширяет типы обновлений, поддерживаемых представлениями.
Каскадная ссылочная целостность
В 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 байт. Для реализации расширенных свойств введены три новые системные хранимые процедуры:
- sp_setextendedproperty
- sp_dropextendedproperty
- sp_updateextendedproperty
и функция 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):
- за счет введения альтернативных местоположений моментальных снимков снимки могут сохраняться в файлах на локальной сети, на FTP-узле, на сменных носителях и т.п.;
- присоединяемые базы данных подписчиков позволяют переносить базы данных с реплицируемыми данными и одной или более подпиской от одного подписчика к другому;
- изменения схемы позволяют добавлять или удалять поля в публикуемой таблице и распространять изменения подписчикам;
- поддержка новых возможностей SQL Server, включая пользовательские функции, индексированные представления, новые типы данных и т.п.;
- ActiveX-компонент Snapshot Control, позволяющий создавать моментальные снимки из программ.
Расширена также интеграция репликаций и 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.
КомпьютерПресс 9'2000