Eu tenho um conjunto de dimensões que são atualizadas apenas em horários específicos.
Eu movi essas tabelas para um grupo de arquivos específico chamado Dimensions
. Eu quero manter este grupo de arquivos como somente leitura. Quando o ETL for executado, ele definirá o grupo de arquivos como leitura/gravação, execução e, em seguida, o definirá novamente como somente leitura.
Mas quando corro ALTER DATABASE MYDB MODIFY FILEGROUP Dimensions READ_ONLY
, recebo a mensagem Database state cannot be changed while other users are using the database 'MYDB'
.
Qual é a maneira menos intrusiva de evitar novas transações, esperar que as atuais terminem e, em seguida, executar este comando? Existe uma maneira de tornar um usuário único do banco de dados por algum tempo, ou torná-lo offline, tanto faz?
ATUALIZAÇÃO: Estou me baseando no artigo The Read Uncommitted Isolation Level :
Para cenários que exigem os mais altos níveis de garantia de consistência, serializável continua sendo a única opção segura. Para operações de desempenho crítico em dados somente leitura (por exemplo, bancos de dados grandes que são efetivamente somente leitura entre janelas ETL), definir explicitamente o banco de dados como READ_ONLY também pode ser uma boa escolha (os bloqueios compartilhados não são obtidos quando o banco de dados é somente leitura, e não há risco de inconsistência).
Normalmente as pessoas só querem expulsar todos os usuários imediatamente, então eles usam:
No seu caso, se você quiser que todas as atividades existentes continuem até chegar a sua vez, isso vai esperar indefinidamente:
Se você quiser dar um tempo, mas não esperar para sempre, pode dizer algo como:
Que vai esperar 5 minutos e, em seguida, reverter todas as transações restantes.
RESTRICTED_USER
pode ser uma opção para você também, casoSINGLE_USER
permita que agentes ou outros encadeamentos em segundo plano assumam sua conexão.Não conheço nenhuma maneira de definir o estado do banco de dados para que as transações existentes possam ser concluídas e nenhuma nova conexão (ou novas transações de conexões existentes) seja possível.
Algumas informações aqui: