L'esportazione di tutti i dati (inclusi accessi, server collegati, processi di SQL Agent, impostazioni di DB Mail, ecc.) E la ricostruzione dei dati a livello di istanza, oltre al ricaricamento di tutti i dati dell'utente, richiede molto lavoro. E, anche dopo tutto ciò, non c'è ancora alcuna garanzia che è possibile aggiornare le regole di confronto predefinite di un database tramite ALTER DATABASE
perché ci sono diverse condizioni che impediranno il completamento dell'operazione (per i dettagli, consultare la sezione "Modifica delle regole di confronto del database" della ALTER DATABASE
documentazione ) .
Vi è, tuttavia, un metodo non documentato che è molto più semplice. Lo svantaggio principale è che non è supportato. Questo non vuol dire che qualcosa andrà storto, solo che se qualcosa lo fa, Microsoft non aiuterà a risolverlo (perché non hanno mai garantito che funzionasse).
Il metodo di cui parlo è in esecuzione sqlservr.exe
con l' -q {new_collation_name}
interruttore. C'è un po 'di più, ma questa è l'idea di base. Questo metodo aggiorna semplicemente i metadati di sistema, che ha benefici e conseguenze, i principali sono:
BENEFICI
- molto veloce
- bypassare la maggior parte delle restrizioni che impediscono il
ALTER DATABASE
funzionamento
- probabilmente molto più preciso di qualsiasi sceneggiatura che la gente ha ideato nel corso degli anni per eliminare e ricreare oggetti
INCONVENIENTI
- non supportato se qualcosa va storto
VARCHAR
i dati possono cambiare, SE la tabella codici è diversa tra le regole di confronto vecchie e nuove ed esistono caratteri con valori di 128 - 255 (0x80 - 0xFF) e questi caratteri non esistono come lo stesso carattere con lo stesso valore nel nuovo codice pagina. Quindi esiste il potenziale per la perdita di dati e i tuoi dati devono essere prima di tutto ricercati per garantire che questa condizione non esista. Ma questo significa anche che ci sono molti casi con solo caratteri con valori compresi tra 0 e 127 che non sono in pericolo, anche se la tabella codici cambia.
- I tipi di tabella definiti dall'utente (UDTT) vengono ignorati e devono essere aggiornati manualmente.
Per una descrizione dettagliata di ciò che il sqlservr.exe -q
metodo fa e non fa (compresi i dettagli su come funzionano le regole di confronto ai vari livelli e i potenziali problemi a cui prestare attenzione), consultare il mio post:
Modifica delle regole di confronto dell'istanza, dei database e di tutte le colonne in tutti i database degli utenti: cosa potrebbe andare storto?
Per modificare solo l'istanza (inclusi i database di sistema: master
, model
, msdb
, e tempdb
) ed uno o più database (ma non tutti i database), è sufficiente scollegare il database (s) che si desidera escludere da questa operazione, e poi ricollegare una volta completato l'aggiornamento delle regole di confronto.