I min tidigare artikel har jag förklarat grunderna i SQL Server Collation. Jag skulle föreslå att du först läser den artikeln (om du inte redan har gjort det). Här kommer jag att visa dig hur du ändrar sorteringen på servernivå eller SQL Server-instansnivåsorteringen för en befintlig SQL Server-instans.
Vad är Server Level Collation i SQL Server?
Sortering bestämmer sorteringsregler, skiftläge och accentegenskaper för data. Det är en viktig inställning som kan påverka dina data i databasen, så det rekommenderas inte att ändras ofta.
Sortering kan konfigureras i 4 lager i SQL Server:
- Servernivå
- Databasnivå
- Kolumnnivå
- Uttrycksnivå
Obs! Om du använder SQL Server Express edition kan du inte ändra sorteringen från SQL_Latin1_General_CP1_CI_AS .
Ändra servernivåsortering av befintlig SQL Server-instans
Det här avsnittet kommer att beskriva förutsättningarna och processen för att ändra sorteringen på servernivå. Det kommer att ändras genom att bygga om systemdatabaser med ett nytt sorteringsnamn.
Förutsättningar
Följ punkterna nedan för att utföra sorteringsändringen för en produktionsinstans.
- Kör en fullständig säkerhetskopia av alla databaser. Om möjligt, ta en VM-ögonblicksbild innan du påbörjar denna procedur.
- Se till att du har alla skript för att skapa användardatabaser eller databasobjekt som tabeller, inloggningar, användare, jobb, etc. Vi kommer att skapa alla databasobjekt efter sorteringsändringen.
- Exportera all data med bcp eller något tredjepartsverktyg.
- Spela in konfigurationsvärden på servernivå och SQL Server-instansens buildnummer inklusive snabbkorrigeringar som tillämpas på instansen.
- Spela in alla platser för systemdatabasfiler. Detta kan behövas om du har flyttat dina systemdatabasfiler till en annan plats.
Låt oss ta en titt på några skript som hjälper dig att fånga systemdetaljerna. Kopiera dessa utdata till ett anteckningsblock eller en Excel-fil, eller ta helt enkelt en skärmdump och spara den för framtida referens.
Kör kommandot nedan för att få alla konfigurationer på servernivå.
--Get all server level configurations
SELECT * FROM sys.configurations;
Fånga SQL Server-versionen genom att köra frågan nedan.
--Fetch SQL Server build version
SELECT @@VERSION
GO
SELECT
SERVERPROPERTY('ProductVersion ') AS ProductVersion,
SERVERPROPERTY('ProductLevel') AS ProductLevel,
SERVERPROPERTY('ResourceVersion') AS ResourceVersion,
På samma sätt bör vi få systemdatabasfilernas plats genom att köra nedanstående T-SQL-satser.
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'));
Därefter kommer vi att köra nedanstående T-SQL-skript för att samla sammanställningsinformation för SQL Server-instanser och alla databaser i en enda gång.
--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]
Läs min tidigare artikel för mer information om detta manus.
Skapa nu Skapa skript för alla inloggningar och jobb som skapats på SQL Server-instansen för framtida referens och validering. Du kan också köra skriptet nedan för att hämta listan över alla inloggningar och jobb från SQL Server-instansen.
--Get list of logins
Use master
Go
Select * from syslogins
--Get list of Jobs
USE msdb
Go
Select * from sysjobs
Återuppbyggnad av instans
När du har slutfört stegen som nämns i förutsättningsavsnittet är nästa steg att starta processen för sorteringsändringen. Eftersom vi har tagit säkerhetskopior eller exporterat all data från användardatabaser måste vi koppla bort alla användardatabaser från SQL Server-instansen. Du kan också släppa dem om du vill importera exporterade data till den nya databasen. Jag skulle föreslå att du kopplar bort dem för att behålla en säker kopia av dina databaser så att du kan bifoga dem efter sorteringsändringen.
Processen att ändra en sortering på servernivå kräver att systemets databas återuppbyggs. Vi måste skicka ett nytt sorteringsnamn när vi bygger om systemdatabaser. Återuppbyggnad av systemdatabasdrift kräver installation av SQL Server. Låt oss starta ombyggnaden av systemets databas för att ändra sorteringen på servernivå.
Logga in på ditt målsystem som du kommer att ändra sortering för. Öppna Windows kommandotolk eller ett PowerShell-terminalfönster. Öppna PowerShell och skriv sedan cmd för att använda ett Windows kommandotolksverktyg som visas i bilden nedan. Ändra din katalogplats där du har placerat installationsfilerna för 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
Nu är jag på platsen där installationsfilerna för SQL Server sparas.
Därefter kör vi kommandot nedan för att bygga om alla systemdatabaser. Dessutom måste vi köra kommandot nedan med en ny sorteringsparameter för att ändra den för denna SQL Server-instans och alla systemdatabaser.
--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
Du kan se dess utdata i skärmdumpen nedan. Du bör lämna skärmen som den är och låta skärmen fortsätta tills du får arbetskatalogen.
Här har vi uppmaningen. Det betyder att systemdatabasen har byggts om med en ny sortering för denna SQL Server-instans. Låt oss verifiera det.
Se till att SQL Server körs och att dess tjänster är lanserade. Starta nu SQL Server Management Studio eller sqlcmd för att ansluta till SQL Server-instansen. Du kan se, jag har framgångsrikt anslutit till SQL Server-instansen som byggdes om i stegen ovan. Vi kan bara se systemdatabaser i bilden nedan.
Kör nedanstående T-SQL-satser för att samla in sorteringsdetaljerna på databasnivå och servernivå. Detta steg kommer att validera ändringen av server- och systemdatabaser.
--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]
Sortering på servernivå och databasnivå för alla systemdatabaser använder SQL_Latin1_General_CP1_CS_AS i skärmdumpen nedan. Det här steget validerar att en ny sortering har konfigurerats på den här SQL Server-instansen.
Sorteringen på servernivå har ändrats till den nya sorteringen. Nästa steg är att bifoga alla användardatabaser som togs bort innan systemdatabaserna återuppbyggdes. Kom ihåg att alla befintliga databaser som ska bifogas eller återställas kommer att ha samma sortering som de säkerhetskopierades eller kopplades bort under. Du måste ändra det manuellt efter sorteringsändringen på servernivå. Även om alla nyskapade databaser har en ny sortering som standard.
Jag har bifogat mina användardatabaser som visas i bilden nedan.
När databaserna är bifogade kan du kontrollera sammanställningen av dessa databaser igen. Om du vill ändra sammanställningen av dessa databaser kan du läsa min tidigare artikel för att få detta gjort.
Slutsats
Om du har exporterat data från databaserna kan du köra alla skript som genererades under förutsättningen för att skapa databasobjekten. Sedan kan du importera den exporterade datan i dessa nyskapade databaser och objekt. Du kan validera och ändra konfigurationer på servernivå enligt informationen vi hämtade i avsnittet förutsättningar.
Du kan också flytta systemdatabasfiler om du vill behålla dem på en specifik plats eftersom en ombyggnad av systemets databas kommer att skapa dem på en standardplats. Det är också möjligt att exekvera skripten för att skapa inloggningar och jobb med hjälp av skript som genererats tidigare. Återställ inte systemdatabaser eftersom det kommer att ändra den nyligen konfigurerade sorteringen till den äldre för den databasen.
Dela den här artikeln och ge oss din feedback så att vi kan förbättra oss.