У нас есть веб-приложение, которое подключено к серверу MS SQL. В базе данных (назовем это Prod-database) мы храним конфигурацию нашего приложения (некоторые таблицы с правами доступа и т. Д.) И информацию о наших клиентах. В течение дня мы получаем новых клиентов и заказы.
Основная идея - обновить наше приложение до следующего патча. Процесс обновления (с тестированием) занимает около 12 часов. Проблема в том, что мы не хотим терять данные о клиентах в течение «дня обновления»
- Поэтому мы решили, что не будем ничего делать с Prod-database в течение дня. Это будет работать как обычно.
Это процесс обновления (приложение Productive работает):
- В начале «дня обновления» мы создадим другую базу данных, используя резервную копию базы данных Prod, давайтеНазовите это Test-Database.
- Мы развертываем второе приложение, используя Test-Database.
- Мы обновляем Test-Database
- В течение дня мы тестируем новый патч
- После успешного тестирования мынеобходимо обновить разницу (информация о клиентах) между Test-Database и Prod-database
- Резервное копирование Test-database
- Восстановление Prod-базы данных из резервной копии Test-database
- Имы обновляемся
И главный вопрос: как правильно передать разницу? учитывая, что данные в базе данных Prod можно обновлять и вставлять, а не удалять.
- Использование для новых данных: Выберите * ОТ [База данных Prod]. [Заказ] INTO Test-Database. [Заказ]Где CreatedOn = [CurrentDate]
- Использование для измененных данных: обновление [Test-Database.]. [Order] SET [Test-Database]. [Order]. [AnyColumn] = [Prod-database]. [Order]. [AnyColumn] FROM [Prod-database]. [Order] Где [Prod-database]. [Order] .Id = [Test-Database]. [Order] .Id AND [Prod-database]. [Order].ModifiedOn = [CurrentDate]
Или есть какой-то другой, более эффективный способ, может быть, репликация или использование снимков. Не могли бы вы объяснить, как это сделать? Буду признателен за любую помощь.