SQL Azure. Работа с базой данных из SSMS.

 

Содержание предыдущей серии

 

Работа с облачной базой данных из интерфейса портала SQL Azure удобна в том плане, что не требует никакой специальной клиентской части, кроме IE и Silverlight. Если под рукой имеется специализированный инструмент разработки и администрирования, как SQL Server Management Studio, было бы нерационально не использовать предоставляемых ей возможностей. Как я забыл сказать во Введении, начиная с SQL Server 2008 R2 November CTP (9 ноября 2009 г.), т.е. еще до официального выпуска SQL Server 2008 R2 и SQL Azure, стали поддерживаться соединение и работа с облачной базой из SSMS. Говорят, что к SQL Azure можно зацепиться и из SSMS 2008 (я не пробовал). Возможность работы с SQL Azure сохранится и будет, естественно, многкратно улучшена в SQL Server 2012 (Denali): как в SSMS, так и в том, что раньше называлось Database Project в Visual Studio, а ныне превратилось в SQL Server Data Tools (Juneau). О том, что нового предлагает 2012 в плане работы с Azure, я планирую поговорить отдельно, а пока откроем обычную SQL Server Management Studio в составе SQL Server 2008 R2:

 

image001 

Рис.1

 

Как водится при своем открытии она спросит, соединить ли Object Explorer с каким-нибудь экземпляром SQL Server? Cоединение с облачным SQL Server производится так же, как c обычным. Требуется только выход в Интернет. В качестве Server name вбиваем Fully Qualified DNS Name облачного SQL Server, с которым хотим соединиться. Мы его неоднократно видели в свойствах сервера на портале Windows Azure - см., напр., Рис.6 позапрошлого поста. В качестве Login/Password, соответственно, указываем тот эккаунт, который имеет права на базу, которая явно или неявно будет обозначена в свойствах соединения - аналогично Рис.7 позапрошлого поста.

 

image002

Рис.2

 

Здесь необходимо отметить несколько особенностей, которые уже упоминались в предыдущих постах: в SQL Azure действует стандартная модель безопасности, базу данных в ходе сессии менять нельзя, значит, надо сразу подключаться к нужной, и что соединение устанавливается поверх сетевой библиотеки TCP/IP на порт 1433 (соответственно, с клиента должен быть разрешен исходящий трафик). Следует также иметь в виду Firewall Rules для облачного SQL Server - см. пост Создание сервера, Рис.12. Задать в свойствах соединения SSMS базу данных и сетевую библиотеку можно по нажатию кнопки Options >>:

 

image003

Рис.3

 

В комбобоксе Connect to database имеется опция <Browse server...>, позволяющая вывести список доступных баз и выбрать, с какой из них соединяться. При этом неявно происходит подключение к БД master указанного ранее сервера SQL Azure и выполняется запрос select * from sys.databases, как на Рис.9 позапрошлого поста, т.е. нужно, чтобы информация, заданная на Рис.2, была валидной. Если Network protocol установлен в <default>, сетевые библиотеки будут применяться в порядке, заданном в настройках клиента в SQL Server Configuration Manager:

 

image004

Рис.4

 

Следуя этим нехитрым рекомендациям, мы без труда устанавливаем соединение с облачным SQL Server и видим в базе TestDB все объекты, созданные на прошлом занятии через портал SQL Azure:

 

image005

Рис.5

 

По сравнению с обычным SQL Server набор действий, которые можно выполнять над объектами облачной базы в Object Explorer, ограничен. Например, для таблиц в контекстном меню нет пунктов Select Top ... Rows, Edit Top ... Rows, Design и т.д. Таблицу нельзя заскриптовать как ALTER, хотя команда ALTER TABLE в SQL Azure присутствует, равно как и возможность изменения других объектов. Впрочем, ее нельзя заскриптовать и как Create/Drop несмотря на то, что в меню эти пункты доступны. В SSMS 2008 R2 из-за того, что Index was outside the bounds of the array, а в SSMS 2012 - Operation not supported on version 11.0 SqlAzureDatabase. Пункт New Table открывает не графический дизайнер таблицы, а окно запроса с SQL-шаблоном создания таблицы (CREATE TABLE). Обращает на себя внимание номер версии движка облачного SQL Server. По нему, в SQL Azure уже стоит Denali, однако, сдается мне, не совсем это так:

 

image006

Рис.6

 

В целом, SSMS, на мой взгляд, является не то, чтобы более удобным, но более привычным инструментом, чем портал SQL Azure. В связи с этим возникает вопрос: умеет ли общаться с SQL Azure не только SSMS в составе коммерческих редакций SQL Server, но и бесплатная "экспрессная"?

 

image007

Рис.7

 

image008

Рис.8

 

Ответ утвердительный:

 

image009

Рис.9

 

Примечание 1. В SQL Azure не работает процедура sp_spaceused. Зато каждая таблица обязана быть кластерным индексом. Поэтому размер таблицы определяем, как размер ее кластерного индекса. Это та самая таблица, в которую я по-быстрому насовал блобов на прошлом занятии, чтобы превзойти максимальный отведенный базе TestDB размер в 1 гигабайт, пока SQL Azure не заметила. Таблица Категория, как мы видим, весит 3 гига, поэтому если я сейчас скажу select * from dbo.Категория, это будет а) медленно и б) накладно.

