У меня есть распределенное приложение с несколькими процессами на нескольких серверах, подключающихся к базе данных SQL Server.Блокировка уровня базы данных в Microsoft SQL Server: миграции схем
Мне нужно перенести схему базы данных в код во время первого запуска, так как развертывание обновления может быть выполнено с пользователем без доступа к базе данных (мы используем доступ к базе данных объекта компьютера).
В настоящее время это делается путем предоставления файла sql с инструкциями, а затем пользователь с доступом к db (но потенциально без доступа к приложениям) будет запускать это самостоятельно.
Поскольку приложения не разговаривают друг с другом (межсетевые экраны, разные контроллеры домена и т. Д.), Я думал, что мне нужно будет назначить один сервер как «хозяин», а все остальные - «рабы», а затем мастера процесс, который должен начаться, должен получить мьютекс и выполнить миграцию схемы; все остальные могли просто подождать, пока они не смогут увидеть, как схема мигрирует.
Однако у меня есть определенный запах кода для меня.
Я попытался изучить, как Entity Framework обрабатывает это при первых переходах кода, и кажется, что они этого не делают (например, если два процесса запускаются в одно и то же время, они оба попытаются перенести схему).
Любые другие подходы?
Это работает только в том случае, если отправка журнала транзакций отсутствует; реплицированный db не может войти в SUM. – zaitsman
Понимаю, см. Раздел редактирования. – TcKs