Creación de Mirroring sin Active Directory en SQL Server 2012
![](https://aleson-itc.com/wp-content/uploads/2020/05/F69F9C18.png)
Database Mirroring es una tecnología de Alta Disponibilidad basada en un modo de funcionamiento Activo / Pasivo. Es decir, mientras una Instancia realiza un papel de Servidor Principal (Activo) para una base de datos en particular, la otra instancia realiza el papel de Servidor Espejo o Secundario (Pasivo) para dicha base de datos.
Requisitos previos
Para realizar el siguiente ejemplo necesitamos dos máquinas virtuales SQL Server 2012 Enterprise Edition . La primera instancia que en nuestro ejemplo llamaremos principal contiene la base de datos, de la cual queremos hacer el mirroring, y la instancia secundaria a la que hemos llamado mirroring está totalmente vacía.
![img1](http://aleson-itc.com/wp-content/plugins/a3-lazy-load/assets/images/lazy_placeholder.gif)
Configuración Inicial
Nos situamos en el directorio C:\Windows\System32\drivers\etc y abrimos el archivo hosts con cualquier editor de textos para editarlo.
![hosts](http://aleson-itc.com/wp-content/plugins/a3-lazy-load/assets/images/lazy_placeholder.gif)
Una vez editado el archivo hosts en el servidor principal y mirroring comprobamos que tengan ping con sus respectivos nombres de máquina. Para hacer la comprobación abrimos el CMD y ejecutamos los siguientes comandos: ping principal y ping mirroring.
Creación de Certificados
El primer paso a seguir es crear los certificados correspondientes en cada instancia SQL Server, para que las dos bases de datos puedan enviar y recibir datos cifrados y puedan descifrarlos para su correspondiente tratamiento.
-- Instancia principal
-- Creamos una clave de encriptado
USE master;
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'aleson123.';
GO
-- Creamos un certificado
CREATE CERTIFICATE Cert_principal WITH SUBJECT = 'certificate for database principal';
GO
-- Y para finalizar hacemos un backup del certificado.
BACKUP CERTIFICATE Cert_principal TO FILE = 'Cert_principal.cer';
GO
-- Instancia Mirroring
USE master;
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'aleson123.';
GO
CREATE CERTIFICATE Cert_mirroring WITH SUBJECT = 'certificate for database mirroring';
GO
BACKUP CERTIFICATE Cert_mirroring TO FILE = 'Cert_mirroring.cer';
GO
Creación de conectores del servicio
Creamos un EndPoint en cada servidor y le asignamos su certificado, esto nos permitirá utilizarlos para establecer la trasferencia de datos de forma segura.
-- Instancia Principal
CREATE ENDPOINT Endpoint_Mirroring
STATE = STARTED
AS TCP (LISTENER_PORT=5022, LISTENER_IP = ALL)
FOR DATABASE_MIRRORING (AUTHENTICATION = CERTIFICATE Cert_principal, ENCRYPTION = REQUIRED ALGORITHM AES, ROLE = ALL);
GO
-- Instancia Mirroring
CREATE ENDPOINT Endpoint_Mirroring
STATE = STARTED
AS TCP (LISTENER_PORT=5022, LISTENER_IP = ALL)
FOR DATABASE_MIRRORING (AUTHENTICATION = CERTIFICATE Cert_mirroring, ENCRYPTION = REQUIRED ALGORITHM AES, ROLE = ALL);
GO
Enlace de certificados
Una vez creados los certificados de cada base de datos y los EndPoint, procederemos a enlazar el certificado de la base de datos de mirroring, con la base de datos principal y viceversa. Gracias a esto, las bases de datos podrán enviarse datos cifrados entre ellas y podrán descifrarlos.
Copiamos los ficheros de los certificados en ambos servidores, es decir el Cert_mirroring en el servidor principal y el Cert_principal en el servidor mirroring.
![Mirroring_img2](https://aleson-itc.com/wp-content/uploads/2016/09/img2-e1473350763838.png)
Una vez copiados los certificados, ejecutamos el siguiente script:
-- Instancia Principal
-- Creamos un inicio de sesión.
CREATE LOGIN DBMirroringLogin WITH PASSWORD = 'aleson123.';
GO
-- Creamos un usuario para ese inicio de sesión.
CREATE USER DBMirroringLogin FOR LOGIN DBMirroringLogin;
GO
-- Creamos el certificado de la base de datos de mirroring, poniéndole como propietario el usuario recién creado.
CREATE CERTIFICATE Cert_mirroring AUTHORIZATION DBMirroringLogin FROM FILE = 'Cert_mirroring.cer'
GO
-- Le damos permisos al usuario para conectarse al EndPoint
GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [DBMirroringLogin];
GO
-- Instancia Mirroring
CREATE LOGIN DBMirroringLogin WITH PASSWORD = 'aleson123.';
GO
CREATE USER DBMirroringLogin FOR LOGIN DBMirroringLogin;
GO
CREATE CERTIFICATE Cert_principal AUTHORIZATION DBMirroringLogin FROM FILE = 'Cert_principal.cer'
GO
GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [DBMirroringLogin];
GO
Activación del Reflejo
En el servidor principal realizamos una copia de seguridad completa de la Base de datos y una copia de seguridad del Log de transacciones.
BACKUP DATABASE ALESON_DB TO DISK='C:\BACKUP\ALESON_DB_FULL.BAK' WITH FORMAT, COMPRESSION
GO
BACKUP LOG ALESON_DB TO DISK='C:\BACKUP\ALESON_DB.BAK' WITH FORMAT, COMPRESSION
GO
Copiamos los ficheros de backup en el servidor mirroring y restauramos las base de datos en modo NO RECOVERY.
RESTORE DATABASE ALESON_DB FROM DISK='C:\BACKUP\ALESON_DB_FULL.BAK' WITH NORECOVERY
GO
RESTORE LOG ALESON_DB FROM DISK='C:\BACKUP\ALESON_DB_LOG.BAK' WITH NORECOVERY
GO
Activamos en el servidor mirroring el reflejo añadiéndolo como partner.
ALTER DATABASE ALESON_DB SET PARTNER = 'TCP://PRINCIPAL:5022';
GO
Activación Mirroring
Para finalizar nos situaremos en la instancia principal y seguiremos los siguientes pasos:
![img4](https://aleson-itc.com/wp-content/uploads/2016/09/img4.png)
Botón derecho sobre la base de datos principal -> Tasks -> Mirror…
![Mirroring_img5](https://aleson-itc.com/wp-content/uploads/2016/09/img5.png)
Configure Security…
![Mirroring_img6](https://aleson-itc.com/wp-content/uploads/2016/09/img6.png)
Include Witness Server -> No
![Mirroring_img7](https://aleson-itc.com/wp-content/uploads/2016/09/img7.png)
Por defecto aparecerán los siguientes parámetros.
![Mirroring_img8](https://aleson-itc.com/wp-content/uploads/2016/09/img8.png)
Le damos a connect, y hacemos loggin contra la instancia mirroring y nos rellenará el Listner port y Endpoint name.
![Mirroring_img9](https://aleson-itc.com/wp-content/uploads/2016/09/img9.png)
En principal añadimos la cuenta Domain Contoller del servidor principal y en mirror la del servidor de mirroring.
![Mirroring_img10](https://aleson-itc.com/wp-content/uploads/2016/09/img10.png)
Le damos a Start Mirroring
Una vez iniciado, las bases de datos deben aparecer con los siguiente estados:
![Mirroring_img11](https://aleson-itc.com/wp-content/uploads/2016/09/img11.png)
Instancia Principal (Principal, Synchronized) Instancia Mirroring (Mirror, Synchronized / Restoring…)
![Xesco Abad](http://aleson-itc.com/wp-content/plugins/a3-lazy-load/assets/images/lazy_placeholder.gif)
Business Intelligence Expert Consultant. Specialising in creation of Data Warehouse, Analysis Services, Power BI, SSIS, SSRS and Databricks.