Error 1478 en SQL Server Mirroring

Este error es bastante recurrente cuando se quiere levantar Database Mirroring. Puede que al momento de configurarlo no se haya presentando ningún warning y ningún error en el proceso, pero si al momento de echar a andar el mecanismo de mirroring aparece este error, es porque no se realizó un paso previo.

Error 1478
Error 1478

Así se ve el error y la solución es re simple. Solo hay que respaldar el log de transacciones de la base de datos primaria y restaurar este respaldo en la base de datos de espejo con la opción de NORECOVERY.
Una vez que esta tarea se ha realizado, ya se puede levantar Mirroring y debiéramos tener problemas.

Configurar Mirroring en SQL Server

Database Mirroring aparece en la versión 2005 y  es la evolución de Log Shipping. Tal como su nombre lo indica,  sirve para tener una base de datos «espejada» en otro servidor.  Puede trabajar de 3 Formas:

modos de funcionamiento | Fuente: guillesql.es
modos de funcionamiento | Fuente: guillesql.es

De foma más simple, la principal diferencia entre la configuración síncrona o asíncrona es:

  • De modo síncrono, el servidor principal espera a que las transacciones hagan commit en el servidor espejo para poder continuar.
  • De modo asíncrono, el servidor principal trabaja sin esperar al secundario.

Algunas diferencias entre LogShipping y Mirroring (Hay muchas más, pero aquí están las que más me llaman la atención):

  • Database Mirroring es capaz de configurar una conexión segura entre ambos puntos.
  • Database Mirroring provee la capacidad de hacer failover automático.

Log Shipping no hace ninguna de las dos anteriores.

Para configurar Database Mirroring se puede hacer a través del asistente o se puede hacer a través de instrucciones en t-sql. En este caso, utilizaremos el asistente para ahorrar tiempo.

Antes de partir la configuración nos debemos asegurar que la base de datos esté en modo de recuperación Full y debemos crear un respaldo de la base de datos del servidor primario y restaurarla con la opción WITH NORECOVERY en el servidor que será espejo.

Esta configuración requiere algunas configuraciones en el firewall de ambos equipos. En el servidor principal y en el espejo se debe abrir el puerto TCP 5022. Ahora, si se decide usar otro puerto, hay que estar seguro que el puerto está disponible y se puede abrir para las conexiones.

Una vez que se tiene la configuración previa lista, se hace el asistente que permitirá configurar el mirroring

Abrir asistente
Abrir asistente

En la ventana principal se debe iniciar el asistente

Ventana Principal
Ventana Principal

Se inicia el asistente

Inicio del asistente
Inicio del asistente

Se puede o no configurar un testigo. El testigo servirá para poder tener un failover automático. En este artículo no configuraré un testigo.

Configuracion del testigo
Configuracion del testigo

Configuración del equipo principal. Se puede cambiar el puerto (pero recuerden que ya habíamos abierto el puerto 5022). Además, se puede seleccionar si se quiere cifrar o no la conexión.

Configuracion del primario
Configuracion del primario

Para la configuración del secundario es necesario conectarse antes (recordar abrir el puerto 1422 en el secundario). La ventana de configuración es exactamente igual al primario.

Configuracion del Secundario
Configuracion del Secundario

El servicio debe estar configurado con una cuenta de dominio. Se debe indicar la cuenta del servicio del servidor primario y del espejo.

Cuentas de servicio
Cuentas de servicio

Para Finalizar:

Finalizar
Finalizar

Al momento de finalizar, se inicia el proceso de configuración del mirroring. Si aparece este mensaje, es porque está todo bien

Progreso de Configuracion
Progreso de Configuracion

Al terminar el asistente, aparecerá una ventana así en la cual nos preguntará si queremos iniciar Mirroring al tiro o no. En mi caso, no  configuré el testigo, por lo que no activaré el mirroring para hacer una configuración antes de partir.

Iniciar mirroring
Iniciar mirroring

Antes de comenzar el mirroring, lo configuré como asíncrono y luego inicié el mirroring

Mirroring Funcionando
Mirroring Funcionando

 

Si por algún motivo, te aparece el error 1478 cuando echas a andar el mirroring, es porque debes respaldar el transaction log del servidor primario y luego tienes que hacer un restore with norecovery en el servidor espejo. Luego de eso, ya puedes echar a andar el mirroring.

Chau!