Прежде всего вам понадобится таблица или другой механизм для хранения информации о версии схемы. Если ничего другого, чтобы вы могли привязать ваше приложение и схему вместе. Там нет ничего более болезненного, чем версия приложения к изнаночной схеме — упущения, развращают данные и т.д.
Приложение должно отклонять или отключение, если его не правильный вариант — вы можете получить некоторый Blowback, когда его не так, но защищает вас от действительно плохого дня, когда база данных развращает ценные данные.
Вам понадобится способ отслеживания изменений, таких как Subversion или что-то еще — из SQL, вы можете экспортировать исходную схему. Отсюда вам понадобится механизм отслеживания изменений с помощью хорошего инструмента, такого как сравнение SQL, а затем отслеживать изменения схемы и соответствовать обновлению в номере версии в целевой базе данных.
Мы сохраняем каждую дельту в отдельной папке под утилитой обновления, которую мы создали. Эта утилита вывешивается на сервер, читает информацию о версии и затем применяет сценарии преобразования из следующей версии в базе данных, пока не найдет больше скриптов обновления в своей подпапке. Это дает нам возможность обновлять базу данных независимо от того, насколько она устарела для текущей версии. Если есть уникальные преобразования данных арендатора, это будет сложно.
Конечно, вы всегда должны делать резервную копию базы данных, которая записывается во внешний файл, желательно с идентификационным номером человека, чтобы вы могли его найти и восстановить, когда скрипт (ы) плохо работает. И, в конце концов, это позволит просто планировать, как восстановить и восстановить.
Я видел, что в новом VS 2010 есть какой-то инструмент для обновления схемы, но я не использовал его. Это также может быть полезно для вас.
Я думал об использовании фреймворка как Migrator.Net или RikMigrations. Итак, я могу на своем сервере сборки создать сборку, которая получит самую последнюю версию и выполнит команду, которая проверяет и обновляет мои схемы. Одна из проблем, которые я вижу, - это когда у приложения много арендаторов, этот процесс обновлений будет медленным и опасным. Что вы думаете? Спасибо Mike –
Если вы можете закрыть приложение в окне обслуживания, это лучше всего/проще всего. не заботятся об обновлениях данных и т. д., вы можете иметь резервные копии нескольких экземпляров и переносить их на свои sql-серверы. Мы сделали настройку страницы с передней дверью, которая перенаправляет пользователей определенной версии на конкретный serer/path. Если запрос на аутентификацию приходит, и их db помечен как в обновлении, мы перенаправляем их на страницу «вниз для обслуживания» и не передаем их в приложение. после их резервного копирования для них они могут быть перенаправлены с аутентификации на серверы с новой версией – MikeJ
Я посмотрел на rikMigrations. Обман, который я видел, заключался в том, что у него нет возможности работать с SP или Views, возможно потому, что это обновление при выполнении любого DDL-кода. мы включаем в наш текущий код сценариев, чтобы удалить все эти артефакты, а затем перестроить их для новой схемы. – MikeJ