In mijn vorige artikel heb ik de basis van SQL Server Collation uitgelegd. Ik raad je aan eerst dat artikel te lezen (als je dat nog niet hebt gedaan). Hier laat ik u zien hoe u de sortering op serverniveau of de sortering op SQL Server-instantieniveau van een bestaande SQL Server-instantie kunt wijzigen.
Wat is sorteren op serverniveau in SQL Server?
Sorteren bepaalt sorteerregels, hoofdletters en accenteigenschappen voor gegevens. Het is een belangrijke instelling die van invloed kan zijn op uw gegevens in de database, dus het wordt niet aanbevolen om deze vaak te wijzigen.
Sortering kan worden geconfigureerd op 4 lagen in SQL Server:
- Serverniveau
- Databaseniveau
- Kolomniveau
- Uitdrukkingsniveau
Opmerking: Als u SQL Server Express Edition gebruikt, kunt u de sortering van SQL_Latin1_General_CP1_CI_AS niet wijzigen .
Sorteren op serverniveau van bestaande SQL Server-instantie wijzigen
In dit gedeelte worden de vereisten en het proces beschreven om de sortering op serverniveau te wijzigen. Het zal worden gewijzigd door systeemdatabases opnieuw op te bouwen met een nieuwe sorteernaam.
Vereisten
Volg de onderstaande punten om de sorteerwijziging voor een productie-instantie uit te voeren.
- Voer een volledige back-up uit van alle databases. Maak indien mogelijk een VM-snapshot voordat u deze procedure start.
- Zorg ervoor dat u over alle scripts beschikt om gebruikersdatabases of database-objecten zoals tabellen, logins, gebruikers, jobs, enz. aan te maken. We zullen alle database-objecten na de sortering wijzigen.
- Exporteer alle gegevens met bcp of een tool van derden.
- Registreer de configuratiewaarden op serverniveau en het buildnummer van de SQL Server-instantie, inclusief hotfixes die op de instantie zijn toegepast.
- Noteer de locaties van alle systeemdatabasebestanden. Dit kan nodig zijn als u uw systeemdatabasebestanden naar een andere locatie hebt verplaatst.
Laten we een paar scripts bekijken die u zullen helpen om de systeemdetails vast te leggen. Kopieer deze uitvoer naar een notitieblok of een Excel-bestand, of maak gewoon een screenshot en bewaar deze voor toekomstig gebruik.
Voer de onderstaande opdracht uit om alle configuraties op serverniveau te krijgen.
--Get all server level configurations
SELECT * FROM sys.configurations;
Leg de SQL Server-buildversie vast door de onderstaande query uit te voeren.
--Fetch SQL Server build version
SELECT @@VERSION
GO
SELECT
SERVERPROPERTY('ProductVersion ') AS ProductVersion,
SERVERPROPERTY('ProductLevel') AS ProductLevel,
SERVERPROPERTY('ResourceVersion') AS ResourceVersion,
Op dezelfde manier zouden we de locatie van de systeemdatabasebestanden moeten krijgen door de onderstaande T-SQL-instructies uit te voeren.
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'));
Vervolgens zullen we de onderstaande T-SQL-scripts uitvoeren om in één keer sorteerinformatie van de SQL Server-instantie en alle databases te verzamelen.
--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]
Lees mijn vorige artikel voor meer informatie over dit script.
Genereer nu Scripts maken voor alle aanmeldingen en taken die op het SQL Server-exemplaar zijn gemaakt voor toekomstig gebruik en validatie. U kunt ook het onderstaande script uitvoeren om de lijst met alle aanmeldingen en taken van de SQL Server-instantie op te halen.
--Get list of logins
Use master
Go
Select * from syslogins
--Get list of Jobs
USE msdb
Go
Select * from sysjobs
Exemplaar opnieuw opbouwen
Nadat u de stappen hebt voltooid die worden vermeld in het gedeelte met vereisten, is de volgende stap het starten van het proces voor het wijzigen van de sortering. Omdat we back-ups hebben gemaakt of alle gegevens uit gebruikersdatabases hebben geëxporteerd, moeten we alle gebruikersdatabases loskoppelen van de SQL Server-instantie. U kunt ze ook laten vallen als u de geëxporteerde gegevens in de nieuwe database wilt importeren. Ik raad u aan ze los te koppelen om één veilige kopie van uw databases te bewaren, zodat u ze na de sortering kunt toevoegen.
Het proces van het wijzigen van een sortering op serverniveau vereist het opnieuw opbouwen van de systeemdatabase. We moeten een nieuwe sorteernaam doorgeven tijdens het opnieuw opbouwen van systeemdatabases. Het opnieuw opbouwen van de systeemdatabase vereist een installatie van SQL Server. Laten we beginnen met het opnieuw opbouwen van de systeemdatabase om de sortering op serverniveau te wijzigen.
Log in op uw doelsysteem waarvoor u de sortering gaat wijzigen. Open de Windows-opdrachtprompt of een PowerShell-terminalvenster. Open PowerShell en typ cmd om een Windows-hulpprogramma voor de opdrachtprompt te gebruiken, zoals weergegeven in de onderstaande afbeelding. Wijzig uw directorylocatie waar u de installatiebestanden van uw SQL Server-installatie hebt geplaatst.
--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 ben ik op de locatie waar de SQL Server-installatiebestanden zijn opgeslagen.
Vervolgens zullen we de onderstaande opdracht uitvoeren om alle systeemdatabases opnieuw op te bouwen. Bovendien moeten we de onderstaande opdracht uitvoeren met een nieuwe sorteerparameter om deze voor deze SQL Server-instantie en alle systeemdatabases te wijzigen.
--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
U kunt de uitvoer ervan zien in de onderstaande schermafbeelding. U dient het scherm te laten zoals het is en het scherm verder te laten gaan totdat u de werkmap krijgt.
Hier hebben we de prompt. Dit betekent dat de systeemdatabase opnieuw is opgebouwd met een nieuwe sortering voor deze SQL Server-instantie. Laten we het verifiëren.
Zorg ervoor dat SQL Server actief is en dat de services zijn gestart. Start nu SQL Server Management Studio of sqlcmd om verbinding te maken met de SQL Server-instantie. U kunt zien dat ik met succes verbinding heb gemaakt met de SQL Server-instantie die in de bovenstaande stappen opnieuw is opgebouwd. We kunnen alleen systeemdatabases zien in de onderstaande afbeelding.
Voer de onderstaande T-SQL-instructies uit om de sorteergegevens op database- en serverniveau te verzamelen. Deze stap valideert de wijziging van de server- en systeemdatabase-sortering.
--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 op server- en databaseniveau voor alle systeemdatabases maakt gebruik van SQL_Latin1_General_CP1_CS_AS in de onderstaande schermafbeelding. Deze stap valideert dat er een nieuwe sortering is geconfigureerd op deze SQL Server-instantie.
De sortering op serverniveau is gewijzigd in de nieuwe sortering. De volgende stap is het koppelen van alle gebruikersdatabases die zijn losgekoppeld voordat de systeemdatabases opnieuw werden opgebouwd. Onthoud dat alle bestaande databases die moeten worden toegevoegd of hersteld, dezelfde sortering zullen hebben waaronder ze werden geback-upt of verwijderd. U moet deze handmatig wijzigen nadat de sortering op serverniveau is gewijzigd. Hoewel alle nieuw gemaakte databases standaard een nieuwe sortering hebben.
Ik heb mijn gebruikersdatabases bijgevoegd zoals weergegeven in de onderstaande afbeelding.
Zodra de databases zijn gekoppeld, kunt u de sortering van deze databases opnieuw controleren. Als je de sortering van deze databases wilt wijzigen, kun je mijn vorige artikel lezen om dit voor elkaar te krijgen.
Conclusie
Als u gegevens uit de databases hebt geëxporteerd, kunt u alle scripts uitvoeren die zijn gegenereerd tijdens de vereiste om de database-objecten te maken. Vervolgens kunt u de geëxporteerde gegevens importeren in deze nieuw aangemaakte databases en objecten. U kunt configuraties op serverniveau valideren en wijzigen volgens de details die we hebben opgehaald in het gedeelte met vereisten.
U kunt systeemdatabasebestanden ook verplaatsen als u ze op een specifieke locatie wilt bewaren, omdat ze bij het opnieuw opbouwen van de systeemdatabase op een standaardlocatie worden gemaakt. Het is ook mogelijk om de scripts uit te voeren om logins en jobs te creëren met behulp van eerder gegenereerde scripts. Herstel geen systeemdatabases, omdat hierdoor de nieuw geconfigureerde sortering wordt gewijzigd in de oudere voor die database.
Deel dit artikel en geef ons uw feedback, zodat we kunnen verbeteren.