Exportar todos os dados (incluindo logins, servidores vinculados, tarefas do SQL Agent, configurações do DB Mail, etc.) e reconstruir os dados no nível da instância, além de recarregar todos os dados do usuário, é muito trabalhoso. E, mesmo depois de tudo isso, ainda não há garantia de que você possa atualizar o agrupamento padrão de um banco de dados, ALTER DATABASE
pois existem várias condições que impedirão a conclusão da operação (consulte a seção "Alterando oALTER DATABASE
agrupamento do banco de dados" da documentação para obter detalhes) .
Há, no entanto, um método não documentado que é muito mais fácil. A principal desvantagem é que não há suporte. Isso não quer dizer que algo dê errado, apenas que, se algo acontecer, a Microsoft não ajudará a corrigi-lo (porque eles nunca garantiram que funcionaria).
O método de que falo está sendo executado sqlservr.exe
com o -q {new_collation_name}
switch. Há um pouco mais do que isso, mas essa é a idéia básica. Este método simplesmente atualiza os metadados do sistema, que traz benefícios e consequências, sendo os principais:
BENEFÍCIOS
- muito rápido
- ignorar a maioria das restrições que impedem o
ALTER DATABASE
trabalho
- provavelmente muito mais preciso do que qualquer script criado pelas pessoas ao longo dos anos para descartar e recriar objetos
DRAWBACKS
- não é suportado se algo der errado
VARCHAR
os dados podem mudar, SE a página de código for diferente entre os agrupamentos antigos e novos e existirem caracteres com valores de 128 a 255 (0x80 - 0xFF) e esses caracteres não existirem como o mesmo caractere com o mesmo valor no novo código página. Portanto, existe o potencial de perda de dados, e seus dados precisam ser pesquisados primeiro para garantir que essa condição não exista. Porém, isso também significa que há muitos casos com apenas caracteres com valores de 0 a 127 que não correm risco, mesmo que a página de códigos seja alterada.
- Os tipos de tabela definidos pelo usuário (UDTTs) são ignorados e precisam ser atualizados manualmente.
Para obter uma descrição detalhada do que o sqlservr.exe -q
método faz e o que não faz (incluindo detalhes sobre como os agrupamentos funcionam nos vários níveis e possíveis problemas a serem observados), consulte meu post:
Alterando o agrupamento da instância, dos bancos de dados e de todas as colunas em todos os bancos de dados do usuário: o que pode dar errado?
Para alterar apenas a instância (incluindo os bancos de dados do sistema: master
, model
, msdb
, e tempdb
) e um ou mais bancos de dados (mas não todos os bancos de dados), simplesmente desanexar o banco de dados (s) que deseja excluir esta operação, e então re-anexá-los assim que a atualização do agrupamento for concluída.