SQL Note--Mirror

--=========================================================================================================
--在主服务器上运行以下脚本
--=========================================================================================================

USE master;
GO
--=========================================================================================================
--创建Master key
IF NOT EXISTS(SELECT 1 FROM sys.symmetric_keys k WHERE k.Name='##MS_DatabaseMasterKey##')
BEGIN
CREATE MASTER KEY ENCRYPTION BY PASSWORD ='master@key'
END
GO
IF NOT EXISTS(SELECT 1 FROM sys.databases db WHERE db.[is_master_key_encrypted_by_server]=1)
BEGIN
ALTER MASTER KEY ADD ENCRYPTION BY SERVICE MASTER KEY
END
GO

--=========================================================================================================
--创建和备份证书
IF NOT EXISTS (SELECT 1 FROM sys.certificates C WHERE C.Name='PrincipalServerCert' )
BEGIN
CREATE CERTIFICATE PrincipalServerCert WITH SUBJECT ='Principal Server Cert'
END
GO
BACKUP CERTIFICATE PrincipalServerCert TO FILE='D:\PrincipalServerCert.cer'
GO

--=========================================================================================================
--创建镜像专用的端点,并使用证书加密
--同一个实例上只能存在一个镜像端点
IF NOT EXISTS(SELECT * FROM sys.endpoints e WHERE e.[Type]=4)
BEGIN
CREATE ENDPOINT DBMirrorEndPoint
STATE=STARTED AS
TCP(LISTENER_PORT=5022)
FOR DATABASE_MIRRORING(AUTHENTICATION=CERTIFICATE PrincipalServerCert, ENCRYPTION=REQUIRED,ROLE=ALL)
END 













--=========================================================================================================
--在镜像服务器上运行以下脚本
--=========================================================================================================

USE master;
GO
--=========================================================================================================
--创建Master key
IF NOT EXISTS(SELECT 1 FROM sys.symmetric_keys k WHERE k.Name='##MS_DatabaseMasterKey##')
BEGIN
CREATE MASTER KEY ENCRYPTION BY PASSWORD ='master@key'
END
GO
IF NOT EXISTS(SELECT 1 FROM sys.databases db WHERE db.[is_master_key_encrypted_by_server]=1)
BEGIN
ALTER MASTER KEY ADD ENCRYPTION BY SERVICE MASTER KEY
END
GO

--=========================================================================================================
--创建和备份证书
IF NOT EXISTS (SELECT 1 FROM sys.certificates C WHERE C.Name='MirrorServerCert' )
BEGIN
CREATE CERTIFICATE MirrorServerCert WITH SUBJECT ='Mirror Server Cert'
END
GO
BACKUP CERTIFICATE MirrorServerCert TO FILE='D:\MirrorServerCert.cer'
GO

--=========================================================================================================
--创建镜像专用的端点,并使用证书加密
--同一个实例上只能存在一个镜像端点
IF NOT EXISTS(SELECT * FROM sys.endpoints e WHERE e.[Type]=4)
BEGIN
CREATE ENDPOINT DBMirrorEndPoint
STATE=STARTED AS
TCP(LISTENER_PORT=5023)
FOR DATABASE_MIRRORING(AUTHENTICATION=CERTIFICATE MirrorServerCert, ENCRYPTION=REQUIRED,ROLE=ALL)
END 
GO







--=========================================================================================================
--在见证服务器上运行以下脚本
--=========================================================================================================
USE master;
GO
--=========================================================================================================
--创建Master key
IF NOT EXISTS(SELECT 1 FROM sys.symmetric_keys k WHERE k.Name='##MS_DatabaseMasterKey##')
BEGIN
CREATE MASTER KEY ENCRYPTION BY PASSWORD ='master@key'
END
GO
IF NOT EXISTS(SELECT 1 FROM sys.databases db WHERE db.[is_master_key_encrypted_by_server]=1)
BEGIN
ALTER MASTER KEY ADD ENCRYPTION BY SERVICE MASTER KEY
END
GO

--=========================================================================================================
--创建和备份证书
IF NOT EXISTS (SELECT 1 FROM sys.certificates C WHERE C.Name='WitnessServerCert' )
BEGIN
CREATE CERTIFICATE WitnessServerCert WITH SUBJECT ='Witness Server Cert'
END
GO
BACKUP CERTIFICATE WitnessServerCert TO FILE='D:\WitnessServerCert.cer'
GO

--=========================================================================================================
--创建镜像专用的端点,并使用证书加密
--同一个实例上只能存在一个镜像端点
IF NOT EXISTS(SELECT * FROM sys.endpoints e WHERE e.[Type]=4)
BEGIN
CREATE ENDPOINT DBMirrorEndPoint
STATE=STARTED AS
TCP(LISTENER_PORT=5024)
FOR DATABASE_MIRRORING(AUTHENTICATION=CERTIFICATE WitnessServerCert, ENCRYPTION=REQUIRED,ROLE=ALL)
END 
GO





