http://lib.seven.com.br

Alterando o Collate Default SQL Server

Alterando o Collate Default do SQL Server assim como de todos os bancos e tabelas.


Uma dúvida muito comum nos fóruns de discussões é: Como alterar o collate de um servidor ou banco de dados? Muitos optam por reinstalar o SQL Server do zero, outros fazem o rebuild da master e demais bancos de sistema utilizando o procedimento documentado no Books Online, chamando o setup do SQL Server com a opção REBUILDDATABASE e especificando o novo COLLATION. Bom, a dica desta semana mostra como utilizar um procedimento não documentado para alterar o COLLATION Default de uma instância do SQL Server de forma rápida e simples.

Nota: Ressalto que o procedimento apresentado aqui é um procedimento não documentado e sua execução é por sua conta e risco. O nosso colega Sérgio Monteiro (que foi quem postou esta solução no fórum do MSDN Brasil) disse já utilizar este procedimento a alguns anos e nunca teve problemas. No entanto, cada ambiente é um ambiente e não posso garantir que isto não lhe trará problemas futuros.

Para tranqüilizar, só posso dizer que este é o mesmo procedimento utilizado pelo utilitário rebuildm.exe quando usado para alterar o collate de uma instância SQL Server 2000 ou ainda o mesmo utilizado quando se faz o REBUILD de uma instância do SQL Server 2005/2008 utilizando o procedimento abaixo, conforme documentando do Books Online no tópico Setting and Changing the Server Collation.

Setup /QUIET /ACTION=REBUILDDATABASE /INSTANCENAME=InstanceName
/SQLSYSADMINACCOUNTS=accounts /[ SAPWD= StrongPassword ]
/SQLCOLLATION=CollationName

A grande diferença é que o utilitário rebuildm.exe ou o procedimento acima, além de alterar o collation da instância também faz um REBUILD dos bancos de sistema (master, msdb,model, tempdb), ou seja, tudo fica como se fosse uma instalação zerada.

O interessante deste procedimento aqui apresentado é que DIFERENTE do utilitário rebuildm.exe ou do procedimento documentado no BOL, ele NÃO zera as bases de sistemas alterando apenas o collation default da instância, o collation de todas as bases de dados (sistema e usuários), das tabelas e respectivas colunas que possuem tipo de dados do tipo caracter (char, varchar, etc). Com isso, ao final do processo de alteração do collation tudo estará absolutamente como antes, ou seja, com todos os seus bancos de dados e logins funcionando normalmente como antes.

********************************
**Como Executar o Procedimento**
********************************
1. O primeiro passo é obviamente executar um bakup de todas as bases, incluindo as de sistema master,msdb e model.

2. Certifique-se que você não possui nenhuma base de dados em readonly, restoring ou qualquer outro status que impeça sua alteração e garanta que as bases não estão sem espaço livre. Já tive erros neste procedimento porque algumas bases estavam sem espaço livre.

3. Pare o serviço do SQL Server. É possível usar vários métodos, um deles é parar os serviços usando o utilitário SQL Server Configuration Manager (sqlservermanager10.msc).

Uma dúvida muito comum nos fóruns de discussões é: Como alterar o collate de um servidor ou banco de dados? Muitos optam por reinstalar o SQL Server do zero, outros fazem o rebuild da master e demais bancos de sistema utilizando o procedimento documentado no Books Online, chamando o setup do SQL Server com a opção REBUILDDATABASE e especificando o novo COLLATION. Bom, a dica desta semana mostra como utilizar um procedimento não documentado para alterar o COLLATION Default de uma instância do SQL Server de forma rápida e simples.

Nota: Ressalto que o procedimento apresentado aqui é um procedimento não documentado e sua execução é por sua conta e risco. O nosso colega Sérgio Monteiro (que foi quem postou esta solução no fórum do MSDN Brasil) disse já utilizar este procedimento a alguns anos e nunca teve problemas. No entanto, cada ambiente é um ambiente e não posso garantir que isto não lhe trará problemas futuros.
Para tranqüilizar, só posso dizer que este é o mesmo procedimento utilizado pelo utilitário rebuildm.exe quando usado para alterar o collate de uma instância SQL Server 2000 ou ainda o mesmo utilizado quando se faz o REBUILD de uma instância do SQL Server 2005/2008 utilizando o procedimento abaixo, conforme documentando do Books Online no tópico Setting and Changing the Server Collation.

