You are on page 1of 6

Step-by-step guide to configure Database Mirroring between SQL Server Instances in a Workgroup

Step 1: Create encryption key, certificate and end-points on Principal Instance


/* Execute this against the Principal Instance */ USE MASTER GO select * FROM sys.tcp_endpoints select * FROM sys.certificates select * FROM sys.symmetric_keys IF EXISTS ( SELECT * FROM sys.tcp_endpoints WHERE name LIKE '%End_Mirroring%') DROP ENDPOINT End_Mirroring; IF EXISTS ( SELECT * FROM sys.tcp_endpoints WHERE name LIKE '%Mirroring%') DROP ENDPOINT Mirroring; IF EXISTS ( SELECT * FROM sys.certificates WHERE name LIKE '%Principal_Cert%') DROP CERTIFICATE Principal_Cert; IF EXISTS ( SELECT * FROM sys.certificates WHERE name LIKE '%Mirror_Cert%') DROP CERTIFICATE Mirror_Cert; IF EXISTS ( SELECT * FROM sys.certificates WHERE name LIKE '%Witness_Cert%') DROP CERTIFICATE Witness_Cert; IF EXISTS (SELECT * FROM sys.symmetric_keys WHERE [name] LIKE '%DatabaseMasterKey%') DROP MASTER KEY; GO CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'Password!' GO CREATE CERTIFICATE Principal_Cert WITH SUBJECT = 'PRINCIPAL certificate', START_DATE = 01/07/2013 GO CREATE ENDPOINT End_Mirroring STATE = STARTED AS TCP (LISTENER_PORT = 5022, LISTENER_IP = ALL) FOR DATABASE_MIRRORING ( AUTHENTICATION = CERTIFICATE Principal_Cert, ENCRYPTION = REQUIRED ALGORITHM RC4, ROLE = ALL ) GO BACKUP CERTIFICATE Principal_Cert TO FILE = E:\Microsoft SQL Server\certificates\Principal_Cert.cer' GO

Step 2: Create encryption key, certificate and end-points on Mirror Instance


/* Execute this against the Mirror Instance */ USE MASTER GO select * FROM sys.tcp_endpoints select * FROM sys.certificates select * FROM sys.symmetric_keys IF EXISTS ( SELECT * FROM sys.tcp_endpoints WHERE name LIKE '%End_Mirroring%') DROP ENDPOINT End_Mirroring; IF EXISTS ( SELECT * FROM sys.tcp_endpoints WHERE name LIKE '%Mirroring%') DROP ENDPOINT Mirroring; IF EXISTS ( SELECT * FROM sys.certificates WHERE name LIKE '%Principal_Cert%') DROP CERTIFICATE Principal_Cert; IF EXISTS ( SELECT * FROM sys.certificates WHERE name LIKE '%Mirror_Cert%') DROP CERTIFICATE Mirror_Cert; IF EXISTS ( SELECT * FROM sys.certificates WHERE name LIKE '%Witness_Cert%') DROP CERTIFICATE Witness_Cert; IF EXISTS (SELECT * FROM sys.symmetric_keys WHERE [name] LIKE '%DatabaseMasterKey%') DROP MASTER KEY; GO CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'Password!' GO CREATE CERTIFICATE Mirror_Cert WITH SUBJECT = 'MIRROR certificate', START_DATE = '01/07/2013' GO CREATE ENDPOINT End_Mirroring STATE = STARTED AS TCP (LISTENER_PORT = 5023, LISTENER_IP = ALL) FOR DATABASE_MIRRORING ( AUTHENTICATION = CERTIFICATE Mirror_Cert, ENCRYPTION = REQUIRED ALGORITHM RC4, ROLE = ALL

) GO BACKUP CERTIFICATE Mirror_Cert TO FILE = F:\Microsoft SQL Server\certificates\Mirror_Cert.cer; GO

Step 3: Create login, user and associate certificate with user on Principal Instance
/* * Execute this against the Principal Instance. The Mirror_Cert.cer * needs to be copied on the Principal Server. */ USE MASTER GO /* * We are creating a SQL Login here. For Windows logins, * use the Grant Login instead of Create Login */ IF EXISTS ( SELECT * FROM sys.syslogins WHERE name LIKE '%MIRROR_login%') DROP LOGIN MIRROR_login; GO IF EXISTS ( SELECT * FROM sys.sysusers WHERE name LIKE '%MIRROR_User%') DROP USER MIRROR_User; GO CREATE LOGIN MIRROR_login WITH PASSWORD = 'Password!' GO CREATE USER MIRROR_User FOR LOGIN MIRROR_login GO CREATE CERTIFICATE Mirror_Cert AUTHORIZATION MIRROR_User FROM FILE = E:\Microsoft SQL Server\certificates\Mirror_Cert.cer' GO GRANT CONNECT ON ENDPOINT::End_Mirroring TO [MIRROR_login] GO

