Em meu artigo anterior, expliquei os conceitos básicos do SQL Server Collation. Eu sugiro que você leia primeiro esse artigo (se ainda não o fez). Aqui, mostrarei como alterar o agrupamento em nível de servidor ou o agrupamento em nível de instância do SQL Server de uma instância existente do SQL Server.
O que é o agrupamento de nível de servidor no SQL Server?
O agrupamento determina regras de classificação, maiúsculas e minúsculas e propriedades de acento para dados. É uma configuração importante que pode afetar seus dados dentro do banco de dados, portanto, não é recomendável alterá-la com frequência.
O agrupamento pode ser configurado em 4 camadas no SQL Server:
- Nível do servidor
- Nível do banco de dados
- Nível da coluna
- Nível de expressão
Observação: Se você estiver usando a edição expressa do SQL Server, não poderá alterar o agrupamento de SQL_Latin1_General_CP1_CI_AS .
Alterar agrupamento no nível do servidor da instância existente do SQL Server
Esta seção descreverá os pré-requisitos e o processo para alterar a ordenação no nível do servidor. Ele será alterado pela reconstrução dos bancos de dados do sistema com um novo nome de agrupamento.
Pré-requisitos
Siga os pontos abaixo para executar a alteração de agrupamento para uma instância de produção.
- Execute um backup completo de todos os bancos de dados. Se possível, tire um instantâneo da VM antes de iniciar este procedimento.
- Certifique-se de ter todos os scripts para criar bancos de dados de usuários ou objetos de banco de dados, como tabelas, logins, usuários, trabalhos, etc. Criaremos todos os objetos de banco de dados após a alteração do agrupamento.
- Exportar todos os dados usando bcp ou qualquer ferramenta de terceiros.
- Registre os valores de configuração no nível do servidor e o número de compilação da instância do SQL Server, incluindo os hotfixes aplicados à instância.
- Registre todos os locais dos arquivos de banco de dados do sistema. Isso pode ser necessário se você moveu os arquivos do banco de dados do sistema para outro local.
Vamos dar uma olhada em alguns scripts que ajudarão você a capturar os detalhes do sistema. Copie essas saídas para um bloco de notas ou um arquivo do Excel, ou simplesmente faça uma captura de tela e salve-a para referência futura.
Execute o comando abaixo para obter todas as configurações no nível do servidor.
--Get all server level configurations
SELECT * FROM sys.configurations;
Capture a versão de compilação do SQL Server executando a consulta abaixo.
--Fetch SQL Server build version
SELECT @@VERSION
GO
SELECT
SERVERPROPERTY('ProductVersion ') AS ProductVersion,
SERVERPROPERTY('ProductLevel') AS ProductLevel,
SERVERPROPERTY('ResourceVersion') AS ResourceVersion,
Da mesma forma, devemos obter a localização dos arquivos do banco de dados do sistema executando as instruções T-SQL abaixo.
SELECT name, physical_name AS Database_file_location
FROM sys.master_files
WHERE database_id IN (DB_ID('master'), DB_ID('model'), DB_ID('msdb'), DB_ID('tempdb'));
Em seguida, executaremos os scripts T-SQL abaixo para coletar informações de agrupamento da instância do SQL Server e de todos os bancos de dados de uma só vez.
--Get existing collation of SQL Server Instance and all databases
SELECT name, collation_name
FROM sys.databases
GO
--Get existing server level collation
SELECT SERVERPROPERTY('Collation') As [Instance Level Collation]
Leia meu artigo anterior para obter mais informações sobre este script.
Agora, gere Crie scripts para todos os logons e trabalhos criados na instância do SQL Server para referência e validação futuras. Além disso, você pode executar o script abaixo para buscar a lista de todos os logons e trabalhos da instância do SQL Server.
--Get list of logins
Use master
Go
Select * from syslogins
--Get list of Jobs
USE msdb
Go
Select * from sysjobs
Reconstrução de instância
Depois de concluir as etapas mencionadas na seção de pré-requisitos, a próxima etapa é iniciar o processo de alteração do agrupamento. Como fizemos backups ou exportamos todos os dados dos bancos de dados do usuário, precisamos desanexar todos os bancos de dados do usuário da instância do SQL Server. Você também pode soltá-los se quiser importar os dados exportados para o novo banco de dados. Sugiro desanexá-los para manter uma cópia segura de seus bancos de dados para que você possa anexá-los após a alteração do agrupamento.
O processo de alteração de um agrupamento em nível de servidor requer a reconstrução do banco de dados do sistema. Precisamos passar um novo nome de agrupamento ao reconstruir os bancos de dados do sistema. A operação de reconstrução do banco de dados do sistema requer a configuração de instalação do SQL Server. Vamos iniciar a operação de reconstrução do banco de dados do sistema para alterar o agrupamento no nível do servidor.
Faça login no sistema de destino para o qual você alterará o agrupamento. Abra o prompt de comando do Windows ou uma janela de terminal do PowerShell. Abra o PowerShell e digite cmd para usar um utilitário de prompt de comando do Windows, conforme mostrado na imagem abaixo. Altere o local do diretório onde você colocou os arquivos de configuração de instalação do SQL Server.
--Open Windows Command prompt
Cmd
--Change directory where you have placed SQL Server setup files
Cd <Full path>
--My location was C:\Manvendra\SQL2019\Developer_ENU so i executed below cmd
cd C:\Manvendra\SQL2019\Developer_ENU
Agora estou no local onde os arquivos de instalação do SQL Server são salvos.
Em seguida, executaremos o comando abaixo para reconstruir todos os bancos de dados do sistema. Além disso, devemos executar o comando abaixo com um novo parâmetro de agrupamento para alterá-lo para esta instância do SQL Server e todos os bancos de dados do sistema.
--Rebuild system databases with new collation. Replace all values in <> with your desired value.
Setup /QUIET /ACTION=REBUILDDATABASE /INSTANCENAME=<InstanceName>
/SQLSYSADMINACCOUNTS=<accounts> / SAPWD= <StrongPassword>
/SQLCOLLATION=<CollationName>
--I replaced all values and executed the below command with collation SQL_Latin1_General_CP1_CS_AS
Setup /QUIET /ACTION=REBUILDDATABASE /INSTANCENAME=MSSQLSERVER /SQLSYSADMINACCOUNTS=WIN-AFNHJ3L1D6E\Administrator /[email protected] /SQLCOLLATION=SQL_Latin1_General_CP1_CS_AS
Você pode ver sua saída na captura de tela abaixo. Você deve deixar a tela como está e deixar a tela prosseguir até obter o diretório de trabalho.
Aqui, temos o prompt. Isso significa que o banco de dados do sistema foi reconstruído com um novo agrupamento para esta instância do SQL Server. Vamos comprová-lo.
Certifique-se de que o SQL Server esteja em execução e seus serviços sejam iniciados. Agora inicie o SQL Server Management Studio ou sqlcmd para se conectar à instância do SQL Server. Você pode ver, eu me conectei com sucesso à instância do SQL Server que foi reconstruída nas etapas acima. Podemos ver apenas os bancos de dados do sistema na imagem abaixo.
Execute as instruções T-SQL abaixo para reunir os detalhes de agrupamento no nível do banco de dados e no nível do servidor. Esta etapa validará a alteração do agrupamento dos bancos de dados do servidor e do sistema.
--Get collation of the SQL Server Instance and all databases
SELECT name, collation_name
FROM sys.databases
GO
--Get an existing server-level collation
SELECT SERVERPROPERTY('Collation') As [Instance Level Collation]
O agrupamento no nível do servidor e do banco de dados para todos os bancos de dados do sistema usa SQL_Latin1_General_CP1_CS_AS na captura de tela abaixo. Esta etapa valida que um novo agrupamento foi configurado nesta instância do SQL Server.
A ordenação no nível do servidor foi alterada para a nova ordenação. A próxima etapa é anexar todos os bancos de dados do usuário que foram desanexados antes de reconstruir os bancos de dados do sistema. Lembre-se de que todos os bancos de dados existentes que devem ser anexados ou restaurados terão o mesmo agrupamento sob o qual foram submetidos a backup ou desanexados. Você precisa alterá-lo manualmente após a alteração do agrupamento no nível do servidor. Embora todos os bancos de dados recém-criados tenham um novo agrupamento por padrão.
Eu anexei meus bancos de dados de usuários conforme mostrado na imagem abaixo.
Depois que os bancos de dados estiverem anexados, você poderá verificar novamente o agrupamento desses bancos de dados. Se você deseja alterar o agrupamento desses bancos de dados, pode ler meu artigo anterior para fazer isso.
Conclusão
Se você exportou dados dos bancos de dados, poderá executar todos os scripts que foram gerados durante o pré-requisito para criar os objetos de banco de dados. Em seguida, você pode importar os dados exportados nesses bancos de dados e objetos recém-criados. Você pode validar e modificar as configurações no nível do servidor de acordo com os detalhes que buscamos na seção de pré-requisitos.
Você também pode mover arquivos de banco de dados do sistema se quiser mantê-los em um local específico, pois uma reconstrução do banco de dados do sistema os criará em um local padrão. Também é possível executar os scripts para criar logins e jobs com a ajuda de scripts gerados anteriormente. Não restaure os bancos de dados do sistema, pois isso alterará o agrupamento recém-configurado para o antigo para esse banco de dados.
Por favor, compartilhe este artigo e nos dê seu feedback, para que possamos melhorar.