Database
 sql >> Base de Dados >  >> RDS >> Database

Compreendendo o agrupamento de nível de banco de dados e o impacto de alterá-lo para um banco de dados


Quando você desenvolve um aplicativo ou escreve um código no sistema de banco de dados SQL, é crucial entender como os dados serão classificados e comparados. Você pode armazenar seus dados em um idioma específico ou pode desejar que o SQL Server trate os dados com distinção entre maiúsculas e minúsculas separadamente. A Microsoft forneceu uma configuração do SQL Server chamada Collation para controlar e atender a tais requisitos.

O que é agrupamento no SQL Server?


Podemos definir o agrupamento em vários níveis no SQL Server, conforme indicado abaixo.
  • Nível do servidor
  • Nível do banco de dados
  • Nível da coluna
  • Nível de expressão

O agrupamento no nível do servidor às vezes pode ser chamado de Agrupamento no nível da instância do SQL Server .

A ordenação de nível de banco de dados será herdada da configuração de ordenação de nível de servidor se você não escolher nenhuma ordenação específica durante a criação do banco de dados. Você também pode alterar o agrupamento em nível de banco de dados posteriormente. Observe que a alteração do agrupamento do banco de dados será aplicada apenas para objetos novos ou futuros que serão criados após a alteração do agrupamento.

A nova ordenação não modificará os dados existentes armazenados em tabelas que foram classificadas com o último tipo de ordenação. A equipe de aplicativos precisa de mais planejamento para lidar com essa conversão de dados armazenados devido à nova configuração de agrupamento.

Há várias maneiras de fazer isso. Uma é copiar os dados da tabela existente para uma nova tabela criada com o novo agrupamento e, em seguida, substituir a tabela antiga pela nova. Você também pode mover os dados da tabela para um novo banco de dados com um novo agrupamento e substituir o banco de dados antigo pelo novo.

OBSERVAÇÃO :Alterar o agrupamento é uma tarefa complexa e você deve evitá-lo, a menos que tenha um caso de negócios obrigatório.

Como localizar e alterar o agrupamento de banco de dados no SQL Server?


Vamos em frente e verificar o agrupamento da instância do SQL Server e todos os bancos de dados hospedados nessa instância. Você pode verificar o agrupamento acessando o banco de dados ou as propriedades no nível da instância janela usando o SQL Server Management Studio ou simplesmente executando a instrução T-SQL abaixo. O Collation para cada banco de dados é armazenado no objeto do sistema sys.databases – vamos acessá-lo para obter essas informações.
--Check Database Collation
SELECT name, collation_name  
FROM sys.databases  
GO  
--Check Server or Instance level Collation
SELECT SERVERPROPERTY('Collation') As [Instance Level Collation]

Eu executei a instrução T-SQL acima e obtive a saída abaixo. Podemos ver que todos os bancos de dados e agrupamento em nível de servidor têm as mesmas configurações que SQL_Latin1_General_CP1_CI_AS . Isso significa que os agrupamentos de banco de dados foram herdados pelo agrupamento no nível do servidor ao criá-los e o valor padrão não foi alterado.

Agora, deixe-me mostrar como verificar o agrupamento do banco de dados usando a GUI no SQL Server Management Studio.

Primeiro, conecte-se à sua instância do SQL Server usando o SQL Server Management Studio. Expanda o nó da instância seguido pelos Bancos de dados pasta. Clique com o botão direito do mouse no banco de dados de destino e escolha Propriedades :

Você obterá as Propriedades do banco de dados abaixo janela.

Agora clique em Opções guia do painel do lado esquerdo. Você obterá várias configurações de propriedades no painel do lado direito. Agrupamento é a primeira propriedade desta página – você pode ver que é a mesma do script T-SQL acima.

Da mesma forma, você pode clicar no nó da instância do SQL Server e clicar com o botão direito do mouse nas propriedades no nível da instância para ver o agrupamento no nível do servidor.

Se você quiser alterar este agrupamento para um novo agrupamento, basta clicar no botão Agrupamento menu suspenso e escolha a opção que você precisa. Certifique-se de ter feito um backup completo do seu banco de dados antes de fazê-lo.

Eu escolhi um agrupamento semelhante com SQL_Latin1_General_CP1_CS que diferencia maiúsculas de minúsculas _AS para este banco de dados e clique em OK para aplicá-lo. Observação:certifique-se de que ninguém esteja conectado ao banco de dados de destino durante este procedimento, caso contrário, você precisará alternar o modo para um único usuário e altere esta configuração.

Você também pode alterar esse agrupamento de banco de dados usando a instrução T-SQL. Para isso, use o COLLATE cláusula da instrução ALTER DATABASE.

Primeiro, mudamos o banco de dados para usuário único mode, alterou o agrupamento e, finalmente, moveu o banco de dados para o multiusuário modo.
--Change Database Collation using T-SQL  
USE master;  
GO  
Alter DATABASE [AdventureWorks2019] SET SINGLE_USER WITH ROLLBACK IMMEDIATE
GO
ALTER DATABASE [AdventureWorks2019]  
COLLATE SQL_Latin1_General_CP1_CI_AS;  
GO
Alter DATABASE [AdventureWorks2019] SET MULTI_USER

Lista todos os agrupamentos com suporte no SQL Server


Esta seção mostrará como encontrar todos os agrupamentos disponíveis no SQL Server. Primeiro, deixe-me mostrar como obter a lista de todos os agrupamentos com suporte para a instância do SQL Server.