Примечание 2. При установке русской SSMS операционная система должна быть тоже русской версии или иметь установленный Multi-Language User Interface, в противном случае -

 

image010 

Рис.10

 

Еще в русской версии смущает абсолютно дебильный перевод в Download Manager. При закрытии окна закачки / нажатии кнопки Выход она спрашивает, прервать ли загрузку, несмотря на то, что та завершена на 100%.

 

image011

Рис.11

 

Тут вздрогнет даже привычный человек, хотя в оригинале это звучит просто Do you want to exit the Download Manager.

Совершенно аналогично SSMS можно соединяться и работать с SQL Azure из остальных привычных инструментов. К ним относятся другие компоненты SQL Server: Analysis Services, Integration Services, Reporting Services, причем последние также существуют в Облаке - SQL Azure Reporting, а также вспомогательные утилиты и проекты: sqlcmd, bcp, SSMA, Data Tier Applications и т.д. К ним относятся приложения MS Office и навески к ним: Access, Excel PowerPivot и другие приложения. Например, подключение sqlcmd описано здесь:

 

sqlcmd -S tcp:fxv4koqar4.database.windows.net,1433 -U alexejs@fxv4koqar4 -d TestDB.

 

image012

Рис.12

 

В принципе, все то же самое, нужно только не забыть, что логин в данном случае выглядит не просто, как логин, а как логин@имясервера.

В моем случае для начала следует слегка почистить перегретую базу, иначе обновления и добавления в нее будут невозможны, и подождать, пока SQL Azure сообразит, что место освободилось.

 

image013

Рис.13

 

C:\Users\Administrator>set ProductName="Анисовая" Syrup

 

C:\Users\Administrator>sqlcmd -S fxv4koqar4.database.windows.net -U alexejs@fxv4koqar4 -d TestDB -v Category=2

Password:

1> :setvar UnitPrice 20

1> insert dbo.Продукт (ProductName, CategoryID, UnitPrice) values ('$(ProductName)', $(Category), $(UnitPrice))

2> go

 

(1 rows affected)

1> select * from dbo.Продукт

2> go

ProductID ProductName CategoryID UnitPrice InStockSince

----------- ---------------------------------------- ----------- ------------ ----------------

          1 "Анисовая" Syrup 2 20.0000 2012-02-07

 

(1 rows affected)

1> exit

 

C:\Users\Administrator>

 

Способы соединения с SQL Azure перечислены в BOL - см. Поддержка драйверов, библиотек и протоколов.

При написании приложений для база данных SQL Azure можно использовать следующие драйверы и библиотеки:

Поставщик данных платформы .NET Framework для SQL Server (System.Data.SqlClient) из .NET Framework 3.5 с пакетом обновления 1 (SP1) или более поздней версии.

Платформа Entity Framework из .NET Framework 3.5 с пакетом обновления 1 (SP1) или более поздней версии.

Драйвер собственного клиента ODBC SQL Server 2008 R2. Драйвер собственного клиента ODBC SQL Server 2008 также поддерживается, но с меньшим количеством функций.

Драйвер для PHP версии 1.1 или более поздних версий SQL Server 2008.

Обновленная версия JDBC-драйвера 3.0 для SQL Server, который поддерживает базу данных SQL Azure.

База данных SQL Azure поддерживает клиент протокола потока табличных данных версии 7.3 или более поздних версий. Более ранние версии протокола TDS не поддерживаются.

Соединение с база данных SQL Azure с помощью OLE DB не поддерживается.

Средства соединения обычно ставятся из Feature Pack или в составе клиентских утилит SQL Server, например, вместе с упоминавшейся выше SQL Server Management Studio Express - см. Рис.8.

 

Наряду с ограничениями по соединениям следует иметь в виду ограничения по функциональности SQL Azure по сравнению с SQL Server 2008/R2.

Отсутствие поставщика SQL Server PowerShell не означает принципиальной невозможности работы с SQL Azure из PowerShell:

 

cls

[string] $cnnString = "Server=tcp:fxv4koqar4.database.windows.net,1433;Database=TestDB;User ID=alexejs;Password=Tiwanaku;Encrypt=True;TrustServerCertificate=true"

[Data.SqlClient.SqlConnection] $cnn = New-Object -TypeName Data.SqlClient.SqlConnection -ArgumentList $cnnString

$cnn.Open()

[Data.SqlClient.SqlCommand] $cmd = $cnn.CreateCommand()

$cmd.CommandText = "select CategoryID, CategoryName, Description from dbo.Категория where Picture is null"

[Data.SqlClient.SqlDataReader] $rdr = $cmd.ExecuteReader()

[Data.DataTable] $dt = New-Object -TypeName Data.DataTable

$dt.Load($rdr); $dt | format-table ( @{Expression = {"{0:000}" -f $_.CategoryID}; Label = "ID"; Width = 10}, `

                                     @{Expression = {"{0, -15}" -f $_.CategoryName}; Label = "Название"; Width = 20}, `

                                     @{Expression = {"{0, -50}" -f $_.Description}; Label = "Описание"} )

$rdr.Close(); $cnn.Close()

 

image015

Рис.14

 

Продолжение следует.

 

Алексей Шуленин