Alterando o Collation do servidor

Getting your Trinity Audio player ready...

Todo mundo já percebeu que quando você está instalando o SQL Server, em algum ponto da instalação você tem que escolher qual o collation que será usado para aquela instância,,, Até ai sem problemas,,,

Mas depois você percebe que alguém do time de DEV te manda um print screen com alguma mensagem de erro do tipo:

Cannot resolve collation conflict for equal operation

Ai essa mesma pessoa lhe informa que quando aponta a aplicação X para o banco de DEV e faz a mesma coisa não tem erro. Você acessa a instância de DEV e compara o collation dos bancos ( Prod Vs Dev) e percebe que são iguais.

Com uma análise mais a fundo percebe que a instância do SQL está com o collation diferente. Legal, você achou o motivo do erro, agora como corrigir?

Se você seguir o BOL existem 2 métodos, ambos são os oficiais e funcionam, mas existem sempre efeitos colaterais:

  1. Usando o Rebuildm.exe um exemplo está neste link. O Efeito colateral é que ele refaz todas as bases de sistema, o que isso quer dizer? Adeus usuários, jobs, bases (os arquivos estão no servidor mas sem vinculo no SQL), linked servers,,, etc etc etc,,,
  2. Eu prefiro usar o setup.exe /qn INSTANCENAME=MSSQLSERVER REINSTALL=SQL_ENGINE REBUILDDATABASE=1 SAPWD=NOVASENHA SQLCOLLATION=NovoCollation. Para a instância padrão use o MSSQLSERVER. Funciona? funciona,,, vai deixar o SQL indisponivel durante a execução, mas funciona… O efeito colateral é,,, ainda não achei nenhum problema, se você que está lendo já teve problemas usando esse procedimento deixa um comentário.
  3. Esse último é do tipo procedimento do arrebento,,,, bem maldade,,,, vai demorar mais que o procedimento 2,,, mas ele vai varrer todos os bancos, tabelas, índices,,, e vai converter tudo para a versão que você escolher… o comando é: sqlservr.exe -sTESTE -m  -T4020 -T3659 -q”Latin1_General_BIN” , Atenção para: o –sTESTE é junto mesmo vai o nome da intância, se for rodar na default apaga o –s, a mesma coisa para o –q,,,, preste atenção nos –T4020 e –T3659 tem que ser em maiúsculo… O efeito colateral é: alem de demorar demais, ele regrava todos os collations de todas as bases na instância do SQL e esse é um procedimento não documentado, em outras palavras vai por conta e risco.

Se mesmo desta forma você não conseguir alterar o collation da sua instância do SQL, extraia os usuários, jobs, linked servers, bancos, etc… remove o SQL e instala da forma necessária.

Qualquer que seja a forma que isso for executado, vai tomar tempo. Prepare uma boa janela de manutenção.

Leave a Reply

Your email address will not be published. Required fields are marked *