Как обновление во Много приложении Арендатора вся схема всех арендаторов?

Я разрабатываю многопользовательское приложение. Я выбрал подход "Shared Database / Separate Schemas".

Моя идея состоит в том, чтобы иметь схему по умолчанию (dbo) и при развертывании этой схемы, чтобы сделать обновление на схемах арендаторов (tenantA, tenantB, tenantC); другими словами, для создания синхронизируемых схем.

Как я могу синхронизировать схемы арендаторов со схемой по умолчанию?

Я использую SQL Server 2008.

8
задан Keith Pinson 26 May 2015 в 17:09
поделиться

2 ответа

Первое, что вам понадобится, это таблица или другой механизм для хранения информации о версии схемы. Если не больше, то для того, чтобы вы могли связать ваше приложение и схему вместе. Нет ничего более болезненного, чем версия приложения против неправильной схемы - сбой, повреждение данных и т.д.

Приложение должно отклоняться или выключаться, если его версия не подходит - вы можете получить некоторый удар, если оно не подходит, но это защитит вас от действительно плохого дня, когда база данных испортит ценные данные.

Вам понадобится способ отслеживания изменений, например, Subversion или что-то еще - из SQL вы можете экспортировать исходную схему. Отсюда вам понадобится механизм для отслеживания изменений с помощью такого хорошего инструмента, как SQL compare, а затем отслеживать изменения схемы и сопоставлять их с обновлением номера версии в целевой базе данных.

Мы храним каждую дельту в отдельной папке под созданной нами утилитой обновления. Эта утилита регистрируется на сервере, считывает информацию о версии и затем применяет скрипты преобразования из следующей версии в базе данных, пока не найдет больше скриптов обновления в своей папке. Это дает нам возможность обновлять базу данных независимо от ее возраста до текущей версии. Если есть преобразования данных, уникальные для арендатора, это может стать сложной задачей.

Конечно, вы всегда должны делать резервную копию базы данных, которая записывается во внешний файл, предпочтительно с идентифицируемым человеком номером версии, чтобы вы могли найти ее и восстановить, когда сценарий(и) испортится. И в конце концов это произойдет, так что просто планируйте, как выяснить, как восстановить и восстановить.


Я видел, что в новой VS 2010 есть какой-то инструмент для обновления схем, но я им не пользовался. Это также может быть полезно для вас.

5
ответ дан 5 December 2019 в 22:16
поделиться

Насколько мне известно, волшебной команды для синхронизации схем не существует. Вам понадобится инструмент - либо встроенный, либо купленный (ознакомьтесь с Red Gate's SQL Compare и SQL Examiner - вам нужно настроить их для сравнения различных схем).

Однако простая синхронизация часто бывает непростой задачей. Если вы добавили столбец, нужно ли вам также заполнить этот столбец данными? Если вы разделите столбец на два новых столбца, для чего-то вроде этого должен быть код преобразования.

Я бы посоветовал очень тщательно отслеживать любые сценарии, которые вы запускаете для схемы dbo, и при необходимости следить за тем, чтобы они запускались и для других схем. Затем вы можете использовать такой инструмент, как SQL Compare, в качестве случайной проверки работоспособности для поиска любых неожиданных различий.

1
ответ дан 5 December 2019 в 22:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: