Управление схемой в приложении SaaS, которое использует сегментированные мультитенантные базы данных
Применимо к: База данных SQL Azure
В этом руководстве рассматриваются сложности обслуживания группы баз данных в приложении "программное обеспечение как услуга" (SaaS). Демонстрируются решения для распространения изменений схемы в группе баз данных.
Как и любое приложение, приложение SaaS Wingtip Tickets будет развиваться со временем и иногда будет требовать изменений в базе данных. Изменения могут влиять на схему или ссылочные данные, а также инициировать задачи обслуживания базы данных. В случае приложения SaaS, использующего одну базу данных на клиент, изменения необходимо координировать в потенциально большой группе баз данных клиента. Кроме того, необходимо внедрить эти изменения в процесс подготовки баз данных, чтобы они были внесены в новые базы данных при их создании.
Два сценария
В этом руководстве рассматриваются два сценария:
- Развертывание обновления справочных данных для всех клиентов.
- Перестройка индекса для таблицы, содержащей ссылочные данные.
Функция Базы данных SQL Azure Задания обработки эластичных баз данных используется для выполнения этих операций на всех клиентах. Задания также выполняются для шаблона базы данных клиента. В примере приложения Wingtip Tickets этот шаблон базы данных копируется для подготовки новой базы данных клиента.
Из этого руководства вы узнаете, как выполнить следующие задачи:
- Создание агента задания.
- Выполнение запроса T-SQL к нескольким базам данных клиента.
- Обновление ссылочных данных во всех базах данных клиента.
- Создание индекса для таблицы во всех базах данных клиента.
Необходимые компоненты
Должно быть развернуто приложение SaaS Wingtip Tickets для мультитенантных баз данных.
- Соответствующие инструкции представлены в первом руководстве по приложению SaaS Wingtip Tickets для мультитенантных баз данных.
Deploy and explore a sharded multi-tenant application that uses Azure SQL Database (Развертывание и изучение сегментированного мультитенантного приложения, использующего Базу данных SQL Azure).- Процесс развертывания занимает меньше пяти минут.
- Установите версию Wingtip с сегментированной мультитенантной базой данных. В данном руководстве не поддерживаются версии для автономной и однотенантной баз данных.
- Соответствующие инструкции представлены в первом руководстве по приложению SaaS Wingtip Tickets для мультитенантных баз данных.
Установите последнюю версию SQL Server Management Studio (SSMS). Скачайте и установите SSMS.
Установите Azure PowerShell. Дополнительные сведения см. в статье Начало работы с Azure PowerShell.
Общие сведения о шаблонах управления схемой SaaS
Благодаря модели сегментированной мультитенантной базы данных, используемой в этом примере, база данных может содержать один или больше клиентов. В этом примере рассматривается возможность использования комбинации мультитенантных и однотенантных баз данных, что обеспечивает гибридную модель управления клиентами. Управление изменениями для этих баз данных может быть затруднительным. Эластичные задания упрощают администрирование большого числа баз данных и управление ими. Задания позволяют вам безопасно и надежно выполнять задачи (сценарии Transact-SQL) в группах баз данных клиента. Задачи не зависят от действий пользователя. Этот метод можно использовать для развертывания изменений в схему или справочных данных по всем клиентам в приложении. Задания обработки эластичных баз данных также могут использоваться для обслуживания эталонной копии шаблона базы данных. Этот шаблон используется для создания клиентов, обеспечивая ее самыми последними схемами и справочными данными.
Задания обработки эластичных БД
В 2024 году эластичные задания были выпущены в качестве общедоступного продукта с новыми функциями. Интегрированная функция База данных SQL Azure см. в заданиях эластичной базы данных.
Получение скриптов и исходного кода для SaaS-приложения Wingtip Tickets c мультитенантной БД
Скрипты для SaaS-приложения Wingtip Tickets c мультитенантной базой данных и исходный код этого приложения вы найдете в репозитории GitHub WingtipTicketsSaaS-MultitenantDB. Инструкции по скачиванию и разблокированию сценариев приложения SaaS Wingtip Tickets см. в статье Общие рекомендации по работе с примерами приложений SaaS Wingtip Tickets.
Создание агента заданий и базы данных для него
В этом руководстве требуется создать базу данных агента заданий и агент заданий с помощью PowerShell. Как и msdb
база данных, используемая агентом SQL, агент заданий использует базу данных в База данных SQL Azure для хранения определений заданий, состояния задания и журнала. Создав агент заданий, вы можете сразу создавать и отслеживать задания.
- В среде PowerShell ISE откройте файл ...\Learning Modules\Schema Management\Demo-SchemaManagement.ps1.
- Нажмите клавишу F5 для запуска скрипта.
Скрипт Demo-SchemaManagement.ps1 вызывает скрипт Deploy-SchemaManagement.ps1 для создания базы данных с именем jobagent
на сервере каталога. Затем скрипт создает агент задания, передав jobagent
базу данных в качестве параметра.
Создание задания и развертывание новых справочных данных на всех клиентах
Подготовить
База данных каждого клиента включает набор типов мест в VenueTypes
таблице. Они определяют вид событий, проводимых в этом месте. Эти типы мест проведения соответствуют фоновому изображению, которое отображается в приложении событий клиента. В этом упражнении вы развернете обновление во всех базах данных, чтобы добавить два дополнительных типа объектов: Motorcycle Racing (Мотоциклетные гонки) и Swimming Club (Плавательный клуб).
Сначала проверьте типы мест проведения, включенные в каждой клиентской базе данных. Подключитесь к одной из баз данных клиента в SQL Server Management Studio (SSMS) и проверьте таблицу VenueTypes
. Выполнить запрос к этой таблице можно также в редакторе запросов на портале Azure, открыв его со страницы базы данных.
- Откройте SSMS и подключитесь к серверу клиента:
tenants1-dpt-<user>.database.windows.net
- Чтобы убедиться, что мотоцикл гоночный и купальный клуб в настоящее время не включены, перейдите к
contosoconcerthall
базе данных на сервереtenants1-dpt-<user>
и запросите таблицуVenueTypes
.
Шаги
Теперь вы создадите задание для обновления VenueTypes
таблицы в каждой базе данных клиентов, добавив два новых типа мест проведения.
Чтобы создать новое задание, используйте набор хранимых процедур системы заданий, созданных в jobagent
базе данных. Эти хранимые процедуры были созданы вместе с агентом заданий.
В SSMS подключитесь к серверу клиента:
tenants1-mt-<user>.database.windows.net
Перейдите
tenants1
к базе данных.Запросите таблицу
VenueTypes
, чтобы убедиться, что мотоцикл гоночный и купальный клуб еще не в списке результатов.Подключитесь к серверу каталога, который является
catalog-mt-<user>.database.windows.net
.Подключитесь к
jobagent
базе данных на сервере каталога.В среде SSMS откройте файл ...\Learning Modules\Schema Management\DeployReferenceData.sql.
Измените инструкцию:
set @User = <user>
и замените значение пользователя, используемое при развертывании приложения SaaS Multi-tenant Database Wingtip Tickets.Нажмите клавишу F5 для запуска скрипта.
Наблюдение за
В сценарии DeployReferenceData.sql обратите внимание на следующие элементы:
sp_add_target_group создает целевую группу с именем DemoServerGroup и добавляет целевые элементы в группу.
sp_add_target_group_member добавляет следующие элементы:
- Тип целевого элемента server.
tenants1-mt-<user>
Это сервер, содержащий базы данных клиентов.- При добавлении сервера добавляются базы данных клиента, существующие на момент выполнения задания.
- Тип целевого элемента базы данных для базы данных-шаблона (
basetenantdb
), которая находится наcatalog-mt-<user>
сервере, - Тип целевого элемента базы данных для включения
adhocreporting
базы данных, используемой в более позднем руководстве.
- Тип целевого элемента server.
sp_add_job создает задание с названием Reference Data Deployment (Развертывание справочных данных).
sp_add_jobstep создает шаг задания, содержащий текст команды T-SQL для обновления эталонной таблицы
VenueTypes
.Остальные представления в скрипте отображают сведения о существовании объектов и отслеживают выполнение задания мониторинга. С помощью этих запросов можно просмотреть значение состояния в столбце lifecycle, чтобы определить, когда задание будет завершено. Задание обновляет базу данных клиентов и две дополнительных базы данных, содержащих ссылочную таблицу.
В SSMS перейдите к базе данных клиента на сервере tenants1-mt-<user>
. Запросите таблицу VenueTypes
, чтобы подтвердить, что мотоцикл гоночный и купальный клуб теперь добавляются в таблицу. Общее число типов объектов должно увеличиться вдвое.
Создание задания для управления индексом справочной таблицы
Оно создает задание для перестройки индекса первичного ключа ссылочной таблицы во всех базах данных клиента. Перестройка индекса — это обычная операция управления базой данных, которую администратор может выполнить для улучшения производительности после загрузки больших объемов данных.
В SSMS подключитесь к
jobagent
базе данных на сервереcatalog-mt-<user>.database.windows.net
.В среде SSMS откройте файл ...\Learning Modules\Schema Management\OnlineReindex.sql.
Нажмите клавишу F5 для запуска скрипта.
Наблюдение за
В сценарии OnlineReindex.sql обратите внимание на следующие элементы:
sp_add_job
создает новое задание с именем Online Reindex PK__VenueTyp__265E44FD7FD4C885.sp_add_jobstep
создает шаг задания, содержащий текст команды T-SQL для обновления индекса.Остальные представления в скрипте отслеживают выполнение задания. Используйте эти запросы для проверки значения состояния в столбце
lifecycle
, чтобы определить, когда задание успешно завершено для всех членов целевой группы.
Дополнительные ресурсы
Следующие шаги
Из этого руководства вы узнали, как выполнять такие задачи:
- Создание агента заданий для выполнения заданий T-SQL в нескольких базах данных.
- Обновление ссылочных данных во всех базах данных клиента.
- Создание индекса для таблицы во всех базах данных клиента.
После этого ознакомьтесь с руководством по автоматизированной системе отчетности, чтобы узнать о выполнении распределенных запросов в клиентских базах данных.