Содержание статей:
- Как нам живется с Yandex Cloud Managed Service?
- Yandex Cloud Managed Service: создание и перенос баз.
- Yandex Cloud Managed Service: мониторинг, планы обслуживания, бэкапы и выводы.
Напоминаю:
У нас теперь нет роли dbcreator. Это важно!
У нас теперь нет возможности копировать базы через бэкапы!
Кейс 1: Перенос баз 1с через dt
Нет смысла долго объяснять про перенос баз через dt, есть только одно, но...
Нет роли dbcreator, а это значит, у Вас не сработает галка «В случае отсутствия базы создать».
1 Читаем про создание базы тут -> https://cloud.yandex.ru/docs/managed-sqlserver/operations/databases
2 После создания пустой базы и создания пользователя с правами DB_OWNER на вновь созданную базу, подключаем ее через Администрирование серверов.
3 Заходим в конфигуратор и загружаем базу из dt.
Кейс 2: Необходимо было установить WMS на Managed Service for SQL Server в Yandex.Cloud
В апреле 2021 мы решили установить WMS сразу в Managed Service. Я наивно подумал, что там будет 1 база и 1 пользователь, поэтому я создал пустую базу и создал пользователя с ролью db_owner на эту базу.
На следующий день меня попросили пользователю дать роль dbcreator, так как во время установки WMS системы создаются базы и пользователи скриптами. Я, естественно, был удивлен, так как ранее было доходчиво объяснено о том, что нет возможности дать такую роль. Я еще раз пересказал всю информацию из статьи «Как мы на Managed Service for SQL Server в Yandex.Cloud переезжали» и предложил способ решения.
Но мне было сказано:
— Это хорошо, что у нас есть план Б, но все-таки создай обращение. Нужно официальное подтверждение о том, что такую роль дать нельзя.
Обращение:
Вырезка из https://cloud.yandex.ru/docs/managed-sqlserver/operations/databases
Идем по предложенному мной плану Б:
1 Узнаю версию MSSQL в YC через SQL Management Studio
SELECT @@version.
2 Создаю стенд и устанавливаем на него MSSQL нужной версии (Версия полностью идентична с Managed Service)
3 Разворачиваем WMS систему на стенде
4 Создал в Managed Service базы пустышки с такими же именами и пользователей, которые были созданы при установке WMS.
5 Дал пользователям права db_owner на базы WMS системы
6 *Выгрузил бэкапы баз со стенда и передал их специалистам в YC
7 *Они подняли бэкапы на Managed Service в заранее заготовленные базы пустышки
8 Под созданными пользователями настроили систему WMS
Согласитесь, такой вариант не сильно удобен. Очень много телодвижений и плюсом задействованы специалисты Yandex.
*Пункты, выделенные синим цветом, можно решить своими силами, но этот способ впервые был проделан мной в июне, до этого был только вариант, описанный выше.
Кейс 3: Необходимо было скриптами создать базу в Yandex.Cloud Managed Service for SQL Server
События перед 3 кейсом
В мае нам понадобились бэкапы, и мы запросили их у специалистов из Yandex. На этот момент у нас уже было несколько десятков баз. Специалисты опять спросили, не пробовали ли мы sqlpackage. Я сказал, что пробовали, не вышло, и дал ссылку на статью со всеми телодвижениями.
Нам выкачали бэкапы и спустя какое-то время предложили гипотезу с использованием sqlpackage.
Гипотеза была отложена, но в начале июня про нее пришлось вспомнить.
В отличие от предыдущего кейса сроки горели, да и стенд из предыдущего кейса уже был снесен.
1 Я установил SQL Server 2019 Developer – это была моя ошибка, хотя без нее кейс 3 не состоялся бы.
SQL Server 2019 Developer — это бесплатный выпуск с полным набором функций, лицензируемый для использования в качестве базы данных для разработки и тестирования и не предназначенный для применения в рабочей среде.
2 Скриптами создал базу
3 В Managed Service создал базу пустышку и пользователя. Дал права пользователю на вновь созданную базу.
4 Снял бэкап с базы, поднятой на SQL Server 2019 Developer, и попросил поднять его в базу, созданную на Managed Service у специалистов из YC
5 Для подстраховки параллельно вечером начал пробовать перенос через sqlpackage
Вечером поступает первый звоночек:
Специалисты Y.C:
Вот тут я и вспоминаю, что Managed Service for SQL Server в Yandex.Cloud работает на MS SQL 2016...
Кстати, только сейчас до меня дошло выражение "трудности = возможности"!)
Первоначально sqlpackage был придуман для того, чтобы базы данных распространять в виде инсталляции.
Далее он же стал использоваться для загрузки баз данных в Azure.
И он же пока единственная возможность снимать бекапы и закидывать базы в YC MS SQL самостоятельно
Необходимо на стенде повторить окружение Yandex.Cloud Managed Service for SQL Server, а точнее, повторить окружение у конкретной переносимой базы. Все это нужно для того, чтобы «автоматика склеилась».
То есть база приемник (Yandex.Cloud Managed Service for SQL Server) по внешним свойствам должна полностью совпадать с передаваемой базой (Стенд)
Действия на Managed Service for SQL Server:
1 Создаем базу приемник на Managed Service for SQL Server с таким же именем, как и база на стенде
2 Дожидаемся выполнения операции (если не дожидаться, тогда при следующем действии получим ошибку)
3 Создаем пользователя и даем ему права на базу
4 Дожидаемся выполнения операции
Действия на стенде:
1 Параметры сортировки (Collation) должны совпадать с настройками Managed Service for SQL
«Cyrillic_General_CI_AS» -> «Кириллица», «Большая буква = малая буква» и «е <> ё»
В противном случае могут некорректно работать сортировки и соединения.
Самое противное - если создать и перенести с неправильным параметром, тогда переделать будет практически невозможно.
2 Модель восстановления должна быть Полная (Full) и Включен компонент Broker (Service Broker = True)
3 В базе источнике убрать всех виндовых пользователей, оставить только SQL-ных, далее создать таких же пользователей с теми же паролями в YC MS SQL.
В общем, SQL-ные пользователи должны совпадать и на стенде, и на YC MS SQL. Одинаковые пароли и одинаковые роли.
Владельца (Owner) базы сделать SA.
4 Качаем sqlpackage (я качал под Windows)
https://docs.microsoft.com/ru-ru/sql/tools/sqlpackage/sqlpackage-download?view=sql-server-ver15
Запускаем установщик DacFramework.msi для Windows.
Программа sqlpackage устанавливается в папку C:\Program Files\Microsoft SQL Server\150\DAC\bin
Открываем новое окно командной строки и запустите файл sqlpackage.exe
Пример показывает версию sqlpackage:
5 Смотрим информацию по sqlpackage
Команда:
sqlpackage.exe /help
Также можно почитать тут -> https://docs.microsoft.com/ru-ru/sql/tools/sqlpackage/sqlpackage?view=sql-server-ver15
Выгрузка базы со стенда при виндовой авторизации:
sqlpackage.exe /a:Extract /ssn:ИМЯ_ХОСТА /sdn:ИМЯ_БАЗЫ /tf:"С:\ПАПКА_ДЛЯ_БАЗЫ\test.dacpac" /p:ExtractAllTableData=True /p:ExtractReferencedServerScopedElements=False
Выгрузка базы со стенда при SQL-ной авторизации:
sqlpackage.exe /a:Extract /ssn:ИМЯ_ХОСТА /sdn:ИМЯ_БАЗЫ /tf:"С:\ПАПКА_ДЛЯ_БАЗЫ\test.dacpac" /p:ExtractAllTableData=True /p:ExtractReferencedServerScopedElements=False /su:ПОЛЬЗОВАТЕЛЬ /sp:"ПАРОЛЬ"
Информация:
ИМЯ_ХОСТА – может быть localhost
/a:Extract: Создает файл приложения уровня данных (DACPAC), содержащий только схему или схему и пользовательские данные из подключенной базы данных SQL.
/p:ExtractAllTableData: Указывает, извлекаются ли данные из всех пользовательских таблиц. Если задано значение true, данные извлекаются из всех пользовательских таблиц и нельзя указать отдельные пользовательские таблицы для извлечения данных. Если задано значение false, укажите одну или несколько пользовательских таблиц для извлечения данных.
/p:ExtractReferencedServerScopedElements: Если задано значение true, извлекаются объекты имени для входа, аудита сервера и учетных данных, на которые ссылаются объекты из базы данных-источника.
Загрузка базы в YC MS SQL:
sqlpackage.exe /a:Publish /sf:"C:\ ПАПКА_ДЛЯ_БАЗЫ\test.dacpac" /tsn:АДРЕС_МАНАДЖЕТ_СЕРВИСА_В_ОБЛАКЕ /tdn: ИМЯ_БАЗЫ /tec:True /ttsc:True /tu:ПОЛЬЗОВАТЕЛЬ /tp:"ПАРОЛЬ" /p:AllowIncompatiblePlatform=True /p:IgnoreCryptographicProviderFilePath=True /p:IgnoreExtendedProperties=True /p:IgnoreFileAndLogFilePath=True /p:IgnoreFilegroupPlacement=True /p:IgnoreFileSize=True /p:IgnoreFullTextCatalogFilePath=True /p:IgnoreLoginSids=True /p:ScriptRefreshModule=False
Что особенно порадовало, дак это то, что я смог с 2019 MS SQL затащить базу на 2016 в YC MS SQL, при загрузке увидев вот такое предупреждение:
Информация:
/a:Publish: выполняет добавочное обновление схемы базы данных в соответствии со схемой исходного DACPAC-файла. Если база данных не существует на сервере, операция публикации создаст ее. В противном случае обновляется существующая база данных.
П.С. Про то, что гипотеза сработала, я сообщил в Яндекс и думаю, по этим рельсам уже кто-то проехал 😉
Кейс 4: Перенос базы из Managed Service for SQL Server к себе через SqlPackage
В 3 кейсе мы переносили со стенда в Managed Service for SQL Server. В этом кейсе ситуация обратная.
Выгрузка базы из YC MS SQL:
sqlpackage.exe /a:Extract /ssn:АДРЕС_МАНАДЖЕТ_СЕРВИСА_В_ОБЛАКЕ /sdn:ИМЯ_БАЗЫ /tf:"С:\ПАПКА_ДЛЯ_БАЗЫ\test.dacpac" /p:ExtractAllTableData=True /p:ExtractReferencedServerScopedElements=False /su:ПОЛЬЗОВАТЕЛЬ /sp:"ПАРОЛЬ"
Загрузка базы:
sqlpackage.exe /a:Publish /sf:"С:\ПАПКА_ДЛЯ_БАЗЫ\test.dacpac" /tsn:ИМЯ_ХОСТА /tdn:ИМЯ_БАЗЫ /tec:True /ttsc:True /tu:ПОЛЬЗОВАТЕЛЬ /tp:"ПАРОЛЬ" /p:AllowIncompatiblePlatform=True /p:IgnoreCryptographicProviderFilePath=True /p:IgnoreExtendedProperties=True /p:IgnoreFileAndLogFilePath=True /p:IgnoreFilegroupPlacement=True /p:IgnoreFileSize=True /p:IgnoreFullTextCatalogFilePath=True /p:IgnoreLoginSids=True /p:ScriptRefreshModule=False
Очень часто ко мне приходили люди и говорили: нам нужна копия базы.
Поработав с Managed Service for SQL Server в ответ, я стал говорить - есть 2 варианта:
1 Через dt, но в нерабочее время.
2 Через SqlPackage.
Знаете, сколько раз мне сказали: - Да, давай через SqlPackage!
Ровно ноль (0) раз!!!
Знаете, почему?
Потому, что я не встретил ни одного человека, который слышал про SqlPackage. Правда, я знаю двух, которым пришлось в итоге им пользоваться.
Не буду голословным, давайте загуглимЗаинфостартим SqlPackage и посмотрим, насколько он часто встречается в статьях:
2-е статьи!!!
Заинфостартите, например: git (753 статьи), http-сервис (320 статей), scrum (179 статей), sonar (40 статей).
Чувствуете «Популярность» и замыленность тем?
А между тем SqlPackage:
- С недавних пор стал опенсорсным, самостоятельным продуктом
- Есть под Windows, macOS и Linux
- Позволяет накатывать базы на разные версии MS SQL
- Отлично подойдет для непрерывной разработки
- Поддерживает языки: Китайский, Английский, Французский, Немецкий, Итальянский, Японский, Корейский, Португальский, Русский, Испанский
- Да и обновление релизов, думаю, тоже можно прикрутить. В общем, надо пробовать!
На этом статью заканчиваю. Следующая статья будет про мониторинг, регламенты, немного про бэкапы и станет финальной.
Всем удачи, надеюсь, информация для Вас полезна!