Eu preciso reconstruir os índices em dois bancos de dados muito grandes (quase 750 tabelas), mas quero impedir que os usuários acessem o banco de dados enquanto isso acontece. Existe um estado em que posso colocar o banco de dados que impeça que os usuários o acessem, mas ainda permita que eu reconstrua os índices? Para referência, planejo o script fornecido em http://instadba.com/quick-script-to-defragment-your-sql-server-indexes/ para fazer a reconstrução.
relate perguntas
-
SQL Server 2012 Criar índice com Sort In TempDb On - Gains False?
-
Transparência de failover do SQL Server AlwaysOn
-
Por que as sequências Denali devem ter um desempenho melhor do que as colunas de identidade?
-
O SQL Server não deveria oferecer suporte a RANGE?
-
O que é SQL Server "Denali"? O que há de novo?
Dependendo da edição do sql server, se você estiver usando a edição Enterprise, poderá fazer a reconstrução do índice como operação online.
Além disso, o script que você referenciou apenas cegamente reconstrói índices, o que é uma ideia horrível (reconstruir cegamente todos os índices e atualizar estatísticas ??) Em vez disso, use um script muito comprovado e inteligente .
Eu não colocaria o banco de dados no modo de usuário único, como aludido por Scott, como se de alguma forma, por exemplo, o agente sql se conectasse ao banco de dados, então é difícil interromper a conexão, a menos que você se conecte usando DAC ou se
AUTO_UPDATE_STATISTICS_ASYNC
estiver ON, o thread de segundo plano irá capturar a conexão e você estará sem sorte!Em vez disso, coloque o banco de dados no modo restrito - para que apenas usuários com direitos dbo no banco de dados sejam permitidos (por exemplo, db_owner, dbcreator, sysadmin). Isso pressupõe que seus usuários finais não têm permissão para se conectar como db_owner ou sysadmin.
Lembre-se de que a reconstrução do índice é uma operação off-line (a menos que você esteja usando a edição Enterprise com a opção REBUILD = ONLINE).
Comando para colocar o banco de dados no modo de usuário restrito e voltar para multiusuário:
No passado, quando eu queria restringir o acesso a um banco de dados, eu usava o modo RESTRICTED_USER. No entanto, isso não funcionará se seus usuários forem membros da função db_owner. Sei que essa não é uma função recomendada para os usuários, mas às vezes é isso que você acaba fazendo. Padronizei desabilitar o login durante as janelas de manutenção para não ter que me preocupar com usuários com acesso elevado.
Exemplo:
Não se esqueça de ativá-los quando terminar! Exemplo: