Как добиться развертывания с нулевым временем простоя при изменении схемы базы данных

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

  1. Основная база данных будет обслуживать запросы, а изменения будут реплицироваться в зеркальную базу данных.
  2. Перед развертыванием остановите процесс репликации с основного сервера на зеркальный.
  3. Выполните изменения схемы базы данных для зеркалирования.
  4. На короткую паузу сделайте принципал доступным только для чтения.
  5. Повторно реплицируйте изменения с основного сервера на зеркальный.
  6. Направить запросы на зеркало (выполнить переключение ролей)
  7. Выполните изменения схемы базы данных для исходного принципала (теперь зеркало после переключения роли).

person coolguy    schedule 11.11.2010    source источник


Ответы (1)


У меня есть сомнения как в осуществимости, так и в полезности шага 5. Если субъект доступен только для чтения и происходит переключение ролей, зачем пытаться реплицировать изменения?

person Victor Nicollet    schedule 11.11.2010
comment
Пока изменения схемы базы данных обновлялись в зеркале, у принципала будут некоторые новые данные, которые необходимо реплицировать в зеркало. Принципал на короткое время становится доступным только для чтения, чтобы в основной базе данных не было новых записей при выполнении репликации на шаге 5. - person coolguy; 11.11.2010
comment
Я понимаю. Затем вам нужно проверить, поддерживает ли SQL Server репликацию между базами данных с разными схемами (я был бы удивлен, если бы это было так, но я могу ошибаться). - person Victor Nicollet; 11.11.2010
comment
Найдено 2 ссылки на то, что репликация поддерживается между базами данных с разными схемами. При условии, что на подписчике разрешено только чтение, индексированное представление на издателе может быть реплицировано с использованием репликации транзакций (Ref:eggheadcafe.com/software/aspnet/34233735/). В качестве альтернативы можно использовать хранимую процедуру (см. "nofollow noreferrer">sqldev.org/sql-server-replication/) с использованием хранимой процедуры и - person coolguy; 11.11.2010
comment
Ах, проиндексированные просмотры. Не думал об этом, но я понимаю, почему это сработает. Это потребует от вас добавления дополнительного шага перед шагом 2, который заключается в создании индексированных представлений (в противном случае он может быть не готов вовремя, когда вы захотите возобновить репликацию). - person Victor Nicollet; 11.11.2010