Como alterar a collation da minha instância?

Introdução

Durante o meu dia de trabalho, tive a necessidade de alterar a collation de uma instância de SQL Server 2012. A causa era simples: Esta instância seria o DR de uma outra instância com uma collation diferente.

Principais consequências em alterar a collation
Infelizmente, para alterar a collation de uma instância é necessário fazer rebuild da base de dados de sistema “master”. Sim, a MASTER. E isso significa perder muita coisa…. como o os logins e o tracking das BDs montadas na instância (as BDs não são apagadas!).
Como faço para alterar a collation?
Temos duas opções:
  1. O referido rebuild da master.
  2. Reinstalar a instância.
Temos que medir o esforço e o tempo de indisponibilidade das duas opções, para fazer uma boa escolha…Isso varia dependendo da situação.
Aqui irei falar da opção 1 – O rebuild da master.
Basicamente o rebuild é uma tarefa simples. O seguinte comando deverá ser executado:

Setup /QUIET /ACTION=REBUILDDATABASE /INSTANCENAME=<ID da instância> /SQLSYSADMINACCOUNTS=<Contas de dominio que serão Sysadmin separadas por virgula> [/SAPWD=<Password para a conta SA, se aplicável>] /SQLCOLLATION=<Nova Collation>

Exemplo:
Setup /QUIET /ACTION=REBUILDDATABASE /INSTANCENAME=MSSQLSERVER /SQLSYSADMINACCOUNTS= DOMAINUser1,DOMAINUser2 /SAPWD=!37gh78ge /SQLCOLLATION=Latin1_General_CI_AS

Alguns factos importantes:

  • O comando deverá ser executado na console do Windows (cmd), na pasta que se encontram os binários de instalação do SQL Server.
  • O parâmetro “/INSTANCENAME” não é o nome da instância, e sim o seu ID.
    • Isso poderá ser descoberto ao executar o seguinte comando:
    • SELECTISNULL(ServerProperty(‘InstanceName’),‘MSSQLSERVER’)InstanceName
  • O serviço deverá estar offline.
  • Depois da execução do comando, o seguinte será mostrado, se o comando for bem sucedido:
    Microsoft (R) SQL Server 2012 11.00.2100.60
    Copyright (c) Microsoft Corporation.
    All rights reserved.
  • No caso de erro, uma mensagem será gerada, assim como um ficheiro com mais detalhes

Sumário

  • Se a instância é nova e o “problema” foi descoberto a tempo, esta tarefa é relativamente simples.
  • Se a instância já estiver bem consolidada, com logins, bases de dados, linked servers, etc… Teremos muito trabalho pela frente.
    • Se este for o seu caso, este link vai ajudar bastante na tarefa de guardar as definições da master.