Nel mio articolo precedente ho spiegato le basi di SQL Server Collation. Ti suggerirei di leggere prima quell'articolo (se non l'hai già fatto). Qui ti mostrerò come modificare le regole di confronto a livello di server o le regole di confronto a livello di istanza di SQL Server di un'istanza di SQL Server esistente.
Che cos'è la confronto a livello di server in SQL Server?
Le regole di confronto determinano le regole di ordinamento, le maiuscole e le proprietà di accento per i dati. È un'impostazione importante che può influenzare i tuoi dati all'interno del database, quindi non è consigliabile cambiarla frequentemente.
Le regole di confronto possono essere configurate a 4 livelli in SQL Server:
- Livello server
- Livello database
- Livello colonna
- Livello di espressione
Nota: Se utilizzi SQL Server Express Edition non puoi modificare le regole di confronto da SQL_Latin1_General_CP1_CI_AS .
Modifica delle regole di confronto a livello di server dell'istanza di SQL Server esistente
Questa sezione descriverà i prerequisiti e il processo per modificare le regole di confronto a livello di server. Verrà modificato ricostruendo i database di sistema con un nuovo nome di confronto.
Prerequisiti
Segui i punti seguenti per eseguire la modifica delle regole di confronto per un'istanza di produzione.
- Esegui un backup completo di tutti i database. Se possibile, fai uno snapshot della VM prima di iniziare questa procedura.
- Assicurati di avere tutti gli script per creare database utente o oggetti database come tabelle, accessi, utenti, lavori, ecc. Creeremo tutti gli oggetti database dopo la modifica delle regole di confronto.
- Esportare tutti i dati utilizzando bcp o qualsiasi strumento di terze parti.
- Registra i valori di configurazione a livello di server e il numero di build dell'istanza di SQL Server inclusi gli hotfix applicati all'istanza.
- Registra tutte le posizioni dei file del database di sistema. Potrebbe essere necessario se hai spostato i file del database di sistema in un'altra posizione.
Diamo un'occhiata ad alcuni script che ti aiuteranno a catturare i dettagli del sistema. Copia questi output in un blocco note o in un file Excel, oppure fai semplicemente uno screenshot e salvalo per riferimento futuro.
Esegui il comando seguente per ottenere tutte le configurazioni a livello di server.
--Get all server level configurations
SELECT * FROM sys.configurations;
Acquisisci la versione build di SQL Server eseguendo la query seguente.
--Fetch SQL Server build version
SELECT @@VERSION
GO
SELECT
SERVERPROPERTY('ProductVersion ') AS ProductVersion,
SERVERPROPERTY('ProductLevel') AS ProductLevel,
SERVERPROPERTY('ResourceVersion') AS ResourceVersion,
Allo stesso modo, dovremmo ottenere la posizione dei file del database di sistema eseguendo le istruzioni T-SQL seguenti.
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'));
Successivamente, eseguiremo gli script T-SQL seguenti per raccogliere le informazioni sulle regole di confronto dell'istanza di SQL Server e di tutti i database in un colpo solo.
--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]
Leggi il mio articolo precedente per ulteriori informazioni su questo script.
Ora, genera Crea script per tutti gli accessi e i processi creati nell'istanza di SQL Server per riferimento e convalida futuri. Inoltre, puoi eseguire lo script seguente per recuperare l'elenco di tutti gli accessi e i processi dall'istanza di SQL Server.
--Get list of logins
Use master
Go
Select * from syslogins
--Get list of Jobs
USE msdb
Go
Select * from sysjobs
Ricostruzione istanza
Una volta completati i passaggi indicati nella sezione dei prerequisiti, il passaggio successivo consiste nell'avviare il processo per la modifica delle regole di confronto. Poiché abbiamo eseguito backup o esportato tutti i dati dai database degli utenti, è necessario scollegare tutti i database degli utenti dall'istanza di SQL Server. Puoi anche rilasciarli se desideri importare i dati esportati nel nuovo database. Suggerirei di staccarli per conservare una copia sicura dei tuoi database in modo da poterli allegare dopo la modifica delle regole di confronto.
Il processo di modifica delle regole di confronto a livello di server richiede la ricostruzione del database di sistema. È necessario passare un nuovo nome di confronto durante la ricostruzione dei database di sistema. La ricostruzione del funzionamento del database di sistema richiede la configurazione dell'installazione di SQL Server. Iniziamo l'operazione di ricostruzione del database di sistema per modificare le regole di confronto a livello di server.
Accedi al tuo sistema di destinazione per il quale cambierai le regole di confronto. Apri il prompt dei comandi di Windows o una finestra del terminale di PowerShell. Apri PowerShell, quindi digita cmd per utilizzare un'utilità del prompt dei comandi di Windows come mostrato nell'immagine seguente. Modifica la posizione della directory in cui hai inserito i file di installazione di 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
Ora mi trovo nella posizione in cui vengono salvati i file di installazione di SQL Server.
Successivamente, eseguiremo il comando seguente per ricostruire tutti i database di sistema. Inoltre, dobbiamo eseguire il comando seguente con un nuovo parametro di confronto per modificarlo per questa istanza di SQL Server e tutti i database di 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
Puoi vedere il suo output nello screenshot qui sotto. Dovresti lasciare lo schermo così com'è e lasciare che lo schermo proceda fino a quando non ottieni la directory di lavoro.
Qui abbiamo il prompt. Significa che il database di sistema è stato ricostruito con nuove regole di confronto per questa istanza di SQL Server. Verifichiamolo.
Assicurati che SQL Server sia in esecuzione e che i suoi servizi siano avviati. Ora avvia SQL Server Management Studio o sqlcmd per connettersi all'istanza di SQL Server. Puoi vedere, mi sono connesso correttamente all'istanza di SQL Server che è stata ricostruita nei passaggi precedenti. Possiamo vedere solo i database di sistema nell'immagine sottostante.
Eseguire le istruzioni T-SQL seguenti per raccogliere i dettagli delle regole di confronto a livello di database e di server. Questo passaggio convaliderà la modifica delle regole di confronto del server e dei database di 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]
Le regole di confronto a livello di server e di database per tutti i database di sistema utilizzano SQL_Latin1_General_CP1_CS_AS nello screenshot qui sotto. Questo passaggio convalida la configurazione di nuove regole di confronto in questa istanza di SQL Server.
Le regole di confronto a livello di server sono state modificate nelle nuove regole di confronto. Il passaggio successivo consiste nel collegare tutti i database utente che sono stati scollegati prima di ricostruire i database di sistema. Tenere presente che tutti i database esistenti che devono essere allegati o ripristinati avranno le stesse regole di confronto in base alle quali è stato eseguito il backup o il distacco. È necessario modificarlo manualmente dopo la modifica delle regole di confronto a livello di server. Tuttavia, tutti i database appena creati avranno nuove regole di confronto per impostazione predefinita.
Ho allegato i miei database utente come mostrato nell'immagine sottostante.
Una volta collegati i database, è possibile controllare nuovamente le regole di confronto di questi database. Se desideri modificare le regole di confronto di questi database, puoi leggere il mio articolo precedente per farlo.
Conclusione
Se hai esportato i dati dai database, puoi eseguire tutti gli script che sono stati generati durante il prerequisito per creare gli oggetti del database. Quindi puoi importare i dati esportati in questi database e oggetti appena creati. Puoi convalidare e modificare le configurazioni a livello di server secondo i dettagli che abbiamo recuperato nella sezione dei prerequisiti.
È inoltre possibile spostare i file del database di sistema se si desidera mantenerli in una posizione specifica poiché una ricostruzione del database di sistema li creerà in una posizione predefinita. È anche possibile eseguire gli script per creare accessi e lavori con l'aiuto di script generati in precedenza. Non ripristinare i database di sistema poiché cambieranno le regole di confronto appena configurate in quelle precedenti per quel database.
Condividi questo articolo e inviaci il tuo feedback, in modo che possiamo migliorare.