8

Я разрабатываю приложение для нескольких арендаторов. Я выбрал подход «Общие базы данных/отдельные схемы».Как обновить в приложении Multi Tenant все схемы всех арендаторов?

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

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

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

ответ

5

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

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

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

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

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

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

+0

Я думал об использовании фреймворка как Migrator.Net или RikMigrations. Итак, я могу на своем сервере сборки создать сборку, которая получит самую последнюю версию и выполнит команду, которая проверяет и обновляет мои схемы. Одна из проблем, которые я вижу, - это когда у приложения много арендаторов, этот процесс обновлений будет медленным и опасным. Что вы думаете? Спасибо Mike –

+0

Если вы можете закрыть приложение в окне обслуживания, это лучше всего/проще всего. не заботятся об обновлениях данных и т. д., вы можете иметь резервные копии нескольких экземпляров и переносить их на свои sql-серверы. Мы сделали настройку страницы с передней дверью, которая перенаправляет пользователей определенной версии на конкретный serer/path. Если запрос на аутентификацию приходит, и их db помечен как в обновлении, мы перенаправляем их на страницу «вниз для обслуживания» и не передаем их в приложение. после их резервного копирования для них они могут быть перенаправлены с аутентификации на серверы с новой версией – MikeJ

+0

Я посмотрел на rikMigrations. Обман, который я видел, заключался в том, что у него нет возможности работать с SP или Views, возможно потому, что это обновление при выполнении любого DDL-кода. мы включаем в наш текущий код сценариев, чтобы удалить все эти артефакты, а затем перестроить их для новой схемы. – MikeJ

1

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

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

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

+1

Моя идея автоматизирует этот процесс. Используя программу, подобную SQL Compare, , процесс выполняется вручную. Благодарю. –

+0

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

Смежные вопросы