Estava tranquilamente aplicando o SP2 em um dos trocentos Sql Server 2008 R2 que suporto quando um colega de trabalho me pinga. Estou com um problema, a instalação do meu SP2 falhou, vendo os logs indentificamos que o msdb estava com um collation diferente dos outros bancos de sistema e de alguma forma estava impactando a instalação. E agora, o que fazer?
ALTER DATABASE [NOME DO BANCO] COLLATE [NOME DA COLLATION]
Infelizmente para bancos de sistema isso não funciona. Outra solução seria reinstalar ou fazer um rebuild dos bancos de sistema, o que não nos ajuda muito, apenas frustra. Mas com um pouco de criatividade podemos resolver este problema.
Solução:
Para o meu amigo alterar o MSDB ja resolvia o problema dele, mas aqui nós vamos radicalizar e alterar o collation do MASTER.
Para começar faça um backup do banco de dados master:
backup database master to disk=’[your path]\master.bak’
Depois restaure o master com outro nome:
restore database master2 from disk =’[your path]\master.bak’ with move ‘master’ to ‘[your path]\master2.mdf’, move ‘mastlog’ to ‘[your path]\masterlog2.ldf’
Agora vamos ver a collation do master e do master2:
select name, collation_name from sys.databases
Note que a collation é a mesma.
Vamos alterar a collation do master2 usando o comando que vimos no inicio:
ALTER DATABASE [master2] COLLATE Latin1_General_CI_AS_KS_WS
Como o master2 não é um banco de sistema o objetivo é facilmente alcançado.
Agora de shutdown em seu servidor
O proximo passo é renomear os arquivos dos bancos, renomeie o data e log file do banco de dados master para old(sugestão) e os arquivos do banco master2 para os nomes originais do banco master. Figuras abaixo ilustram.
Antes:
Depois:
Reinicie o Serviço do Sql Server.
Rode novamente:
select name, collation_name from sys.databases
Resultado:
Esse procedimento pode ser usado em todos os bancos do sistema. Para o tempdb basta alterar o collation do banco model.
Fim.