Setup /QUIET /ACTION=REBUILDDATABASE /INSTANCENAME=InstanceName
/SQLSYSADMINACCOUNTS=accounts /[ SAPWD= StrongPassword ]
/SQLCOLLATION=CollationName

A grande diferença é que o utilitário rebuildm.exe ou o procedimento acima, além de alterar o collation da instância também faz um REBUILD dos bancos de sistema (master, msdb,model, tempdb), ou seja, tudo fica como se fosse uma instalação zerada.

O interessante deste procedimento aqui apresentado é que DIFERENTE do utilitário rebuildm.exe ou do procedimento documentado no BOL, ele NÃO zera as bases de sistemas alterando apenas o collation default da instância, o collation de todas as bases de dados (sistema e usuários), das tabelas e respectivas colunas que possuem tipo de dados do tipo caracter (char, varchar, etc). Com isso, ao final do processo de alteração do collation tudo estará absolutamente como antes, ou seja, com todos os seus bancos de dados e logins funcionando normalmente como antes.

Como Executar o Procedimento

1. O primeiro passo é obviamente executar um bakup de todas as bases, incluindo as de sistema master,msdb e model.

2. Certifique-se que você não possui nenhuma base de dados em readonly, restoring ou qualquer outro status que impeça sua alteração e garanta que as bases não estão sem espaço livre. Já tive erros neste procedimento porque algumas bases estavam sem espaço livre.

3. Pare o serviço do SQL Server. É possível usar vários métodos, um deles é parar os serviços usando o utilitário SQL Server Configuration Manager (sqlservermanager10.msc) como faço na figura abaixo.

4. Abra um prompt de comando e navegue até o diretório de instalação do SQL Server. Localize o arquivo sqlservr.exe e execute sqlservr -m -T4022 -T3659 -q"novo_collate".
Ex: c:\\Program Files\\Microsoft SQL Server\\MSSQL10.SQL2k8\\MSSQL\\Binn>sqlservr -sSQL2k8 -m T4022 -T3659 -q"Latin1_General_CI_AS"

Duas observações importantes: O -T deve ser maiúsculo e se a instalação o SQL Server estiver utilizando um nome de instância, a opção -s<nome_da_instância> deve ser adicionada.

5. Neste ponto o SQL Server será iniciado em single user mode e alterará o collate do servidor e todas as bases para o collate especificado na opção -q. Detalhe, lembre-se que este procedimento é NÃO Documentado, então não procure pelo parâmetro -q na lista de parâmtros do sqlservr.exe /? pois você não irá encontrá-lo :)

6. Ao terminar a ultima linha será:
Recovery is complete. This is an information a 1 message only. No User Action is required.

7. Ao final do processo tecle Ctrl+C e reinicie os serviços do SQL Server. Por exemplo utilizando o SQL Server Service Manager.

Se tiverem seguido os procedimentos de forma correta, neste momento a instância do SQL Server, todas as bases de dados e suas respectivas tabelas e colunas do tipo caracter estarão com o novo collation.

Compatibilidade

O procedimento foi testado com sucesso nas seguintes versões do SQL Server: SQL Server 2005 e SQL Server 2008.

Obs: Como eu destaquei no início este é um procedimento não documentado e embora eu tenha tido a oportunidade de usá-los em várias oportunidades com SQL200/2005/2008 e sem nenhum problema em todos eles, a utilização deste procedimento é por sua conta e risco.


Qualquer duvida Mail-me

Att

Addy Cunha
addy@seven.com.br


Colaborador..: Addy Magalhães Cunha
Categoria(s).: Banco de Dados; Microsoft SQL Server;
Versão.......: 1.0
Data.........: 06/06/2011 11:13:06
Visualizado..: 8480 vezes
Fonte........: www.mcdbabrasil.com.br

Imprimir | Fechar Janela