(Возврат на основную страницу)
Независимо от того, какие новые функции добавляют в СУБД, выход очередной версии всегда сопровождается всплеском результатов стандартного тестирования производительности. Проведение стандартизированных тестов — это серьезная работа в индустрии производства СУБД, которая позволяет обратить на себя внимание, обеспечивает узнаваемость имени продукта, демонстрирует новые возможности, — все это сопровождает результаты, публикуемые тестирующими организациями.
После выпуска новой версии все поставщики СУБД, такие как Microsoft, IBM и Oracle, тратят сотни тысяч долларов на сборку систем и формирование команд, выполняющих тестирование по стандартам, определяемым Transaction Processing Performance Council (TPC). Всегда предполагается, что новая версия работает быстрее предыдущей, и при удачном стечении обстоятельств конкуренция начинает очередной виток.
В этом смысле SQL Server 2005 не является исключением. Не так давно Microsoft и SQL Server 2005 вошли в клуб миллионеров, продемонстрировав более 1 миллиона транзакций в минуту (tpmC), и достигли 1231433 tmpC в тесте TPCC в категории без использования кластера. Это наилучший на настоящий момент результат на платформе Windows c использованием процессоров Itanium 2 от Intel. Тестирование производилось на 64процессорном сервере HP Integrity Superdome, оснащенном процессорами 1,6 ГГц Itanium 2, на которых работала 64разрядная версия SQL Server 2005 Enterprise Edition под управлением 64разрядной версии Windows Server 2003 Datacenter Edition. Хотя этот результат несомненно очень хорош для SQL Server, он почти втрое ниже, чем у рекордсмена в этой категории — IBM's DB2 Universal Database (UDB) версии 8.2, получившей 3210540 tpmC. Рекорд был поставлен на 64процессорном сервере от IBM (eServer p5 595), оснащенном процессорами POWER5 и работавшем под управлением AIX OS. Стоит отметить, что в качестве менеджера транзакций использовался COM+ от Microsoft. Объем оперативной памяти на сервере был вдвое больше, Windows не поддерживает более 1 Тб оперативной памяти, а тесты IBM исполнялись с памятью в 2 Тб.
Кроме того, SQL Server 2005 поставил новый рекорд в категории «ценапроизводительность» (на этот раз мировой рекорд, лучший результат на всех платформах в тесте TPCC). Этот результат был получен с использованием 64разрядной версии SQL Server 2005 Standard Edition, исполнявшейся на 1процессорном сервере Dell 2800, оснащенном процессором Intel 2,8 ГГц Xeon и работавшем под управлением 64разрядной Windows 2003 Standard Edition. Указанная система получила 38622 tmpC при стоимости 99 центов за транзакцию.
Хотя некоторые считают, что результаты стандартных тестов бессмысленны, так как их условия не соответствуют производственным реалиям или конкретным примерам работы, приводимым скептиками. Я же полагаю, что стандартные тесты TPCC достаточно успешно демонстрируют способности масштабирования СУБД высшей категории, а результаты, касающиеся ценыпроизводительности, позволяют оценить, насколько предложения поставщика близки к действительности. Тесты выполняются самими компаниями — поставщиками СУБД, что дает производителю возможность в полной мере использовать накопленные знания по применению продукта. Подобный подход позволяет исключить все кривотолки относительно того, насколько качественно была сконфигурирована система.
Первый подход к тестированию SQL Server 2005 пройден. Но я уверен, что этим дело не ограничится. На подходе многоядерные процессоры, которые наверняка существенно изменят ландшафт тестирования. Первые результаты тестов с использованием двуядерных Itaniumсистем показывают примерно 60%е увеличение процессорной мощи по сравнению с одноядерными системами. Наверняка новые двуядерные процессоры x64 AMD Opteron поставят ряд новых рекордов. Более подробную информацию о результатах тестирования и самих тестах можно найти по ссылке http:// www.tpc.org и на сайте Microsoft (http://www.Microsoft.com/sql/evaluation/compare/bench marks.mspx).
В SQL Server 2005 появилось много новых функциональных возможностей безопасности. В этом смысле новая версия намного совершеннее, чем SQL Server 2000. Здесь есть чем похвалиться — улучшенная модель проверки подлинности, огромный выбор способов шифрования, подписи кода и значительно исправленный (уже не setuser!) набор возможностей контекста исполнения.
Насколько защищены ваши данные?
Конечные пользователи хотят, чтобы их данные были в безопасности. Для этого в SQL Server 2005 предусмотрено несколько уровней шифрования. Самый простой способ может оказаться не лучшим выбором, поскольку не способен обеспечить должную степень защиты.
Электронная документация представляет собой отличный ресурс, которым стоит воспользоваться, чтобы узнать синтаксис разных способов шифрования данных. Для ясности я буду время от времени делать ссылки на различные языковые конструкции, которые надо будет задействовать. Но первичная цель этой статьи состоит в том, чтобы показать, какую безопасность гарантирует тот или иной выбранный механизм защиты.
Хорошо известно, что данные в SQL Server 2005 всегда следует защищать симметричным ключом. Симметричный ключ можно обезопасить посредством пароля, сертификата, асимметричного ключа или любого пользовательского симметричного ключа в зависимости от желаемого уровня защиты.
Чтобы принять правильное решение, конечному пользователю необходимо ответить на вопрос, от кого он стремится защитить свои данные:
• уровень 2 — от атак, получающих доступ к файлам данных (защита данных в состоянии покоя);
• уровень 1 — уровень 2 + от sysadmin;
• уровень 0 — уровень 1 + от dbo.
Крайняя защита: только я могу видеть свои секреты
Для конечных пользователей, которым требуется безопасность уровня 0, необходима защита симметричного ключа только паролем. Это наиболее безопасный вариант, поскольку ни у sysadmin, ни у dbo нет никакого доступа к симметричному ключу, и данные действительно защищены. В состоянии покоя данные также защищены, поскольку, даже если атакующему удастся украсть файлы, он сможет их расшифровать, только узнав пароль. Некоторые могут счесть недостатком необходимость убеждаться в том, что ключ открыт, каждый раз, когда требуется расшифровать или зашифровать данные. Но это небольшая плата за то, что данные гарантированно полностью защищены. Системное представление sys.open_keys покажет все открытые ключи сеанса в каждый момент времени. Если ключ не открыт, следует выполнить следующую инструкцию DDL, чтобы его открыть:
OPEN
SYMMETRIC KEY <èìÿ_êëþ÷à>
Ã
DECRYPTION BY PASSWORD = '<ïàðîëü>'
Мой друг DBO: пусть знает мои секреты
Для конечных пользователей, которым нужен уровень 1 безопасности, требования можно немного ослабить. Симметричный ключ можно защитить сертификатом (или асимметричным ключом). Секретный ключ сертификата (или асимметричный ключ) необходимо защитить главным ключом базы данных, т. е. во время создания сертификата не надо задавать параметр ENCRYPTION BY PASSWORD:
CREATE CERTIFICATE c1 with subject = 'EncrCert'
Если у вас уже имеется сертификат (или асимметричный ключ), защищенный паролем, и вы хотели бы им воспользоваться, можно сменить защиту на главный ключ базы данных следующей инструкцией DDL:
ALTER
CERTIFICATE c1 WITH PRIVATE
Ã
KEY DECRYPTION BY PASSWORD = '<ïàðîëü>'
Это может быть не вполне ясно на интуитивном уровне, но если не задавать параметр ENCRYPTION BY PASSWORD с инструкцией ALTER CERTIFICATE, секретный ключ сертификата будет расшифрован с помощью указанного в параметре DECRYPTION BY PASSWORD пароля и заново зашифрован с помощью главного ключа базы данных (database master key).
Теперь наступает важная часть — защита его от sysadmin. Пользователю базы данных с высокими полномочиями или dbo необходимо убедиться, что главный ключ базы данных защищен только паролем. Во время создания главный ключ базы данных по умолчанию шифруется главным ключом службы. Шифрование главным ключом службы (Service Master Key) снимается явным образом с помощью следующей инструкции DDL:
ALTER MASTER
KEY DROP ENCRYPTION Ã
BY SERVICE MASTER KEY
Если сделать так, владелец базы данных получит доступ к вашим данным, потому что он сможет воспользоваться главным ключом базы данных для расшифровки секретного ключа сертификата, который затем может быть применен для открытия симметричного ключа и расшифровки защищенных данных. Однако вы попрежнему защищены от sysadmin, поскольку он должен быть способен открыть главный ключ базы данных в своем сеансе, а без пароля это сделать нельзя, так как вы удалили шифрование главным ключом службы.
Меня заботят только украденные данные
Для пользователей, которым подходит уровень 2 безопасности, все обстоит просто превосходно. Им надо шифровать данные симметричным ключом, который защищается сертификатом (или асимметричным ключом), как на уровне 1. Сертификат (или асимметричный ключ) защищен главным ключом базы данных, как было продемонстрировано ранее.
Важное отличие состоит в том, что владелец базы данных не должен удалять шифрование главного ключа базы данных главным ключом службы (который он получает по умолчанию во время создания), или же ему надо заново добавить шифрование главного ключа службы следующей инструкцией DDL:
ALTER MASTER KEY ADD ENCRYPTION BY SERVICE MASTER KEY
Теперь у sysadmin есть доступ к главному ключу базы данных и к любой сущности (сертификату или асимметричному ключу), зашифрованной главным ключом базы данных. Разумеется, это означает, что ваши данные не защищены от sysadmin или от владельца базы данных, но данные в состоянии покоя защищены. Если комуто удастся украсть файлы базы данных и подсоединить их к своему экземпляру SQL Server, он все равно не сможет расшифровать зашифрованные данные, потому что не знает пароля для симметричного ключа и у него нет доступа к ключам в иерархии, которые защищают симметричный ключ.
Для уровней безопасности 1 и 2 важно знать, защищен ли главный ключ базы данных главным ключом службы. Вам также следует помнить, что ваш уровень безопасности может упасть с 1 до 2, если владелец вашей базы данных решит вновь добавить главному ключу базы данных защиту главным ключом службы.
В заключение замечу, что всегда имеет место неизбежный конфликт между безопасностью и легкостью использования. Применение иерархии ключей в SQL Server 2005 слегка облегчает административные требования благодаря тому, что не требуется явно открывать симметричный ключ, используемый для защиты данных. Пользуясь этой возможностью, можно построить прозрачную систему шифрования, о которой я расскажу в следующей статье. Но в этом случае вы должны понимать, что ваши данные не защищены от владельцев баз данных и sysadmins. Шифрование симметричных ключей паролем может обеспечить суперзащиту вашим данным, но вам придется управлять открытием и закрытием ключа.
Выберите, что вам подходит лучше всего, но при этом помните о своих потребностях в защите и никогда не идите на уступки в безопасности ради простоты использования!
Рекурсия — это программа, которая повторно вызывает саму себя до тех пор, пока выполняется некоторое условие. Есть одно важное направление, где разработчики баз данных SQL Server могут воспользоваться рекурсией: это прохождение по иерархиям — наборам элементов, связанных отношениями «родительребенок».
Люди все время имеют дело с иерархиями. Каждый день возникает множество задач, для которых надо определить приоритеты. Кроме того, большинство людей находится в рамках служебной иерархии. Классический способ представить иерархию внутри базы данных — добавить объекту столбец с ключом родителя (это просто первичный ключ объекта, играющего роль родителя по отношению к другому).
Как обидно, когда SQL Server делает то, что должен, — лишает вас возможности отправить такой желанный отчет «я обнаружил ошибку!». Прочтите пояснения Тома Моро.
Время от времени происходят глюки, и вы умудряетесь сузить все до однойединственной строки кода. Вы даже можете повторить проблемную ситуацию и понимаете, что нашли ошибку в SQL Server. Вот пример. Используя базу данных pubs, вы хотите получить список всех авторов, а именно: необходимо представить в одном столбце первую букву имени и фамилию и отсортировать все по фамилиям. Несладко вам придется.
Иногда запрос SELECT TOP не выходит на наилучшее значение. Как вам известно, реляционная модель имеет дело с множествами и совершенно равнодушна к порядку следования данных. С другой стороны, люди любят порядок — и некоторые более других (мы называем их «фанатами порядка», «хранителями анналов» и награждаем другими подобными прозвищами). В этой статье я отвечу на часто задаваемый вопрос: «Как получить верхние N строк для заданного значения столбца?». К примеру, как получить три самых недавних заказа не одного, а каждого клиента?
Оператор SELECT TOP появился в версии SQL Server 7.0 — отчасти как ответ на жалобы на то, что, уж если в Microsoft Access поддерживается TOP x, то почему не сделать это в SQL Server.
На базе CTP апреля 2005
* См. Алан Митчелл. SQL Server 2005 Integration Services: задача ExecuteSQL. Часть 1 // SQL Server для профессионалов. 2006. № 1.
Во второй части статьи статьи о задаче ExecuteSQL, входящей в состав служб интеграции SQL Server Integration Services для версии SQL Server 2005, рассматриваются варианты ее применения.
Проходя по примерам применения задачи ExecuteSQL, охватим лишь те, которые, понашему мнению, следует знать и видеть. Таким образом, некоторые элементарные шаги, например присвоение значений переменным, мы покажем в первых примерах и опустим или заменим ссылками в последующих. В каждом из них используется база данных AventureWorks, поставляемая с SQL Server 2005.
SQL Server 2005 предоставляет множество новых утилит командной строки. Одна из них называется sqlcmd. Она используется для интерактивного запуска специальных запросов из командной строки, а также для выполнения сценариев, содержащих инструкции TÃSQL. Утилита sqlcmd значительно совершеннее по сравнению с osql и isql прежних выпусков SQL Server. В этой статье я расскажу о некоторых функциональных возможностях, которые она предлагает для администрирования SQL Server.
Утилита sqlcmd может применяться для интерактивного исполнения команд T-SQL из командной строки. Для интерактивного запуска утилиты sqlcmd необходимо активизировать сеанс командной оболочки, затем набрать «sqlcmd» в командной строке и нажать клавишу ввода. Запуск утилиты sqlcmd без какихлибо параметров открывает интерактивный сеанс, в котором команды TÃSQL будут выполняться в применяемом по умолчанию экземпляре SQL Server с использованием проверки подлинности Windows. Утилита sqlcmd может запускаться в разных экземплярах SQL Server с помощью переключателя S или команды :Connect.
Программа установки SQL Server 2005 проектировалась для минимизации числа ошибок инсталляции и совершенствования этого процесса. В этой статье изложены основные концепции, относящиеся к установке и развертыванию SQL Server 2005. Сюда вошли темы, посвященные выбору наиболее подходящего выпуска, требованиям к программному и аппаратному обеспечению и процессу обновления версии.
Переход к версии SQL Server 2005
SQL Server 2005 позволяет обновить версии SQL Server 7.0 Service Pack 4, SQL Server 2000 Service Pack 3 и более поздние. Прямое обновление версии SQL Server 6.5 не поддерживается; сначала необходимо перейти от SQL Server 6.5 к SQL Server 7.0 Service Pack 4, а затем воспользоваться программой установки SQL Server 2005 для перехода к версии SQL Server 2005.
Обновление версии требует тщательного планирования и исполнения. Необходимо продумать обновление данных, пакетов DTS, агентских заданий, учетных записей, установок репликации, установок отказоустойчивых кластеров, объектов Analysis Services и полнотекстового поиска, конфигурации служб Reporting Services и Notification Services и т. д. Для помощи в проведении процесса обновления в SQL Server 2005 предусмотрено инструментальное средство Upgrade Advisor, анализирующее систему и установленные компоненты SQL Server 2000 или SQL Server 7.0 и затем генерирующее отчет. В нем указаны вопросы, которые необходимо решить до или после перехода на SQL Server 2005.
Программа установки SQL Server 2005 была усовершенствована, чтобы упростить процесс обновления и уменьшить время нахождения в неработоспособном состоянии. Перед обновлением ядра СУБД необходимо сделать следующее:
• Просмотреть требования к аппаратному и программному обеспечению для установки SQL Server 2005.
• Просмотреть замечания относительно обратной совместимости SQL Server 2005 и внести соответствующие правки в приложения и сценарии.
• Запустить Upgrade Advisor для подготовки к обновлению и разрешить все препятствующие ему проблемы.
• Снять резервные копии всех файлов баз данных того экземпляра, который будет обновляться, чтобы при необходимости их можно было бы полностью восстановить.
• Запустить нужные команды DBCC для обновляемых баз данных, чтобы гарантировать их согласованное состояние.
• Убедиться в том, что в конфигурации системных баз данных SQL Server — master, model, msdb и tempdb — задан параметр autogrow; убедиться в том, что они размещены на носителе с необходимым дисковым пространством.
• Отключить все хранимые процедуры, запускаемые при старте SQL Server, потому что процесс обновления будет останавливать и запускать службы обновляемого экземпляра SQL Server. Выполняемые при запуске хранимые процедуры могут блокировать процесс обновления.
• Остановить репликацию и убедиться в том, что журнал репликаций пуст.
После того как этот подготовительный список будет полностью выполнен, можно запустить программу установки. Когда SQL Server 2005 будет установлен, можно переносить на экземпляр SQL Server 2005 пользовательские базы данных с помощью восстановления резервных копий или посредством подсоединения (attach) файлов БД. Затем можно зарегистрировать сервер, заполнить заново все полнотекстовые каталоги, обновить статистику и запустить утилиту конфигурирования контактной зоны (Surface Area Configuration) для уменьшения зоны уязвимости.
Прежде чем взглянуть на Upgrade Advisor, давайте вспомним те изменения в SQL Server 2005, о которых надо знать, чтобы лучше подготовиться к процессу обновления.
Устаревшие и отмененные функциональные возможности ядра базы данных
Устаревшие функциональные возможности SQL Server 2005 включают те функции, которые будут удалены, — одни в непосредственно следующем выпуске, другие позднее. Ниже приведены некоторые из устаревших функций, которые следует заменить рекомендованными средствами.
• Инструкции DUMP и LOAD устарели, вместо них рекомендуется применять соответственно инструкции BACKUP и RESTORE.
• Инструкция SETUSER устарела, вместо нее рекомендуется применять инструкцию EXECUTE AS.
• Хранимая процедура sp_addtype устарела, вместо нее следует применять CREATE TYPE. Следует также избегать хранимых процедур sp_attach_db и sp_attach_single_file_db, вместо них следует использовать инструкцию CREATE DATABASE с параметрами FOR ATTACH или FORATTACH_REBUILD_LOG.
• Желательно избегать применять хранимые процедуры sp_renamedb, sp_dboption и sp_resetstatus, вместо них рекомендуется использовать инструкцию ALTERDATABASE.
• Необходимо избегать применения хранимых процедур полнотекстового поиска, таких как sp_fulltext_catalog, вместо них рекомендуется использовать инструкции CREATE/ALTER/DROP FULLTEXT CATALOG и CREATE/ALTER/DROP FULLTEXT INDEX.
• Не следует применять хранимые процедуры системы безопасности, такие как sp_addlogin, sp_adduser и т. д., вместо них рекомендуется использовать инструкции CREATE LOGIN, CREATE USER, CREATEROLE и т. д.
• Системные таблицы заменяются представлениями, чтобы сохранить обратную совместимость. Рекомендованный подход заключается в использовании новых представлений системного каталога. Непосредственные изменения системных таблиц более не допускаются.
SQL Server 2005 не поддерживает некоторые функциональные возможности прежних выпусков:
• SQL Server 2005 более не включает English Query.
Такие инструменты, как isql.exe и rebuildm.exe, также не включены, вместо них следует использовать sqlcmd.exe и setup.exe. Если требуется перестроить базу данных master или системный реестр, запустите из командной строки программу установки SQL Server 2005 setup.exe и задайте необходимые параметры. В свое время эти «необходимые параметры» выпили немало моей крови1.
Демонстрационные базы данных Northwind и Pubs заменены новой демонстрационной базой данных AdventureWorks. (Те, кто не мыслит своей жизни без Pubs могут пойти по ссылке http://www.microsoft.com/downloads/details.aspx?FamilyID=06616212035646a08da2eebc53a68034&DisplayLang=en и скачать ее.)
Параметр allow updates хранимой процедуры sp_configure еще присутствует, но, поскольку изменения системных таблиц не поддерживаются, этот параметр потерял смысл.
Meta Data Services 3.0 является компонентом Microsoft SQL Server 2000, который более не доступен в SQL Server 2005. Переход на новую версию не удаляет существующие таблицы репозитория в базе данных msdb. Однако механизм репозитория, который считывает и обновляет таблицы, после обновления будет недоступен, так что таблицы репозитория также будут недоступны. Удаление неиспользуемых таблиц надо провести вручную. У таблиц репозитория имеется префикс Rtbl.
Несовместимые изменения и изменения поведения СУБД
Где только возможно, SQL Server 2005 обеспечивает обратную совместимость, так что приложения можно легко перевести на SQL Server 2005. Однако для лучшей поддержки некоторых новых функций и более точного позиционирования продукта специалисты Microsoft ввели ряд изменений в поведении SQL Server 2005, которые могут потребовать корректировок сущестующего кода.
• SQL Server 2005 добавляет еще один столбец trigger_schema в результирующий набор, который возвращает системная хранимая процедура sp_helptrigger.
• В SQL Server 2000 ключевое слово WITH для введения указаний оптимизатору на уровне таблиц является необязательным. Однако в SQL Server 2005 ключевое слово WITH обязательно указывать за исключением односложных подсказок. Например, запрос SELECT * FROM master.dbo.sysobjects (TABLOCK, HOLDLOCK) будет работать в SQL Server 2000 но не в SQL Server 2005. Чтобы он действовал в SQL Server 2005, необходимо либо указать предложение WITH, либо оставить только одно указание.
• В SQL Server 2000 названия столбцов в предложении ORDER BY разрешаются в соответствии со столбцами, указанными в списке clause SELECT, независимо от того, имеются ли у них квалификации. Однако в SQL Server 2005 квалифицированные названия столбцов и псевдонимы в предложении ORDER BY разрешаются в соответствии со столбцами таблиц, перечисленных в предложении FROM. Рассмотрим следующий сценарий TransactSQL:
USE [Tempdb];
GO
IF OBJECT_ID('dbo.dblTest')
Ã
IS NOT NULL DROP TABLE dbo.dblTest;
GO
CREATE TABLE dbo.dblTest (col1 int,
Ã
col2 varchar(20));
GO
INSERT INTO dbo.dblTest SELECT 1, 'X';
INSERT INTO dbo.dblTest SELECT 2, 'U';
INSERT INTO dbo.dblTest SELECT 3, 'A';
GO
SELECT col1 AS 'col2' Ã
FROM dbo.dblTest a ORDER BY a.col2;
GO
• Если запустить этот сценарий в SQL Server 2000 и в SQL Server 2005, будут получены разные выходные данные в SQL Server 2000 и SQL Server 2005. В SQL Server 2000 псевдонимы таблиц игнорируются, и столбец a.col2, указанный в предложении ORDER BY, отображается на псевдоним столбца в списке SELECT, и потому возвращается 1, 2 и 3. С другой стороны, SQL Server 2005 учитывает псевдонимы таблиц, сортирует результаты по столбцу col2 в таблице dbo.tblTest и потому возвращает 3, 2 и 1.
Программа Upgrade Advisor в SQL Server 2005
Как упоминалось выше, можно воспользоваться инструментальным средством Upgrade Advisor для анализа системы и установленных компонентов SQL Server 2000 и SQL Server 7.0, а также для определения тех вопросов, которые необходимо решить до или после перехода на версию SQL Server2005. Программу Upgrade Advisor составляют два компонента.
• Мастер анализа исследует систему и сохраняет результаты в файле XML. Он не меняет данные и не вносит изменения в настройки компьютера.
• Обозреватель отчетов считывает результаты из файла XML, сгенерированного мастером анализа, и отображает результаты исследования. Он также позволяет отсортировать и отфильтровать результаты. Каждый вопрос обновления версии на экране обозревателя отчетов содержит ссылки «Подробности данного вопроса» и «Как разрешить этот вопрос», которые можно щелкнуть, чтобы получить более подробные сведения о данной проблеме и о шагах, которые необходимо предпринять для ее разрешения.
Документация Upgrade Advisor представлена разделом о разрешении вопросов обновления версии, в котором задействованы такие категории, как вопросы обновления Analysis Services, DTS и СУБД.
Обратите внимание, что программа Upgrade Advisor не устанавливается в ходе инсталляции SQL Server 2005. Ее необходимо загрузить отдельно с заставочного экрана (splash.hta), щелкнув ссылку «Установить SQL Server Upgrade Advisor».
1 Вот как выглядит команда по перестройке Master для поддержки другой Collation: start /wait d:\setup.exe /qn INSTANCENAME=MSSQLSERVER REINSTALL=SQL_Engine REBUILDDATABASE=1 SAPWD=myPassword SQLCOLLATION=Cyrillic_General_CI_AS. — Прим. ред.