Step 4: Create login, user and associate certificate with user on Mirror Instance
/* * * */ USE MASTER GO /* * * We are creating a SQL Login here. For Windows logins, use the Grant Login instead of Create Login Execute this against the Mirror Instance. The Principal_Cert.cer needs to be copied on the Mirror Server.

*/ IF EXISTS ( SELECT * FROM sys.syslogins WHERE name LIKE '%PRINCIPAL_login%') DROP LOGIN PRINCIPAL_login; GO IF EXISTS ( SELECT * FROM sys.sysusers WHERE name LIKE '%PRINCIPAL_User%') DROP USER PRINCIPAL_User; GO CREATE LOGIN PRINCIPAL_login WITH PASSWORD = 'Password!' GO CREATE USER PRINCIPAL_User FOR LOGIN PRINCIPAL_login GO CREATE CERTIFICATE Principal_Cert AUTHORIZATION PRINCIPAL_User FROM FILE = E:\Microsoft SQL Server\certificates\Principal_Cert.cer' GO GRANT CONNECT ON ENDPOINT::End_Mirroring TO [PRINCIPAL_login] GO

Step 5: Create encryption key, certificate and end-points on Witness Instance


/* Execute this against the Witness Instance */ USE MASTER GO select * FROM sys.tcp_endpoints select * FROM sys.certificates select * FROM sys.symmetric_keys IF EXISTS ( SELECT * FROM sys.tcp_endpoints WHERE name LIKE '%End_Mirroring%')

DROP ENDPOINT End_Mirroring; IF EXISTS ( SELECT * FROM sys.tcp_endpoints WHERE name LIKE '%Mirroring%') DROP ENDPOINT Mirroring; IF EXISTS ( SELECT * FROM sys.certificates WHERE name LIKE '%Principal_Cert%') DROP CERTIFICATE Principal_Cert; IF EXISTS ( SELECT * FROM sys.certificates WHERE name LIKE '%Mirror_Cert%') DROP CERTIFICATE Mirror_Cert; IF EXISTS ( SELECT * FROM sys.certificates WHERE name LIKE '%Witness_Cert%') DROP CERTIFICATE Witness_Cert; IF EXISTS (SELECT * FROM sys.symmetric_keys WHERE [name] LIKE '%DatabaseMasterKey%') DROP MASTER KEY; GO CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'Password!' GO CREATE CERTIFICATE Witness_Cert WITH SUBJECT = 'WITNESS certificate', START_DATE = 01/07/2013 GO CREATE ENDPOINT End_Mirroring STATE = STARTED AS TCP (LISTENER_PORT = 5024, LISTENER_IP = ALL) FOR DATABASE_MIRRORING ( AUTHENTICATION = CERTIFICATE Witness_Cert, ENCRYPTION = REQUIRED ALGORITHM RC4, ROLE = Witness ) GO BACKUP CERTIFICATE Witness_Cert TO FILE = D:\Microsoft SQL Server\certificates\Witness_Cert.cer GO

Step 6: Create login, user and associate certificate with user on Principal Instance
/* * * */ USE MASTER GO /* * * We are creating a SQL Login here. For Windows logins, use the Grant Login instead of Create Login Execute this against the Principal Instance. The Witness_Cert.cer needs to be copied on the Principal Server.

*/ DROP USER WITNESS_User GO DROP LOGIN WITNESS_login GO CREATE LOGIN WITNESS_login WITH PASSWORD = 'Password!' GO CREATE USER WITNESS_User FOR LOGIN WITNESS_login GO CREATE CERTIFICATE Witness_Cert AUTHORIZATION WITNESS_User FROM FILE = E:\Microsoft SQL Server\certificates\Witness_Cert.cer' GO GRANT CONNECT ON ENDPOINT::End_Mirroring TO [WITNESS_login] GO

