Estou procurando atualizar vários usuários em bancos de READ_ONLY
dados.
Como os bancos de dados são usados 24 horas por dia, 7 dias por semana em todo o mundo e as janelas de manutenção acabaram, gostaria de fazer isso durante um momento de baixa atividade (para poder cumprir os prazos).
Atualmente estou pensando em usar:
USE MASTER
GO
ALTER DATABASE SQL SET READ_WRITE
GO
USE SQL
GO
EXEC sp_addrolemember N'db_datareader', N'USER'
GO
USE MASTER
GO
ALTER DATABASE SQL SET READ_ONLY
GO
No entanto eu quero:
- Garanta que isso não fique travado indefinidamente
- Certifique-se de que nada pode ser gravado no banco de dados durante esta ação
Como não posso colocar esses comandos em uma transação e não tenho um servidor de aplicativos disponível nos ambientes DEV ou STG para testar as alterações antecipadamente, existe alguma documentação sobre a alteração read_only
de estados para ações únicas? (Eu testei as instruções T-SQL e elas funcionam)
Além disso, como isso requer um bloqueio exclusivo no banco de dados, é provável que eu consiga passar minha declaração?
Estou inclinado a apenas propor que isso terá que esperar até a próxima janela de manutenção, ponto final. Mas espero que alguém aqui possa provar que estou errado.
Você pode definir o banco de dados para
SINGLE_USER
que nenhuma outra sessão possa entrar enquanto você estiver executando suas alterações. Além disso,sp_addrolemember
foi obsoleto; você deveria estar usando em seuALTER ROLE
lugar. Por fim, adquira o hábito de usar terminadores de instrução .