Atualização de SQL Server para Service Pack 3 falha com erro 446
Por Helio Rosental
Recentemente tive um caso que não era difícil mas tomou mais tempo do que deveria devido a situação não ser comum nos USA, mas que tem uma grande chance de ocorrer em países da America Latina e Europa.
O problema tem a ver com o seguinte error que aconteceu durante uma atualização de um servidor SQL Server 2005 do Service Pack 2 para Service Pack 3:
MSP Error: 29536 SQL Server Setup has encountered the following problem: [Microsoft][SQL Native Client][SQL Server]Cannot resolve the collation conflict between "Latin1_General_CI_AS" and "Latin1_General_CI_AI" in the equal to operation.. To continue, correct the problem, and then run SQL Server Setup again.
Como é possível receber o erro 446 durante a instalação do Service Pack se SQL Server permite configurações de "collation" a nível de servidor, base de dados e até mesmo colunas em tabelas?
A resposta a esta questão tem a ver com o modo que SQL Server manipula "collations" de diferentes granularidades e esta muito bem documentada em SQL Server 2005 Books Online no assunto genérico "Collations". Verifique o parágrafo "Collations and tempdb" do tópico "Setting and Changing the Column Collation", o qual explica como o conflito pode ocorrer por termos "collations" em bases de usuários diferentes do "collation" das bases do sistema. No meu caso, a base master tinha um "collation" diferente das demais bases de sistema causando o erro.
Essa configuração aonde uma ou mais base de dados de sistema tem "collations" diferentes está muito alem de ser suportada e esta completamente errada. O único modo de termos este cenário é restaurando uma cópia de segurança da base de sistema de um outro servidor.
Para resolver este problema você deve fazer o seguinte:
1. Recuperar a base de sistema conflitante a partir de uma copia de segurança que seja da mesma base com "collation" igual a das outras bases de sistema, se disponível.
2. Reconstruir as bases de sistema.
Vale a pena mencionar também que o SQL Server Best Practices Analyzer teria identificado a situação e recomendado consertá-la.