--=========================================================================================================
--在主服务器上运行以下脚本
--=========================================================================================================
USE master;
GO
--=========================================================================================================
--使用镜像服务器备份出来的证书来为镜像服务器连接创建用户和证书,并使用证书为新用户授权
IF NOT EXISTS(SELECT 1 FROM sys.syslogins l WHERE l.[Name] ='MirrorServerLogin')
BEGIN
CREATE LOGIN MirrorServerLogin WITH PASSWORD ='Auto@sql'
END
GO
IF NOT EXISTS(SELECT 1 FROM sys.sysusers u WHERE u.[Name]= 'MirrorServerUser')
BEGIN
CREATE USER MirrorServerUser FOR LOGIN MirrorServerLogin
END
GO
IF NOT EXISTS(SELECT 1 FROM sys.certificates c WHERE c.[Name]= 'MirrorServerCert')
BEGIN
CREATE CERTIFICATE MirrorServerCert AUTHORIZATION MirrorServerUser FROM FILE='D:\MirrorServerCert.cer'
END
GO
GRANT CONNECT ON ENDPOINT::DBMirrorEndPoint TO MirrorServerLogin
GO
--=========================================================================================================
--使用见证服务器备份出来的证书来为见证服务器连接创建用户和证书,并使用证书为新用户授权

USE master;
GO
IF NOT EXISTS(SELECT 1 FROM sys.syslogins l WHERE l.[Name] ='WitnessServerLogin')
BEGIN
CREATE LOGIN WitnessServerLogin WITH PASSWORD ='Auto@sql'
END
GO
IF NOT EXISTS(SELECT 1 FROM sys.sysusers u WHERE u.[Name]= 'WitnessServerUser')
BEGIN
CREATE USER WitnessServerUser FOR LOGIN WitnessServerLogin
END
GO
IF NOT EXISTS(SELECT 1 FROM sys.certificates c WHERE c.[Name]='WitnessServerCert')
BEGIN
CREATE CERTIFICATE WitnessServerCert AUTHORIZATION WitnessServerUser FROM FILE='D:\WitnessServerCert.cer'
END
GO
GRANT CONNECT ON ENDPOINT::DBMirrorEndPoint TO WitnessServerLogin
GO






--=========================================================================================================
--在镜像服务器上运行以下脚本
--=========================================================================================================
--=========================================================================================================
--使用主服务器备份出来的证书来为主服务器连接创建用户和证书,并使用证书为新用户授权
USE master;
GO
IF NOT EXISTS(SELECT 1 FROM sys.syslogins l WHERE l.[Name] ='PrincipalServerLogin')
BEGIN
CREATE LOGIN PrincipalServerLogin WITH PASSWORD ='Auto@sql'
END
GO
CREATE USER PrincipalServerUser FOR LOGIN PrincipalServerLogin
GO
IF NOT EXISTS(SELECT 1 FROM sys.certificates c WHERE c.[Name]='PrincipalServerCert')
BEGIN
CREATE CERTIFICATE PrincipalServerCert AUTHORIZATION PrincipalServerUser FROM FILE='D:\PrincipalServerCert.cer'
END
GO
GRANT CONNECT ON ENDPOINT::DBMirrorEndPoint TO PrincipalServerLogin
--=========================================================================================================
--使用见证服务器备份出来的证书来为见证服务器连接创建用户和证书,并使用证书为新用户授权

USE master;
GO
IF NOT EXISTS(SELECT 1 FROM sys.syslogins l WHERE l.[Name] ='WitnessServerLogin')
BEGIN
CREATE LOGIN WitnessServerLogin WITH PASSWORD ='Auto@sql'
END
GO
IF NOT EXISTS(SELECT 1 FROM sys.sysusers u WHERE u.[Name]= 'WitnessServerUser')
BEGIN
CREATE USER WitnessServerUser FOR LOGIN WitnessServerLogin
END
GO
IF NOT EXISTS(SELECT 1 FROM sys.certificates c WHERE c.[Name]='WitnessServerCert')
BEGIN
CREATE CERTIFICATE WitnessServerCert AUTHORIZATION WitnessServerUser FROM FILE='D:\WitnessServerCert.cer'
END
GO
GRANT CONNECT ON ENDPOINT::DBMirrorEndPoint TO WitnessServerLogin 