Step 7: Create login, user and associate certificate with user on Mirror Instance
/* * Execute this against the Mirror Instance. The Witness_Cert.cer * needs to be copied on the Mirror Server. */ USE MASTER GO /* * We are creating a SQL Login here. For Windows logins,

* use the Grant Login instead of Create Login */ DROP USER WITNESS_User GO DROP LOGIN WITNESS_login GO CREATE LOGIN WITNESS_login WITH PASSWORD = 'Password!' GO CREATE USER WITNESS_User FOR LOGIN WITNESS_login GO CREATE CERTIFICATE Witness_Cert AUTHORIZATION WITNESS_User FROM FILE = F:\Microsoft SQL Server\certificates\Witness_Cert.cer' GO GRANT CONNECT ON ENDPOINT::End_Mirroring TO [WITNESS_login] GO

Step 8: Create login, user and associate certificate with user on Witness Instance
/* * Execute this against the Witness Instance. The Principal_Cert.cer * and Mirror_Cert.cer needs to be copied on the Witness Server. */ USE MASTER GO /* * We are creating a SQL Login here. For Windows logins, * use the Grant Login instead of Create Login */ IF EXISTS ( SELECT * FROM sys.syslogins WHERE name LIKE '%PRINCIPAL_login%') DROP LOGIN PRINCIPAL_login; GO IF EXISTS ( SELECT * FROM sys.sysusers WHERE name LIKE '%PRINCIPAL_User%') DROP USER PRINCIPAL_User; GO CREATE LOGIN PRINCIPAL_login WITH PASSWORD = 'Password!' GO CREATE USER PRINCIPAL_User FOR LOGIN PRINCIPAL_login GO CREATE CERTIFICATE Principal_Cert AUTHORIZATION PRINCIPAL_User FROM FILE = D:\Microsoft SQL Server\certificates\Principal_Cert.cer' GO GRANT CONNECT ON ENDPOINT::End_Mirroring TO [PRINCIPAL_login] GO /* * We are creating a SQL Login here. For Windows logins, * use the Grant Login instead of Create Login */ IF EXISTS ( SELECT * FROM sys.syslogins WHERE name LIKE '%MIRROR_login%') DROP LOGIN MIRROR_login; GO IF EXISTS ( SELECT * FROM sys.sysusers WHERE name LIKE '%MIRROR_User%') DROP USER MIRROR_User; GO CREATE LOGIN MIRROR_login WITH PASSWORD = 'Password!' GO CREATE USER MIRROR_User FOR LOGIN MIRROR_login GO CREATE CERTIFICATE Mirror_Cert AUTHORIZATION MIRROR_User FROM FILE = D:\Microsoft SQL Server\certificates\Mirror_Cert.cer' GO GRANT CONNECT ON ENDPOINT::End_Mirroring TO [MIRROR_login] GO

Step 9: Create the Mirrored Database on the Mirror Server using backups from the Principal Server
/* * */ Execute this against the Principal Instance.

USE MASTER GO ALTER DATABASE MYDB_20xxMMdd SET RECOVERY FULL GO BACKUP DATABASE MYDB_20xxMMdd TO DISK = 'c:\Backups\MYDB_20xxMMdd_FullBackup.bak' GO BACKUP LOG MYDB_20xxMMdd TO DISK = 'c:\Backups\MYDB_20xxMMdd_LogBackup.trn' GO /* * * * */ USE MASTER GO RESTORE DATABASE MYDB_20xxMMdd FROM DISK = 'c:\Backups\MYDB_20xxMMdd_FullBackup.bak' WITH NORECOVERY GO RESTORE LOG MYDB_20xxMMdd FROM DISK = 'c:\Backups\MYDB_20xxMMdd_LogBackup.trn' WITH NORECOVERY GO /* * */ If there are issues here, use SSMS (GUI) to restore the database + log files. Copy MYDB_20xxMMdd_FullBackup.bak and MYDB_20xxMMdd_LogBackup.trn to the Mirror Server. Execute this against the Mirror Instance.

Step 10: Setup Mirroring


/* * */ ALTER DATABASE MYDB_20xxMMdd SET PARTNER = 'TCP://<<your principal server name here>>:5022' GO /* * */ ALTER DATABASE MYDB_20xxMMdd SET PARTNER = 'TCP://<<your mirror server name here>>:5023' GO ALTER DATABASE MYDB_20xxMMdd SET WITNESS = 'TCP://<<your witness server name here>>:5024' GO Execute this against the Principal Instance. Servername should be the fully qualified name Execute this against the Mirror Instance. Servername should be the fully qualified name

At this point your Database Mirroring should be up and running. You can use the Database Mirroring Monitor to verify the setup as well as to monitor the Synchronization status.

Disclaimer: All information provided here is my personal opinion and is neither verified nor approved by Microsoft before it is published. All information, and code samples, if any, is provided "AS IS" with no warranties and confers no rights.

You might also like