Hace un par de semanas escribí un post sobre las preguntas que os podían hacer en una entrevista de trabajo para ser DBA de SQL Server, y en ese post os dije que en el futuro os iba a explicar como configurar un mirroring en SQL Server.
El futuro ha llegado, así que aquí os dejo los pre requisitos y los pasos necesarios para configurarlo.
Pre requisitos para configurar un mirroring en SQL Server
Para poder configurar un mirroring en SQL Server necesitamos al menos 2 servidores y 2 bases de datos (una en cada servidor) en FULL Recovery model.
Para este ejemplo usaremos los siguientes nombres, esta información os ayudará a poder seguir el articulo de forma correcta.
- Servidor principal: DB-1A
- Servidor secundario: DB-2A
- Base de datos: DataMigration
En caso de que se hagan backups de log de forma muy frecuente es muy recomendable parar el job de los backups de log ya que si antes de hacer el mirror se hace otro backup de log tendremos que volver a hacer los backups y los restores.
Si la versión es Standard Edition sólo puede ser High Safety mirror, sólo se puede cambiar a High Performance en Enterprise edition.
Configurar mirroring SQL Server
Servidor primario
Empezaremos tomando un backup full y un backup de los logs de la base de datos DataMigration en el servidor principal. Usaré una ubicación en red a la que los 2 servidores tengan acceso.
Tomar un backup full de la base de datos
BACKUP DATABASE [DataMigration] TO DISK = N'\\db-backups\DataMigration.bak' WITH NOFORMAT, NOINIT, NAME = N'DatabaseMigration Database Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10 GO
Tomar un backup de los logs de la base de datos
BACKUP LOG [DataMigration] TO DISK = N'\\db-backups\DataMigration.trn' WITH NOFORMAT, NOINIT, SKIP, NOREWIND, NOUNLOAD, STATS = 10 GO
En caso de que se muestre un error diciendo que no es posible realizar esta operación porque la base de datos está en SIMPLE recovery model primero debéis aseguraros que esto no es verdad y luego cambiar a simple y volver a cambiar a FULL. Esto se puede deber a algún bug de la versión.
Servidor secundario
Ahora tendremos que efectuar los procesos de restauración de esta base de datos en el servidores secundario, en este caso restauraremos la base de datos dejándola en modo norecovery.
Restaurar el backup full de la base de datos en modo NORECOVERY
RESTORE DATABASE [DataMigration] FROM DISK = N'\\db-backups\DataMigration.bak' WITH FILE = 1, MOVE N'DataMigration' TO N'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\DATA\DataMigration.mdf', MOVE N'DataMigration_log' TO N'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\DATA\DataMigration_log.ldf', NORECOVERY, NOUNLOAD, REPLACE, STATS = 5 GO
Restaurar el backup de los logs de la base de datos
Una vez que la base de datos se encuentra en modo «restoring» efectuaremos el restore de los logs
RESTORE LOG [DataMigration] FROM DISK = N'\\db-backups\DataMigration.trn' WITH FILE = 1, NORECOVERY, NOUNLOAD, STATS = 10 GO
Efectuar el mirror entre los servidores
Una vez hayamos completado el proceso de backup y restore anterior sólo nos queda efectuar el mirror.
Para esto haremos click con el botón derecho sobre la base de datos «DataMigration» en el servidor primario, haremos click en «task» y luego en «mirror», ahora sólo queda presionar «iniciar el mirror» y ya todo estará funcionando.
Soluciona bug mirroring SQL Server 2016
Existe un bug en la versión 2016 de SQL Server que muestra el siguiente fallo al hacer esto «Database ‘DatabaseName’ cannot be open. It is in the middle of a restore. (Microsoft SQL Server, Error:927)».
No existe una solución real a esto, por lo que tendremos que realizar el proceso de usando un par de scripts.
Server secundario
ALTER DATABASE DataMigration SET PARTNER = 'TCP://DB-1A:7022' GO
Server primario
ALTER DATABASE DataMigration SET PARTNER = 'TCP://DB-1B:7022:7022' GO
Espero que este pequeño tutorial os haya servido para poder empezar a introduciros en el mundo de la alta disponibilidad.
1 comentario en «Configurar mirroring en SQL Server»