zoukankan      html  css  js  c++  java
  • SQL NoteMirror

    --=========================================================================================================
    --在主服务器上运行以下脚本
    --=========================================================================================================
    
    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
  • 相关阅读:
    微信验证代码
    微信内置浏览器的JS API
    伪类和伪元素
    asp.net core mvc 脚手架搭建过程介绍
    C#无锁内存队列
    关于微软OWIN的一篇好文章
    安装了Win10预览版10074,不能设置开发模式的bug解决
    关于Quartz的一些经历
    MEF接口应用初探
    简单的接口框架
  • 原文地址:https://www.cnblogs.com/TeyGao/p/2759730.html
Copyright © 2011-2022 走看看