Arquivo

Archive for março \21\UTC 2013

Alterando o Collate Default do Servidor SQL Server

21 de março de 2013 Deixe um comentário
SQL

Na hora de instalar o MS SQL nem sempre instalamos com o Collate certo e posteriormente queremos mudar o mesmo, fiz isto algumas vezes e sempre recorro ao meu email para lembrar de como eu fiz. Acredito que mais pessoas tenham tido essa dor de cabeça, portanto segue um mini tuto para ajudar nesta tarefa.

Este procedimento vem funcionando desde o SQL 2005, ou seja funciona no SQL 2008 e 2012. Mas faça isso por sua conta em risco, o responsável pelo seu banco de dados é você mesmo que administra ele, não eu! Esse procedimento eu faço nos meus e funciona normal!

O que é Collation de uma Base de dados, como alterar?
Existem configurações para conjuntos de caracteres e Collations em quatro níveis: servidor, banco de dados, tabela e conexão. Collation nada mais é que a codificação de caracteres existente no Banco de Dados. Quando você realiza a migração do conteúdo de um banco de dados, algumas vezes, pode haver conflitos no collation do banco migrado. O resultado deste conflito é a ausência de caracteres especiais quando informações são consultadas no banco. Por exemplo: Você cadastrou a palavra “Chapéu” no seu banco de dados, mas quando a programação do seu site busca este item, retorna o resultado “Chap?u”. Ou seja, os caracteres com acentuação como (é, ã, õ, etc.) são substituídos pelo sinal ”?” (interrogação).
Resumindo, quando você emite um relatório e as informações não sãe como deveriam, muito provavelmente é conflito de collate.

a – Recomendo fortemente um backup das bases, include as system. Lembrem-se, só Deus salva, o resto faz backup.
b – 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.
c – Verifique o Collate default atual do servidor, com a query:

SELECT SERVERPROPERTY(‘servername’) As “Nome do Servidor”,
SERVERPROPERTY(‘productversion’) As Versão,
SERVERPROPERTY (‘productlevel’) As “Service Pack”,
SERVERPROPERTY (‘edition’) As Edição,
databasepropertyex(‘master’,’collation’) as “Collation”,
@@Version As “Sistema Operacional”

O resultado deverá ser algo como a imagem abaixo. Nota-se que o collate atual do meu servidor é SQL_Latin1_General_CP1_CI_AS

Query collate!

d – 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.

Stopando SQL Server

e – No prompt de comando vá até o diretório de instalação do SQL Server. Localize o arquivo sqlservr.exe e execute sqlservr -m -T4022 -T3659 -q”collate_que_deseja_utilizar”.
Observação importante: O -T tem que ser maiúsculo e caso a instalação o SQL Server estiver utilizando um nome de instância, a opção -s<nome_da_instância> deve ser adicionada.

Acessando diretório e comando alter Collate!

Comando: sqlservr.exe -m -T4022 -T3659 -q”SQL_Latin1_General_CP1_CI_AI

f – O comando fará com que o SQL Server seja iniciado em modo Single-User e irá alterar o collate do servidor e todas as bases para o collate especificado no opção -q.
g – O final do comando vai ser apresentado com a mensagem “Recovery is Complete.”. Quando isso aparecer você dá Ctrl+C para finalizar e deverá aparecer mais 4 mensagens do SQL e voltará a solicitar comando no prompt, acusando que o comando anterior foi executado e finalizado. Conforme tela abaixo.

Finalização do comando Alter Collate!

i – Pronto, agora reinicie o MSSQL Server e execute a query novamente para certificar-se que o collate foi alterado.

SELECT SERVERPROPERTY(‘servername’) As “Nome do Servidor”,
SERVERPROPERTY(‘productversion’) As Versão,
SERVERPROPERTY (‘productlevel’) As “Service Pack”,
SERVERPROPERTY (‘edition’) As Edição,
databasepropertyex(‘master’,’collation’) as “Collation”,
@@Version As “Sistema Operacional”

A query acima, deverá retornar algo como a imagem a baixo e assim alteramos o collate SQL_Latin1_General_Cp1_CI_AS para SQL_Latin1_General_Cp1_CS_AI.

Query Collate - Confirmando alteração do Collate!

Prontinho moçada!

Boa sorte ae! []’s

Anúncios