SQL Azure. Создание базы данных.
Для создания базы в интерфейсе SQL Azure Management Portal имеется много кнопок в разных местах. Самая большая виднеется посредине внизу, если в левой верхней панели навигации по иерархии объектов встать на папку Subscriptions - см. Рис.5 позапрошлого поста. Есть иконка Create в секции Database верхней панели меню, если в дереве иерархии встать на сервер (см. Рис.11 позапрошлого поста) или на подписку, внутри которой создан хотя бы один сервер. Можно также нажать в верхнем меню на кнопку Manage в секции Server, как на Рис.12 позапрошлого поста и, оказавшись на новой странице, кликнуть на Create (Database) в верхнем меню или на плитку New database новомодного Metro-интерфейса:
Рис.1
Из большого разнообразия параметров, которые можно оговаривать при создании базы на on-premise SQL Server, здесь требуется задать всего три: название, размер и коллацию.
Показанные на рисунке коллации %_100% были введены в SQL Server 2008 (порядковый номер версии которого был 10.0), а для чего - см. статью Fernando Caro "Working with the New SQL Server 2008 Collations and Earlier Versions of the Native Data Provider".
Рис.2
Размер имеет значение, т.к. деньги за использование облачного SQL Server складываются из платы за трафик (см.позапрошлый пост после Рис.7) и размера базы, потому к его выбору следует подойти из принципа разумной достаточности, не задирая сверх необходимости. Базы данных бывают двух редакций: Web и Business. Это маркетинговая группировка максимальных размеров баз, по функциональности они не отличаются. Для Web максимальный размер базы составляет 1 и 5 ГБ, для Business - 10, 20 и т.д., как можно видеть на Рис.2. По достижении MAXSIZE возникает ошибка, и добавление новых данных в базу становится невозможно. База остается доступной на чтение. MAXSIZE можно увеличить при помощи ALTER DATABASE, если есть, куда. Плата за объем баз начисляется ежедневно и взимается в конце месяца. Дневная плата за каждую базу рассчитывается как ee пиковый размер в этот день, округленный до n ГБ, делить на кол-во дней в месяце умножить на цену 1 ГБ. В случае Web-редакции n тупо равно MAXSIZE, в случае Business - ближайшее кратное 10 ГБ (сверху). Размер базы включает пользовательские данные, индексы и объекты (хранимые процедуры, метаданные и др.) Размер не включает журнал транзакций, системные таблицы, серверные каталоги. БД master и дополнительные реплики базы (см.первый пост) также не считаются. Вообще, вопросы ценообразования будет лучше выделить в отдельный пост. Пока рекомендуется внимательно прочитать в BOL раздел Учетные записи и выставление счетов в SQL Azure. Здесь и далее я буду ссылаться на англоязычную документацию. Русские BOL по SQL Azure есть, но на момент написания данного поста переведены только сами статьи. Оглавление большей частью осталось на английском, поэтому навигация слева часто съезжает, если справа русский контент. В качестве workaround можно порекомендовать следующее. Если важно прочитать статью на русском, то в приводимых ссылках заменяйте en-us на ru-ru, а если нужно понять, в каком месте документации она расположена, то оставляйте, как есть.
На сервере SQL Azure может быть максимально 150 баз. БД master в данном случае считается, итого, пользовательских - 149. Database Quota показана на портале справа в Properties на Рис.11-12 позапрошлого поста.
Нажмем кнопку Submit, притаившуюся под комбобоксом с коллациями на Рис.2 и создадим первую базу. Появится сообщение, что database successfully created и страница со статистической информацией о созданной базе:
Рис.3
Нажмем кнопку New Query в панели меню и напишем первый запрос к нашей первой базе:
select db_name() as [База],
databasepropertyex(db_name(), 'edition') as [Редакция],
databasepropertyex(db_name(), 'MaxSizeInBytes') as [Максимальный размер],
databasepropertyex(db_name(), 'Collation') as [Коллация]
Рис.4
Как и в человеческом SQL Server, имеется команда CREATE DATABASE. Например, можно попробовать создать за компанию еще одну базу
create database [Тестовая база] collate cyrillic_general_100_CI_AS (MAXSIZE = 5 GB)
Рис.5
однако попытка выполнить ее из запросного окна Рис.4 не приведет к успеху по причине Msg 5001, Level 16, State 1, Line 1. User must be in the master database.
Сделать use master здесь нельзя, потому что Msg 40508, Level 16, State 1, Line 1. USE statement is not supported to switch between databases. Use a new connection to connect to a different Database. Команды use в SQL Azure нет. Контекст базы остается неизменным на протяжении всего пользовательского соединения. Ничего не остается, как выполнить эту команду с нового соединения. Для этого возвращаемся на Рис.4 на левую закладку в браузере, в левой верхней панели выбираем сервер, в средней нижней - БД master из списка его баз и кликаем в верхнем меню (секция Database) на иконку Manage.
Рис.6
В открывшейся новой странице соединения имя базы проставилось автоматически и поменять его нельзя. Вводим логин и пароль для открытия нового соединения.
Рис.7
Либо на Рис.6 вместо секции меню Database можно выбрать секцию Server (левее) и нажать иконку Manage в ней. Откроется окно, как на Рис.7 с той лишь разницей, что поле Database не будет заполнено автоматически. Туда нужно вбить название master руками, потом аналогично логин и пароль. Если поле Database оставить пустым, соединение на новой странице откроется и кнопка New Query в меню тоже сработает, однако что бы туда ни вводить, кнопка Run в меню запроса будет недоступной. В свое время я вокруг нее плясал с бубном, пытаясь сообразить, с чего бы это вдруг она посерела, пока не вспомнил, что не заполнил имя базы.
Рис.8
Откроется окно базы данных master. Не обращайте внимания на ошибку. Это по аналогии с Рис.3 она пытается отобразить ее свойства, и у нее не хватает прав. В смысле, это у нас их не хватает: The current user does not have VIEW DATABASE STATE permissions on this database. О правах и обязанностях мы поговорим в отдельном посте про безопасность SQL Azure, а пока нажимаем в меню кнопку New Query, как на Рис.4 и выполняем скрипт Рис.5:
Рис.9
Можно также обновить список баз на Рис.6 (в верхнем меню правая секция View, состоящая из единственной кнопки Refresh), чтобы удостовериться, что новая база создалась нормально.
Предположим, [Тестовая база] доросла до своего максимального размера, заданного ей при создании, и это не абсолютный предел размера базы в Azure (на время написания поста 150 GB). Тогда ее можно расширить при помощи команды ALTER DATABASE. Когда-то при этом требовалось указывать редакцию (SKU), сейчас достаточно указать только желаемый размер:
alter database [Тестовая база] modify (MAXSIZE=10GB)
Рис.10
Как и в SSMS, по нажатию кнопки Run выполняются выделенные операторы SQL, либо весь скрипт целиком, если ничего выделено не было. Изменение пользовательской базы, как и создание, следует производить из контекста БД master.
Представление sys.databases показывает много привычных свойств базы (Рис.9), однако синтаксис команды ALTER DATABASE говорит о том, что большинство из них доступны только на чтение и приводятся в качестве информации к философскому размышлению. Поменять их в SQL Azure нельзя:
alter database [Тестовая база] set recovery simple
-------------------------------------------------------------------
Msg 102, Level 15, State 1, Line 1. Incorrect syntax near 'set'.
Чтобы проверить, какими теперь стали максимальный размер и редакция базы Тестовая база, нужно перейти в ее контекст, т.к. в функции DATABASEPROPERTYEX(<database>, <property>) аргумент с указанием базы данных должен совпадать с текущей базой данных, в противном случае все возвращаемые значения будут равны NULL, а иного способа посмотреть свойства Edition и MaxSize ни через sys.databases, ни через какое-либо другое DMV мне неизвестно. Как мы помним, команда USE в SQL Azure не поддерживается, следовательно, для изменения контекста следует открыть новое соединение, указав БД Тестовая база в его свойствах (Рис.6-7). Выполнив запрос Рис.4 в контексте БД Тестовая база, убеждаемся, что ее размер из 1 ГБ превратился в 10 и редакция из Web - в Business.
Удаление базы производится из интерфейса портала нажатием кнопки Drop в верхнем меню, секция Database:
Рис.11
Имейте в виду один неприятный глюк, который может возникать при удалении базы через интерфейс портала. Иногда после нажатия кнопки Drop предупредительный диалог залипает (остается висеть). На самом деле база, которую вы хотели удалить, благополучно удалилась. Я удалял базу [Тестовая база], видите - на темном фоне в списке баз ее уже нет (ср. с Рис.11). Но раз диалоговое окно не пропало, я, естественно, не вглядываюсь в темноту, думаю, что первый раз плохо нажал и нажимаю еще раз. При этом удалится база TestDB, на которую в списке переместился курсор после удаления первой базы. Так можно легко и непринужденно поудалять все свои базы, и только потом спохватиться.
Рис.12
Поэтому я предпочитаю удалять базы из запросного окна (Рис.10) командой DROP DATABASE, выполнять которую также нужно из контекста БД master.
Алексей Шуленин