2015-09-14 2 views
0

У меня есть распределенное приложение с несколькими процессами на нескольких серверах, подключающихся к базе данных SQL Server.Блокировка уровня базы данных в Microsoft SQL Server: миграции схем

Мне нужно перенести схему базы данных в код во время первого запуска, так как развертывание обновления может быть выполнено с пользователем без доступа к базе данных (мы используем доступ к базе данных объекта компьютера).

В настоящее время это делается путем предоставления файла sql с инструкциями, а затем пользователь с доступом к db (но потенциально без доступа к приложениям) будет запускать это самостоятельно.

Поскольку приложения не разговаривают друг с другом (межсетевые экраны, разные контроллеры домена и т. Д.), Я думал, что мне нужно будет назначить один сервер как «хозяин», а все остальные - «рабы», а затем мастера процесс, который должен начаться, должен получить мьютекс и выполнить миграцию схемы; все остальные могли просто подождать, пока они не смогут увидеть, как схема мигрирует.

Однако у меня есть определенный запах кода для меня.

Я попытался изучить, как Entity Framework обрабатывает это при первых переходах кода, и кажется, что они этого не делают (например, если два процесса запускаются в одно и то же время, они оба попытаются перенести схему).

Любые другие подходы?

ответ

1

Вы можете изменить режим работы базы данных на однопользовательский (другие соединения), будет отказано. Внесите изменения, а затем измените многопользовательский режим.

EDIT:

Существует трюк, как получить "семафор". Вы можете обновлять/удалять записи. Пока транзакция не будет открыта, эксклюзивный замок будет удерживаться. Вероятно, если вы удалите 0 записей (с подсказкой таблицы) из каждой таблицы в транзакции, вы, вероятно, достигнете такого же поведения, как «глобальный мьютекс» для пользователей базы данных. Но я не знаю, какое поведение будет связано с изменениями схемы.

+0

Это работает только в том случае, если отправка журнала транзакций отсутствует; реплицированный db не может войти в SUM. – zaitsman

+0

Понимаю, см. Раздел редактирования. – TcKs

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