Я работаю над краткосрочным планированием аварийного восстановления в моей компании, и мы планируем использовать реплицированные серверы отчетов в качестве резервных копий в случае смерти нашего основного сервера транзакций.
Наше веб-приложение может выполнять запись на этот сервер транзакций, но только с определенными правами, предоставленными ролью SQL. (веб-приложение) Я хочу дать нам способ обновить эту роль, которая также обновляет ту же роль, что и на других серверах. Таким образом, если мы переключаемся на другой сервер, наша роль веб-приложения достаточно близка к той же, если не точно такой же. (Я не очень беспокоюсь о том, чтобы кто-то обновлял его напрямую)
Итак, у меня есть MakeWebWriteable
процедура, которая должна сгенерировать и выполнить некоторый код, как показано ниже. За исключением того, что ниже явно не будет работать. Я в недоумении, как ссылаться на роль и обновлять ее на удаленном сервере. Я думал об использовании exec (@sql) at [reporting\server]
, но я не уверен, как я буду ссылаться на объект роли определенной базы данных в этом.
grant insert, update, delete on dbo.TableName to webapplication
grant insert, update, delete on [reporting\server].DBName.dbo.TableName to [reporting\server].DBName.dbo.webapplication
Как я могу это сделать, или есть идеи получше? (т.е. репликация)
<ч />
edit 1: Обычно мы пишем миграции в виде сценариев SQL, фиксируем их в SVN и обновляем наши базы данных сценарием синхронизации - что-то вроде процесса в RoR, только без преобразования модели -> SQL , В идеале, мы бы просто поместили строку в конце миграции, в которую мы добавили таблицу, например, если мы хотим, чтобы таблица была доступна для веб-записи.
-- Code to create NewTable...
if object_id('SetWebWriteable') is not null
exec SetWebWriteable @tableName = 'NewTable'
Таким образом, на наших машинах для разработчиков ничего не происходит, но в наших тестовых и производственных средах происходят правильные действия. Если роль можно реплицировать автоматически, то, естественно, нам не нужно это делать.