SQL Server tem uma função de sistema chamada fn_helpcollations() que você pode usar para buscar todos os agrupamentos.

Execute o comando abaixo para exibir a lista.
--Display the list of all collations  
SELECT name, description FROM fn_helpcollations()

Podemos ver todos os 5508 agrupamentos suportados na seção de saída. Se você não tiver certeza de qual ordenação escolher, poderá usar a cláusula WHERE no script abaixo para filtrar todas as ordenações possíveis que podem ser definidas para o banco de dados.

Digamos que você precise armazenar seus dados no idioma inglês dos EUA e deseja que o SQL Server os trate em um formato que diferencia maiúsculas de minúsculas. Você pode usar o comando abaixo para buscar a lista de agrupamentos possíveis e suportados para sua consulta:
--Display the list of all collations with WHERE clause 
SELECT Name, Description FROM fn_helpcollations()  
WHERE Name like 'SQL_Latin1%' AND Description LIKE '%case-sensitive%’

A saída mostra apenas 10 agrupamentos que satisfazem sua consulta. Você pode usar o script acima para filtrar vários agrupamentos.

Impacto da alteração do agrupamento do banco de dados na saída da consulta


Nesta seção, mostrarei a diferença entre as duas saídas da mesma consulta quando executadas com agrupamentos diferentes.

Primeiro, criarei um banco de dados chamado MSSQL com um agrupamento (SQL_Latin1_General_CP1_CS _AS ). Em seguida, executarei a mesma consulta duas vezes para obter a saída. Mais tarde, alterarei o agrupamento para SQL_Latin1_General_CP1_CI _AS e execute novamente as mesmas consultas para obter sua saída. Você pode comparar as duas saídas e entender o impacto de alterar um agrupamento de banco de dados. Então, vamos começar com a criação do banco de dados.

Inicie a nova janela de criação de banco de dados conforme mostrado na imagem abaixo. Você também pode criar esse banco de dados usando T-SQL. Depois disso, você pode ver o nome do banco de dados e seus arquivos de dados. Agora, clique na segunda guia no painel do lado esquerdo para alternar para a janela de propriedades de agrupamento.

Você pode ver que o nome do agrupamento para este banco de dados é o padrão . Isso significa que esse banco de dados herdará a ordenação do tipo de ordenação no nível do servidor. Clique no Agrupamento menu suspenso para escolher seu novo agrupamento.

Selecionei o agrupamento abaixo SQL_Latin1_General_CP1_CS _AS para este banco de dados – não o padrão. Clique em OK para prosseguir com a criação do banco de dados.

Agora, verifique o agrupamento de banco de dados para um banco de dados recém-criado. Podemos ver que é SQL_Latin1_General_CP1_CS _AS como selecionamos no passo anterior.

Em SQL_Latin1_General_CP1_CS _AS , CS significa diferencia maiúsculas de minúsculas modo e CI significa não diferencia maiúsculas de minúsculas modo. Agora você pode executar o código T-SQL abaixo ou qualquer código para obter a saída.

Eu executei o mesmo comando duas vezes. O primeiro script filtra os nomes das colunas com um valor SYS em capital letras, enquanto o segundo script filtrará a mesma coluna com o mesmo valor sys em pequeno letras. A seção de saída demonstra que o primeiro script não mostrou nenhuma saída, enquanto o segundo script exibiu a saída devido ao seu comportamento com distinção entre maiúsculas e minúsculas.
Select * from sysusers
Where name=’SYS’
Go
Select * from sysusers
Where name=’sys’
GO

Agora, vamos alterar a ordenação deste banco de dados para a alceação sem distinção entre maiúsculas e minúsculas SQL_Latin1_General_CP1_CI _AS executando as instruções T-SQL abaixo. Você também pode alterá-lo via GUI acessando a janela Propriedades do Banco de Dados no SQL Server Management Studio.
--Change database collation to SQL_Latin1_General_CP1_CI_AS
USE master;  
GO  
Alter DATABASE [MSSQL] SET SINGLE_USER WITH ROLLBACK IMMEDIATE
GO
ALTER DATABASE [MSSQL]  
COLLATE SQL_Latin1_General_CP1_CI_AS;  
GO
Alter DATABASE [MSSQL] SET MULTI_USER

Executei o script acima de uma só vez, e o agrupamento do banco de dados foi alterado com sucesso para um novo agrupamento com suporte que não diferencia maiúsculas de minúsculas.

Você pode verificar essa alteração executando os scripts abaixo para verificar o agrupamento do banco de dados recém-criado MSSQL. Podemos ver que o novo agrupamento está definido para este banco de dados na imagem abaixo.

Executaremos novamente a mesma instrução T-SQL antes de alterar o agrupamento para ver o impacto dessa alteração. Como podemos ver agora, ambas as instruções T-SQL estão na saída.

Conclusão


Espero que seja evidente que o agrupamento no SQL Server é crucial. Definimos o impacto que isso causa se você fizer alterações no agrupamento em qualquer nível no SQL Server. Sempre faça o planejamento adequado e teste primeiro as modificações em seu ambiente de ciclo de vida inferior.

Fique atento ao meu próximo artigo, onde mostrarei um método passo a passo para alterar o agrupamento no nível do servidor.

Por favor, compartilhe este artigo e dê seu feedback, isso nos ajuda a melhorar.