База данных SQL Azure Database — это разработанный специалистами Microsoft «облачный» вариант SQL Server. Продукт SQL Azure очень напоминает локальную версию SQL Server; он представляет собой «облачную» реляционную базу данных, к которой можно подключиться, и наделен множеством известных средств управления и разработки из арсенала SQL Server. В публикуемой ниже статье я разъясню, как приступить к работе с базой данных SQL Azure Database, а также как подключиться к SQL Azure и использовать ее в качестве внутренней базы данных ваших приложений.
К вашим услугам
Первый этап подготовки к работе с SQL Azure Database сводится к созданию учетной записи SQL Azure. Первоначальные CTP-версии SQL Azure обеспечивали свободный доступ. Срок действия этих версий истек в ноябре 2009 года, когда Microsoft заменила их рабочей версией SQL Azure. Существует два уровня учетных записей SQL Azure. Версия SQL Azure Web Edition позволяет хранить до 1 Гбайт данных и обходится потребителю в 9,99 долл. в месяц. Версия SQL Azure Business Edition обеспечивает хранение до 10 Гбайт данных, а ежемесячный взнос за ее использование составляет 99,99 долл. Вы можете создать учетную запись SQL Azure, заглянув на сайт sql.azure.com и пройдя там процесс регистрации.
Чтобы получить возможность управлять базой данных SQL Azure, пользователь, ставший абонентом службы SQL Azure, регистрируется в системе. Для этого ему необходимо открыть сайт http://sql.azure.com и зарегистрироваться там с использованием идентификатора Windows Live ID. По завершении первоначальной настройки службы SQL Azure пользователь получает приглашение ввести административное учетное имя, используемое для входа в систему, а также пароль, который должен отвечать жестким требованиям безопасности. После ввода учетных административных данных на экране отображается интерфейс управления SQL Azure, представленный на экране 1.
Окно SQL Azure Management позволяет выполнять две ключевые задачи: создавать базы данных и осуществлять подключение клиентов к серверу SQL Azure. В процессе первоначального подключения особое внимание следует уделять правильному написанию имени сервера SQL Azure, которое необходимо вводить для установки соединения клиента с базой данных.
Приступая работе с SQL Azure, прежде всего необходимо создать базу данных. Для этого нужно перейти на вкладку Databases и нажать кнопку Create Database. Вы увидите диалоговое окно, в котором можно указать имя базы данных и ее максимальный размер. У меня была возможность выбрать один из двух показателей — 1 Гбайт или 10 Гбайт. Для первоначального тестирования я создал базу данных pubs размером в 1 Гбайт.
После создания базы данных получим строку соединения с ней; для этого нужно выставить флажок перед данными и нажать кнопку Connection Strings, которая расположена в нижней части экрана 1. Это важно, поскольку, в отличие от локальной системы SQL Server, пользователь не может изменять базы данных после подключения к SQL Azure. Необходимо устанавливать новое соединение для подключения к другой базе данных. В листинге приводится пример строк подключения к SQL Azure из ADO.NET и ODBC.
Далее необходимо активировать брандмауэр. Подключение к базе данных SQL Azure невозможно до активации диапазона IP-адресов, которые будут использоваться клиентскими системами для подключения. Для добавления новых записей брандмауэра перейдите на вкладку Firewall Settings и нажмите кнопку Add Record. На экране появится диалоговое окно Custom Firewall Settings. В нем нужно ввести диапазон IP-адресов, откуда можно будет подключаться к базе данных SQL Azure. Здесь следует сделать одно замечание: если вы применяете технологию трансляции сетевых адресов Network Address Translation (NAT), потребуется использовать общедоступные IP-адреса системы (то есть не внутренние IP-адреса вашей клиентской системы). SQL Azure поможет вам в решении этого вопроса, отобразив текущий внешний (общедоступный) IP-адрес в диалоговом окне Custom Firewall Settings.
Подключение к «облаку»
SQL Azure поддерживает подключение клиентов с помощью собственного протокола SQL Server Tabular Data Stream (TDS), и вы можете подключиться к SQL Azure с помощью SQL Server Management Studio (SSMS). Но важно иметь в виду, что обозреватель Object Explorer не функционирует, поскольку ему требуется доступ к таблице sys.configurations, которая недоступна в системе SQL Azure. Поэтому при решении задач управления SQL Azure вам придется довольствоваться редактором запросов Query Editor. Для подключения к SQL Azure откройте SSMS. При этом автоматически откроется диалоговое окно Connect. В нем нужно щелкнуть на Cancel, после чего будет установлено соединение Object Explorer с базой данных. На экране появится пустое окно SSMS. Щелкните New Query, а затем заполните диалоговое окно соединения, как показано на экране 2.
Из окна на экране 2 явствует, что я дал серверу имя, полученное в окне управления SQL Azure. Я выбрал пункт SQL Server Authentication и ввел имя администратора для регистрации, а также пароль, который использовал при создании службы SQL Azure. Затем я щелкнул пункт Options, в командной строке Connect to database ввел имя базы данных pubs и нажал Connect. В результате открылось окно редактора запросов Query Editor, который подключился к системе SQL Azure. На данном этапе вы можете создать схему базы данных, а также объект посредством выполнения команд T-SQL из редактора Query Editor.
Присвоение начальных значений в «облаке»
При проведении тестирования я пользовался версией SQL Azure CTP, и надо сказать, что в этой ситуации у меня не было приемлемого варианта получения данных от локальных систем SQL Server для переноса в SQL Azure. Я полагал, что создать базу данных pubs для выполнения первых тестов проще всего с помощью сценария insrpubs.sql; этот сценарий, входящий в состав демонстрационного пакета SQL Server 2000, можно загрузить с сайта Microsoft.
Однако я сразу же столкнулся с трудностями: сценарий никак не выполнялся. Дело в том, что хотя SQL Azure напоминает локальную систему SQL Server, между ними имеются существенные различия. Первая возникшая у меня проблема состояла в том, что команда USE не поддерживается. Это разумно, так как пользователь может подключаться только к одной базе данных. Далее, я был несколько удивлен тем, что для работы с таблицами SQL Azure требуется первичный кластеризованный индекс. Столкнувшись с этими затруднениями, я решил обратиться к оперативной документации.
Специалисты Microsoft рекомендуют пользователям версии CTP следующий метод внесения данных в SQL Azure: запустить мастер Database Script Wizard, а затем вручную отредактировать созданный сценарий. Для того чтобы конвертировать демонстрационную базу данных pubs, я щелкнул правой кнопкой мыши элемент pubs и затем выбрал пункты Tasks, Generate Scripts. Выполнив необходимые действия в диалоговом окне приветствия, я перешел в диалоговое окно Select Database и выбрал базу данных pubs, как показано на экране 3.
Затем в диалоговом окне Choose Script Options я изменил параметры сценария, показанные в таблице. В этих параметрах проявляются почти все требования к сценарию, поскольку SQL Azure не поддерживает ни пользовательские типы данных, ни расширенные свойства, ни инструкцию USE. Поскольку настройка Script Data предполагает прописывание в сценарии как данных, так и схемы, этот метод для работы с крупными базами данных не подходит.
Нажав кнопку Next в диалоговом окне Choose Script Options, я открыл диалоговое окно Choose Object Types, где последовательно выбрал элементы Stored procedures, Tables и Views (экран 4). Затем нажатием той же кнопки Next я переходил из одного окна в другое, где выбирал все объекты в диалоговых окнах Choose Stored Procedures, Choose Tables и Choose Views. В последнем окне мастера я нажал кнопку Finish, в результате чего в новом окне редактора Query Editor был сформирован сценарий создания базы данных pubs.
Далее я отредактировал сценарий, то есть удалил все элементы, которые «не нравятся» системе SQL Azure. Прежде всего, я удалил следующую инструкцию во всех строках, где она использовалась:
SET ANSI_NULLS ON
Затем я отредактировал все инструкции CREATE TABLE и удалил следующее предложение:
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
Наконец, я позаботился о том, чтобы все инструкции CREATE TABLE имели ограничение кластеризованного первичного ключа. Такие ограничения уже существуют в большинстве таблиц баз данных pubs database, но, как оказалось, мне нужно было отредактировать таблицы employee, discounts и roysched. После внесения необходимых изменений я запустил сценарий. В результате в базе данных pubs были созданы объекты и заполнены таблицы. После этого я смог обратиться с запросом к базе данных pubs в SQL Azure и получить результат, что продемонстрировано на экране 5.
Как и следовало ожидать, SQL Azure поддерживает все стандартные запросы на выборку T-SQL, включая объединение нескольких таблиц и подзапросы на выборку. Чтобы получить представление о том, какие средства не поддерживаются системой SQL Azure, познакомьтесь с врезкой «Ключевые отличия базы данных SQL Azure».
Стремиться к высокой цели
Заполнив базу данными, я попытался подключиться к SQL Azure из приложения ADO.NET. Какие-либо дополнительные инструменты для этого не понадобились. Отмечу, кстати, что Microsoft поставляет дополнительный компонент Visual Studio, именуемый Windows Azure Tools for Microsoft Visual Studio. Однако для создания приложений базы данных, выполняемых в среде SQL Azure, этот компонент не требуется.
Подключение проекта Visual Studio 2008 к SQL Azure методом связывания данных прошло безупречно. Сначала я открыл Visual Studio 2008 и выбрал элементы File, New Project. Затем в диалоговом окне New Project я выбрал приложение Windows Forms и дал новому проекту имя SQLAzure. Наконец, я назначил свойству Text в Form значение SQL Azure Demo, а затем изменил размеры формы, превратив ее в горизонтальный прямоугольник, отбуксировал на форму элемент управления DataGridView и зафиксировал все четыре его стороны.
Чтобы добавить источник данных SQL Azure, я щелкнул на стрелке заданий DataGridView и выбрал в раскрывающемся списке Choose Data Source пункт Add Project Data Source. В результате на экране открылось окно мастера выбора источника данных Data Source Configuration wizard. В диалоговом окне Choose a Data Source Type я выбрал элемент Database и нажал кнопку Next. Затем в диалоговом окне Choose Your Data Connection был выбран пункт New Connection, и на экране появилось диалоговое окно Add Connection. Первоначально я попытался добавить соединение Microsoft SQL Server (SqlClient). Тестовое соединение было установлено, но я получил сообщение об ошибке, когда пытался добавить к проекту источник данных. Вместо этого мне нужно было выбрать источник Microsoft ODBC Data Source, и тогда на экране появилось бы диалоговое окно ODBC Add Connection, показанное на экране 6.
Я выбрал параметр Use connection string и ввел строку соединения, полученную ранее в окне диспетчера SQL Azure. Использованная мною строка соединения выглядит так:
Driver={SQL Server Native Client 10.0}; Server=tcp: gvlxq1rlrw.database.windows.net; Database=pubs; Uid=mikeo@gvlxq1rlrw; Pwd=myPassword
Далее я сохранил соединение под именем pubsConnectionString. После этого в диалоговом окне Choose Your Database Objects я выбрал таблицу authors. В результате был создан набор данных, обеспечивающий добавление, редактирование и удаление данных из таблицы pubs в SQL Azure. В целом процесс формирования приложения, занявший всего пару минут, весьма напоминал работу с обычной системой SQL Server. Выполнение этого простого приложения иллюстрирует экран 7.
Время от времени возникали ситуации, где мне приходилось вновь предпринимать попытки подключиться к базе данных SQL Azure. Во всех прочих отношениях процесс разработки приложения с помощью SQL Azure очень напоминал соответствующий процесс в локальной системе SQL Server. Хотя данное демоприложение было очень простым, я обнаружил, что время отклика составляет менее одной секунды, то есть сопоставимо с тем временем, которое отмечается при выполнении приложения на локальной системе.
Пока не все гладко?
Приступая к работе над статьей, я имел слабое представление о том, что же, собственно, такое эта служба SQL Azure и как ее можно использовать. Но поработав какое-то время с SQL Azure, я уяснил для себя ее сходство с базой данных SQL Server и понял, каким именно образом это обстоятельство облегчает внедрение и эксплуатацию SQL Azure. Однако надо иметь в виду, что различия в требованиях к схеме и ограниченные типы данных осложняют процесс перенесения приложений на платформу SQL Azure. И даже если такой процесс будет успешно осуществлен, вполне возможно, что преимущества, полученные компаниями от использования платформы SQL Azure, останутся весьма скромными — с учетом того, что локальные системы SQL Server обладают хорошей масштабируемостью и имеют множество средств для обеспечения высокой доступности.
Хотя общепризнанно, что облачная обработка данных находится на начальных стадиях своего развития, по-видимому, уже можно сказать, что с точки зрения независимых поставщиков программных продуктов, испытывающих потребность в повсеместно доступных базах данных, SQL Azure представляется наиболее подходящим решением. Главное достоинство этой системы в том, что к ней можно обращаться из любой точки земного шара. Благодаря такому обстоятельству эта база данных превращается в привлекательную платформу для создания новых приложений независимыми разработчиками. Более подробную информацию о SQL Azure можно найти по адресу www.microsoft.com/windowsazure/sqlazure и в блоге SQL Azure Team.
Майкл Оти (motey@windowsitpro.com) — технический директор Windows IT Pro и SQL Server Magazine, автор Microsoft SQL Server 2008 New Features (Osborne/McGraw-Hill)
ADO.NET: Server=tcp:gvlxq1rlrw.database.windows.net;Database=pubs; User ID=mikeo;Password=myPassword;Trusted_Connection=False ODBC: Driver={SQL Server Native Client 10.0};Server=tcp:gvlxq1rlrw.database .windows.net;Database=pubs; Uid=mikeo@gvlxq1rlrw;Pwd=myPassword
Администраторы базы данных SQL Server и разработчики находят в работе с SQL Azure Database и с SQL Server много общего. Но есть и существенные отличия. Для обеспечения высокой доступности в системе SQL Azure сохраняется по три копии содержимого каждой базы данных. Эти копии могут размещаться на серверах SQL Azure, расположенных в различных географических точках.
SQL Azure поддерживает почти все инструкции, типы данных и системные хранимые процедуры T-SQL из SQL Server. Однако есть ряд распространенных средств (возможно, они включены в ваши текущие приложения), не поддерживаемых платформой SQL Azure. К ним относятся:
• среда SQL CLR;
• геопространственные типы данных;
• типы данных image, text и ntext;
• пользовательские типы данных;
• аутентификация Windows;
• инструкция USE;
• инструкции OPENQUERY и OPENROWSET;
• инструкции BACKUP и RESTORE;
• поддержка доступа к системным таблицам.
Следует отметить, что SQL Azure поддерживает следующие типы данных: xml; date, time и datetime2, а также varbinary (max). Более подробные сведения о SQL Azure и языке T-SQL можно найти в справочнике complete SQL Azure T-SQL Reference по адресу http://msdn.microsoft.com/en-us/library/ee336281.aspx.