Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

So ändern Sie die Sortierung auf Serverebene einer ausgeführten SQL Server-Instanz

In meinem vorherigen Artikel habe ich die Grundlagen von SQL Server Collation erklärt. Ich würde vorschlagen, dass Sie zuerst diesen Artikel lesen (falls Sie es noch nicht getan haben). Hier zeige ich Ihnen, wie Sie die Sortierung auf Serverebene oder die Sortierung auf SQL Server-Instanzebene einer vorhandenen SQL Server-Instanz ändern.

Was ist die Sortierung auf Serverebene in SQL Server?

Sortierung bestimmt Sortierregeln, Groß- und Kleinschreibung und Akzenteigenschaften für Daten. Dies ist eine wichtige Einstellung, die sich auf Ihre Daten in der Datenbank auswirken kann, daher wird empfohlen, sie nicht häufig zu ändern.

Die Sortierung kann in SQL Server auf 4 Ebenen konfiguriert werden:

  • Serverebene
  • Datenbankebene
  • Spaltenebene
  • Ausdrucksebene

Hinweis: Wenn Sie die SQL Server Express Edition verwenden, können Sie die Sortierung von SQL_Latin1_General_CP1_CI_AS nicht ändern .

Sortierung auf Serverebene einer vorhandenen SQL Server-Instanz ändern

In diesem Abschnitt werden die Voraussetzungen und der Prozess zum Ändern der Sortierung auf Serverebene beschrieben. Er wird geändert, indem Systemdatenbanken mit einem neuen Sortierungsnamen neu erstellt werden.

Voraussetzungen

Befolgen Sie die nachstehenden Punkte, um die Sortierungsänderung für eine Produktionsinstanz auszuführen.

  1. Führen Sie eine vollständige Sicherung aller Datenbanken durch. Erstellen Sie nach Möglichkeit einen VM-Snapshot, bevor Sie mit diesem Verfahren beginnen.
  2. Stellen Sie sicher, dass Sie alle Skripte haben, um Benutzerdatenbanken oder Datenbankobjekte wie Tabellen, Anmeldungen, Benutzer, Jobs usw. zu erstellen. Wir werden alle Datenbankobjekte nach der Sortierungsänderung erstellen.
  3. Exportieren Sie alle Daten mit bcp oder ein Tool von Drittanbietern.
  4. Erfassen Sie Konfigurationswerte auf Serverebene und die Build-Nummer der SQL Server-Instanz, einschließlich Hotfixes, die auf die Instanz angewendet wurden.
  5. Notieren Sie alle Speicherorte der Systemdatenbankdateien. Dies kann erforderlich sein, wenn Sie Ihre Systemdatenbankdateien an einen anderen Speicherort verschoben haben.

Werfen wir einen Blick auf einige Skripte, die Ihnen helfen, die Systemdetails zu erfassen. Kopieren Sie diese Ausgaben in einen Notizblock oder eine Excel-Datei oder machen Sie einfach einen Screenshot und speichern Sie ihn zum späteren Nachschlagen.

Führen Sie den folgenden Befehl aus, um alle Konfigurationen auf Serverebene abzurufen.

--Get all server level configurations
SELECT * FROM sys.configurations;

Erfassen Sie die Build-Version von SQL Server, indem Sie die folgende Abfrage ausführen.

--Fetch SQL Server build version
SELECT @@VERSION
GO

SELECT  
SERVERPROPERTY('ProductVersion ') AS ProductVersion,  
SERVERPROPERTY('ProductLevel') AS ProductLevel,  
SERVERPROPERTY('ResourceVersion') AS ResourceVersion,  

Ebenso sollten wir den Speicherort der Systemdatenbankdateien abrufen, indem wir die folgenden T-SQL-Anweisungen ausführen.

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'));

Als Nächstes führen wir die folgenden T-SQL-Skripts aus, um Sortierungsinformationen der SQL Server-Instanz und aller Datenbanken auf einmal zu sammeln.

--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]

Lesen Sie meinen vorherigen Artikel für weitere Informationen über dieses Skript.

Generieren Sie jetzt Skripte erstellen für alle Anmeldungen und Jobs, die auf der SQL Server-Instanz erstellt wurden, für zukünftige Referenzen und Validierungen. Außerdem können Sie das folgende Skript ausführen, um die Liste aller Anmeldungen und Jobs von der SQL Server-Instanz abzurufen.

--Get list of logins
Use master
Go
Select * from syslogins

--Get list of Jobs
USE msdb
Go
Select * from sysjobs

Neuaufbau der Instanz

Nachdem Sie die im Abschnitt „Voraussetzungen“ genannten Schritte abgeschlossen haben, besteht der nächste Schritt darin, den Prozess für die Sortierungsänderung zu starten. Da wir alle Daten aus Benutzerdatenbanken gesichert oder exportiert haben, müssen wir alle Benutzerdatenbanken von der SQL Server-Instanz trennen. Sie können sie auch löschen, wenn Sie die exportierten Daten in die neue Datenbank importieren möchten. Ich würde vorschlagen, sie zu trennen, um eine sichere Kopie Ihrer Datenbanken zu behalten, damit Sie sie nach der Sortierungsänderung anhängen können.

