Exportar todos los datos (incluidos los inicios de sesión, los servidores vinculados, los trabajos del Agente SQL, la configuración de DB Mail, etc.) y reconstruir los datos a nivel de instancia, además de volver a cargar todos los datos del usuario, es mucho trabajo. E, incluso después de todo eso, todavía no hay garantía de que pueda actualizar la clasificación predeterminada de una base de datos a través de ALTER DATABASE
porque hay varias condiciones que evitarán que la operación se complete (consulte la sección "Cambiar la clasificación de la base de datos" de la ALTER DATABASE
documentación para más detalles) .
Sin embargo, hay un método indocumentado que es mucho más fácil. El principal inconveniente es que no es compatible. Esto no quiere decir que algo salga mal, solo que si algo sucede, Microsoft no ayudará a solucionarlo (porque nunca garantizaron que funcionaría).
El método del que hablo se ejecuta sqlservr.exe
con el -q {new_collation_name}
interruptor. Hay un poco más que eso, pero esa es la idea básica. Este método simplemente actualiza los metadatos del sistema, lo que tiene beneficios y consecuencias, siendo los principales:
Beneficios
- muy rápido
- omitir la mayoría de las restricciones que impiden
ALTER DATABASE
funcione
- probablemente mucho más preciso que cualquier script que la gente haya creado a lo largo de los años para soltar y recrear objetos
DIBUJOS
- sin soporte si algo sale mal
VARCHAR
los datos pueden cambiar, SI la página de códigos es diferente entre las colaciones antiguas y nuevas, y existen caracteres con valores de 128 - 255 (0x80 - 0xFF), y esos caracteres no existen como el mismo carácter con el mismo valor en el nuevo código página. Por lo tanto, existe la posibilidad de pérdida de datos, y sus datos deben investigarse primero para garantizar que esta condición no exista. Pero, esto también significa que hay muchos casos con solo caracteres que tienen valores de 0 a 127 que no están en peligro, incluso si la página de códigos cambia.
- Los tipos de tabla definidos por el usuario (UDTT) se omiten y deben actualizarse manualmente.
Para obtener una descripción detallada de lo sqlservr.exe -q
que hace y no hace el método (incluidos los detalles sobre cómo funcionan las colaciones en los distintos niveles y los posibles problemas a tener en cuenta), consulte mi publicación:
Cambio de la clasificación de la instancia, las bases de datos y todas las columnas en todas las bases de datos de usuario: ¿qué podría salir mal?
Para cambiar sólo la instancia (incluyendo las bases de datos del sistema: master
, model
, msdb
, y tempdb
) y una o más bases de datos (pero no todas las bases de datos), sólo tienes que separar la base de datos (s) que desea excluir de esta operación, y luego vuelva a conectar ellas una vez que se completa la actualización de colación.