--=========================================================================================================
--在见证服务器上运行以下脚本
--=========================================================================================================
--=========================================================================================================
--使用主服务器备份出来的证书来为主服务器连接创建用户和证书,并使用证书为新用户授权
USE master;
GO
IF NOT EXISTS(SELECT 1 FROM sys.syslogins l WHERE l.[Name] ='PrincipalServerLogin')
BEGIN
CREATE LOGIN PrincipalServerLogin WITH PASSWORD ='Auto@sql'
END
GO
CREATE USER PrincipalServerUser FOR LOGIN PrincipalServerLogin
GO
IF NOT EXISTS(SELECT 1 FROM sys.certificates c WHERE c.[Name]='PrincipalServerCert')
BEGIN
CREATE CERTIFICATE PrincipalServerCert AUTHORIZATION PrincipalServerUser FROM FILE='D:\PrincipalServerCert.cer'
END
GO
GRANT CONNECT ON ENDPOINT::DBMirrorEndPoint TO PrincipalServerLogin
GO
--=========================================================================================================
--使用镜像服务器备份出来的证书来为镜像服务器连接创建用户和证书,并使用证书为新用户授权
USE master;
GO
IF NOT EXISTS(SELECT 1 FROM sys.syslogins l WHERE l.[Name] ='MirrorServerLogin')
BEGIN
CREATE LOGIN MirrorServerLogin WITH PASSWORD ='Auto@sql'
END
GO
IF NOT EXISTS(SELECT 1 FROM sys.sysusers u WHERE u.[Name]= 'MirrorServerUser')
BEGIN
CREATE USER MirrorServerUser FOR LOGIN MirrorServerLogin
END
GO
IF NOT EXISTS(SELECT 1 FROM sys.certificates c WHERE c.[Name]= 'MirrorServerCert')
BEGIN
CREATE CERTIFICATE MirrorServerCert AUTHORIZATION MirrorServerUser FROM FILE='D:\MirrorServerCert.cer'
END
GO
GRANT CONNECT ON ENDPOINT::DBMirrorEndPoint TO MirrorServerLogin
GO









--=========================================================================================================
--在主服务器上运行以下脚本
--=========================================================================================================
--=========================================================================================================
--修改数据库恢复模式
-USE [master]
GO
ALTER DATABASE [Demo1] SET RECOVERY FULL WITH NO_WAIT
GO
--=========================================================================================================
--备份数据库
BACKUP DATABASE [Demo1] 
TO  DISK = N'D:\Demo1.bak' WITH NOFORMAT, NOINIT,
NAME = N'Demo1-Full Database Backup', SKIP, NOREWIND, NOUNLOAD,  STATS = 10
GO








--=========================================================================================================
--在镜像服务器上运行以下脚本
--=========================================================================================================
--=========================================================================================================
--使用NORECOVERY来恢复数据库
USE [master]
GO
RESTORE DATABASE [Demo1] 
FROM  DISK = N'D:\Demo1.bak' WITH  FILE = 1,  
MOVE N'Demo1' TO N'D:\Mirror\Demo1.mdf', 
MOVE N'Demo1_log' TO N'D:\Mirror\Demo1_Log.LDF',  
NORECOVERY,  NOUNLOAD,  STATS = 10
GO
--=========================================================================================================
--设置PARTNER
USE [master]
GO
ALTER DATABASE Demo1 SET PARTNER='TCP://192.168.1.102:5022'







--=========================================================================================================
--在主服务器上运行以下脚本
--=========================================================================================================
--=========================================================================================================
--设置PARTNER
USE [master]
GO
ALTER DATABASE Demo1 SET PARTNER='TCP://192.168.1.102:5023'
GO





--=========================================================================================================
--其他脚本
--=========================================================================================================

--=========================================================================================================
--添加见证服务器
USE [master]
GO
ALTER DATABASE Demo1 SET WITNESS='TCP://192.168.1.102:5024'
GO



--=========================================================================================================
-移除见证服务器
USE [master]
GO
ALTER DATABASE Demo1 SET WITNESS OFF
GO

--=========================================================================================================
--修改高性能
USE [master]
GO
ALTER DATABASE Demo1 SET PARTNER SAFETY OFF
GO

--=========================================================================================================
--修改为高安全
USE [master]
GO
ALTER DATABASE Demo1 SET PARTNER SAFETY FULL
GO


--=========================================================================================================
--在高安全下手动转移镜像(在主服务器上)
USE [master]
GO
ALTER DATABASE Demo1 SET PARTNER FAILOVER
GO



--=========================================================================================================
--在高性能下手动转移镜像(在从服务器上),此时主服务器已停止
USE [master]
GO
ALTER DATABASE Demo1 SET PARTNER FORCE_SERVICE_ALLOW_DATA_LOSS
GO


--=========================================================================================================
--此时主服务器停止后又重启时,主服务器会被挂起,使用以下SQL来恢复镜像
USE [master]
GO
ALTER DATABASE Demo1 SET PARTNER RESUME
GO


--=========================================================================================================
--关闭镜像
USE [master]
GO
ALTER DATABASE Demo1 SET PARTNER OFF
GO


--=========================================================================================================
--将数据库从还原状态转化成正常模式
USE [master]
GO
RESTORE DATABASE Demo1 WITH RECOVERY
GO

 

posted on 2012-11-08 00:24  笑东风  阅读(284)  评论(0编辑  收藏  举报

导航