Der Vorgang zum Ändern einer Sortierung auf Serverebene erfordert die Neuerstellung der Systemdatenbank. Beim Neuaufbau der Systemdatenbanken müssen wir einen neuen Sortierungsnamen übergeben. Die Neuerstellung des Systemdatenbankbetriebs erfordert die Einrichtung der SQL Server-Installation. Beginnen wir mit dem Neuaufbau der Systemdatenbank, um die Sortierung auf Serverebene zu ändern.

Melden Sie sich bei Ihrem Zielsystem an, für das Sie die Sortierung ändern werden. Öffnen Sie die Windows-Eingabeaufforderung oder ein PowerShell-Terminalfenster. Öffnen Sie PowerShell und geben Sie dann cmd ein um ein Windows-Eingabeaufforderungsprogramm zu verwenden, wie im folgenden Bild gezeigt. Ändern Sie den Speicherort Ihres Verzeichnisses, in dem Sie Ihre Setup-Dateien für die SQL Server-Installation abgelegt haben.

--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

Jetzt befinde ich mich an dem Ort, an dem die SQL Server-Installationsdateien gespeichert sind.

Als nächstes führen wir den folgenden Befehl aus, um alle Systemdatenbanken neu zu erstellen. Außerdem müssen wir den folgenden Befehl mit einem neuen Kollatierungsparameter ausführen, um ihn für diese SQL Server-Instanz und alle Systemdatenbanken zu ändern.

--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

Sie können die Ausgabe im folgenden Screenshot sehen. Sie sollten den Bildschirm so lassen, wie er ist, und den Bildschirm weiterlaufen lassen, bis Sie das Arbeitsverzeichnis erhalten.

Hier haben wir die Eingabeaufforderung. Dies bedeutet, dass die Systemdatenbank mit einer neuen Sortierung für diese SQL Server-Instanz neu erstellt wurde. Lass es uns überprüfen.

Stellen Sie sicher, dass SQL Server ausgeführt wird und seine Dienste gestartet sind. Starten Sie nun SQL Server Management Studio oder sqlcmd um eine Verbindung mit der SQL Server-Instanz herzustellen. Wie Sie sehen, habe ich erfolgreich eine Verbindung mit der SQL Server-Instanz hergestellt, die in den obigen Schritten neu erstellt wurde. Im Bild unten sehen wir nur Systemdatenbanken.

Führen Sie die folgenden T-SQL-Anweisungen aus, um die Sortierungsdetails auf Datenbank- und Serverebene zu erfassen. Dieser Schritt validiert die Änderung der Sortierung der Server- und Systemdatenbanken.

--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]

Die Sortierung auf Server- und Datenbankebene für alle Systemdatenbanken verwendet SQL_Latin1_General_CP1_CS_AS im folgenden Screenshot. Dieser Schritt bestätigt, dass auf dieser SQL Server-Instanz eine neue Sortierung konfiguriert wurde.

Die Sortierung auf Serverebene wurde in die neue Sortierung geändert. Der nächste Schritt besteht darin, alle getrennten Benutzerdatenbanken anzuhängen, bevor die Systemdatenbanken neu erstellt werden. Denken Sie daran, dass alle vorhandenen Datenbanken, die angehängt oder wiederhergestellt werden sollen, dieselbe Sortierung haben, unter der sie gesichert oder getrennt wurden. Sie müssen es nach der Sortierungsänderung auf Serverebene manuell ändern. Alle neu erstellten Datenbanken haben jedoch standardmäßig eine neue Sortierung.

Ich habe meine Benutzerdatenbanken wie im folgenden Bild gezeigt angehängt.

Sobald die Datenbanken angehängt sind, können Sie die Sortierung dieser Datenbanken erneut überprüfen. Wenn Sie die Sortierung dieser Datenbanken ändern möchten, können Sie meinen vorherigen Artikel lesen, um dies zu erledigen.

Schlussfolgerung

Wenn Sie Daten aus den Datenbanken exportiert haben, können Sie alle Skripte ausführen, die während der Voraussetzung zum Erstellen der Datenbankobjekte generiert wurden. Anschließend können Sie die exportierten Daten in diese neu erstellten Datenbanken und Objekte importieren. Sie können Konfigurationen auf Serverebene gemäß den Details, die wir im Abschnitt „Voraussetzungen“ abgerufen haben, validieren und ändern.

Sie können Systemdatenbankdateien auch verschieben, wenn Sie sie an einem bestimmten Speicherort behalten möchten, da sie bei einer Neuerstellung der Systemdatenbank an einem Standardspeicherort erstellt werden. Es ist auch möglich, die Skripte zum Erstellen von Logins und Jobs mit Hilfe zuvor generierter Skripte auszuführen. Stellen Sie keine Systemdatenbanken wieder her, da dies die neu konfigurierte Sortierung in die ältere für diese Datenbank ändern wird.

Bitte teilen Sie diesen Artikel und geben Sie uns Ihr Feedback, damit wir uns verbessern können.