En mi artículo anterior, expliqué los conceptos básicos de la intercalación de SQL Server. Le sugiero que primero lea ese artículo (si aún no lo ha hecho). Aquí, le mostraré cómo cambiar la intercalación a nivel de servidor o la intercalación a nivel de instancia de SQL Server de una instancia de SQL Server existente.
¿Qué es la intercalación de nivel de servidor en SQL Server?
La intercalación determina las reglas de ordenación, mayúsculas y minúsculas y propiedades de acento para los datos. Es una configuración importante que puede afectar sus datos dentro de la base de datos, por lo que no se recomienda cambiarla con frecuencia.
La intercalación se puede configurar en 4 capas en SQL Server:
- Nivel de servidor
- Nivel de base de datos
- Nivel de columna
- Nivel de expresión
Cambiar la intercalación de nivel de servidor de una instancia de SQL Server existente
Esta sección describirá los requisitos previos y el proceso para cambiar la intercalación a nivel de servidor. Se cambiará al reconstruir las bases de datos del sistema con un nuevo nombre de intercalación.
Requisitos previos
Siga los puntos a continuación para ejecutar el cambio de intercalación para una instancia de producción.
- Ejecute una copia de seguridad completa de todas las bases de datos. Si es posible, tome una instantánea de la máquina virtual antes de iniciar este procedimiento.
- Asegúrese de tener todos los scripts para crear bases de datos de usuarios u objetos de base de datos como tablas, inicios de sesión, usuarios, trabajos, etc. Crearemos todos los objetos de base de datos después del cambio de intercalación.
- Exportar todos los datos usando bcp o cualquier herramienta de terceros.
- Registre los valores de configuración a nivel de servidor y el número de compilación de la instancia de SQL Server, incluidas las revisiones aplicadas a la instancia.
- Registre todas las ubicaciones de los archivos de la base de datos del sistema. Esto podría ser necesario si ha movido los archivos de la base de datos del sistema a otra ubicación.
Echemos un vistazo a algunos scripts que lo ayudarán a capturar los detalles del sistema. Copie estos resultados en un bloc de notas o en un archivo de Excel, o simplemente tome una captura de pantalla y guárdela para consultarla en el futuro.
Ejecute el siguiente comando para obtener todas las configuraciones a nivel de servidor.
--Get all server level configurations
SELECT * FROM sys.configurations;
Capture la versión de compilación de SQL Server ejecutando la siguiente consulta.
--Fetch SQL Server build version
SELECT @@VERSION
GO
SELECT
SERVERPROPERTY('ProductVersion ') AS ProductVersion,
SERVERPROPERTY('ProductLevel') AS ProductLevel,
SERVERPROPERTY('ResourceVersion') AS ResourceVersion,
Del mismo modo, debemos obtener la ubicación de los archivos de la base de datos del sistema ejecutando las siguientes declaraciones T-SQL.
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'));
A continuación, ejecutaremos los siguientes scripts T-SQL para recopilar información de recopilación de la instancia de SQL Server y todas las bases de datos de una sola vez.
--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]
Lea mi artículo anterior para obtener más información sobre este script.
Ahora, genera Crear scripts para todos los inicios de sesión y trabajos creados en la instancia de SQL Server para futura referencia y validación. Además, puede ejecutar el siguiente script para obtener la lista de todos los inicios de sesión y trabajos de la instancia de SQL Server.
--Get list of logins
Use master
Go
Select * from syslogins
--Get list of Jobs
USE msdb
Go
Select * from sysjobs
Reconstrucción de instancia
Una vez que haya terminado los pasos mencionados en la sección de requisitos previos, el siguiente paso es iniciar el proceso para el cambio de intercalación. Como hemos realizado copias de seguridad o exportado todos los datos de las bases de datos de los usuarios, debemos separar todas las bases de datos de los usuarios de la instancia de SQL Server. También puede soltarlos si desea importar los datos exportados a la nueva base de datos. Sugeriría separarlos para mantener una copia segura de sus bases de datos para que pueda adjuntarlos después del cambio de clasificación.
El proceso de cambiar una intercalación a nivel de servidor requiere la reconstrucción de la base de datos del sistema. Necesitamos pasar un nuevo nombre de colación mientras reconstruimos las bases de datos del sistema. La operación de reconstrucción de la base de datos del sistema requiere la configuración de la instalación de SQL Server. Comencemos la operación de reconstrucción de la base de datos del sistema para cambiar la intercalación a nivel del servidor.
Inicie sesión en su sistema de destino para el que cambiará la intercalación. Abra el símbolo del sistema de Windows o una ventana de terminal de PowerShell. Abra PowerShell, luego escriba cmd para usar una utilidad de solicitud de comando de Windows como se muestra en la imagen a continuación. Cambie la ubicación del directorio donde ha colocado los archivos de configuración de la instalación de 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
Ahora estoy en la ubicación donde se guardan los archivos de instalación de SQL Server.
A continuación, ejecutaremos el siguiente comando para reconstruir todas las bases de datos del sistema. Además, debemos ejecutar el siguiente comando con un nuevo parámetro de intercalación para cambiarlo para esta instancia de SQL Server y todas las bases de datos del 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
Puede ver su salida en la siguiente captura de pantalla. Debe dejar la pantalla como está y dejar que continúe hasta que obtenga el directorio de trabajo.
Aquí, tenemos el aviso. Significa que la base de datos del sistema se ha reconstruido con una nueva intercalación para esta instancia de SQL Server. Vamos a verificarlo.
Asegúrese de que SQL Server se esté ejecutando y sus servicios estén iniciados. Ahora inicie SQL Server Management Studio o sqlcmd para conectarse a la instancia de SQL Server. Puede ver que me conecté con éxito a la instancia de SQL Server que se reconstruyó en los pasos anteriores. Solo podemos ver las bases de datos del sistema en la imagen de abajo.
Ejecute las instrucciones T-SQL a continuación para recopilar los detalles de intercalación a nivel de base de datos y nivel de servidor. Este paso validará el cambio de colación de las bases de datos del servidor y del 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]
La intercalación a nivel de servidor y de base de datos para todas las bases de datos del sistema utiliza SQL_Latin1_General_CP1_CS_AS en la siguiente captura de pantalla. Este paso valida que se configuró una nueva intercalación en esta instancia de SQL Server.
La intercalación de nivel de servidor se ha cambiado a la nueva intercalación. El siguiente paso es adjuntar todas las bases de datos de usuarios que se separaron antes de reconstruir las bases de datos del sistema. Recuerde, todas las bases de datos existentes que se adjuntarán o restaurarán tendrán la misma intercalación con la que se copiaron o desconectaron. Debe cambiarlo manualmente después del cambio de intercalación a nivel de servidor. Aunque, todas las bases de datos recién creadas tendrán una nueva intercalación por defecto.
Adjunté mis bases de datos de usuario como se muestra en la imagen a continuación.
Una vez que se adjuntan las bases de datos, puede verificar la intercalación de estas bases de datos nuevamente. Si desea cambiar la intercalación de estas bases de datos, puede leer mi artículo anterior para hacerlo.
Conclusión
Si ha exportado datos de las bases de datos, puede ejecutar todos los scripts que se generaron durante el requisito previo para crear los objetos de la base de datos. Luego puede importar los datos exportados en estas bases de datos y objetos recién creados. Puede validar y modificar configuraciones a nivel de servidor según los detalles que obtuvimos en la sección de requisitos previos.
También puede mover los archivos de la base de datos del sistema si desea mantenerlos en una ubicación específica, ya que la reconstrucción de la base de datos del sistema los creará en una ubicación predeterminada. También es posible ejecutar los scripts para crear inicios de sesión y trabajos con la ayuda de scripts generados anteriormente. No restaure las bases de datos del sistema, ya que cambiará la intercalación recién configurada a la anterior para esa base de datos.
Comparta este artículo y envíenos sus comentarios para que podamos mejorar.