镜像的知识点与注意事项
重新安装EduBase
例1.1:分别在主体服务器、镜像服务器上创建端点
IF EXISTS (SELECT 1 FROM sys.database_mirroring_endpoints AS E DROP ENDPOINT ep_EduBase_Mirroring; GO CREATE ENDPOINT ep_EduBase_Mirroring STATE=STARTED // 端点将立即启动 AS TCP(LISTENER_PORT=5022) //监听TCP端口 FOR DATABASE_MIRRORING (AUTHENTICATION=WINDOWS NEGOTIATE //身份验证方式设为Windows协商(即在NTLM和KERBEROS之间选择) ,ENCRYPTION=SUPPORTED //若通信端点支持加密,则镜像过程使用加密 ,ROLE=PARTNER); PARTNER //角色用于主体/镜像服务器;WITNESS角色用于见证服务器;
例1.2:通过完整备份、日志备份(若有必要)、还原,将数据库从主体服务器复制到镜像服务器上
DECLARE @FullBkDesc VARCHAR(MAX); SELECT @FullBkDesc = ‘Full backup on principal server for database mirroring at ‘+CONVERT(VARCHAR,GETDATE(),120)+‘.‘; BACKUP DATABASE EduBase2017 TO DISK=‘C:\EduBase2017\Mirroring\EduBase_FullBackup_ForMirroring.bak‘ WITH INIT ,Name = ‘EduBase_FullBackup‘ ,DESCRIPTION = @FullBkDesc; //完整备份 GO DECLARE @LogBkDesc VARCHAR(MAX); SELECT @LogBkDesc = ‘Log backup on principal server for database mirroring at ‘+CONVERT(VARCHAR,GETDATE(),120)+‘.‘; BACKUP LOG EduBase2017 TO DISK=‘C:\EduBase2017\Mirroring\EduBase_LogBackup_ForMirroring.bak‘ WITH INIT ,Name = ‘EduBase_LogBackup‘ ,DESCRIPTION = @LogBkDesc; //日志备份:若在完整备份后,主体服务器的数据库发生更改,则需进一步备份、还原日志,以便保持日志链完整 //为便于镜像服务器访问主体服务器的备份文件,可在cmd控制台将备份文件所在位置设为共享。 RESTORE HEADERONLY FROM DISK=‘\\WinSvr-1\EduBase2015Mirroring\EduBase2015_FullBackup_ForMirroring.bak‘; 镜像服务器通过统一命名约定(UNC)地址访问主体服务器中的备份文件 RESTORE DATABASE EduBase2015 FROM DISK = ‘\\WinSvr-1\EduBase2015Mirroring\EduBase2015_FullBackup_ForMirroring.bak‘ WITH FILE = 1 ,REPLACE ,NORECOVERY; 从完整备份中还原 GO RESTORE HEADERONLY FROM DISK= ‘\\WinSvr-1\EduBase2015Mirroring\EduBase2015_LogBackup_ForMirroring.bak‘; RESTORE DATABASE EduBase2015 FROM DISK=‘\\WinSvr-1\EduBase2015Mirroring\EduBase2015_LogBackup_ForMirroring.bak‘ WITH FILE = 1 ,NORECOVERY; // 从日志备份中还原 最后一步备份务必指定非还原状态,以确保镜像服务器的数据库不可用 //镜像数据库已包含主体数据库中的数据库用户,但镜像服务器未包含映射至这些数据库用户的登录,故需另行创建
例1.3:分别在镜像服务器、主体服务器的相应数据库上启动镜像会话
ALTER DATABASE EduBase2015 SET PARTNER=‘TCP://WINSVR-1.EDUBASE.COM:5022‘; //在镜像服务器的数据库上,设置主体服务器的完整域名、监听端点 ALTER DATABASE EduBase2015 SET PARTNER=‘TCP://WINSVR-2.EDUBASE.COM:5022‘; //在主体服务器的数据库上,设置镜像服务器的完整域名、监听端点 ALTER DATABASE EduBase2015 //在主体服务器中设置镜像安全性 SET SAFETY FULL; //完整安全性:主体服务器的数据库中的事务在提交前,必须同步写入镜像服务器的数据库若设为OFF,则允许异步写入,可能导致丢失 ALTER DATABASE EduBase2015 //在主体服务器中设置镜像安全性 SET SAFETY FULL; //在客户端的ADO.Net的连接字符串中,增加Failover Partner=镜像服务器名,ADO.Net将自动重定向服务器
例2.1:在主体服务器的数据库中修改数据
USE EduBase2015; UPDATE Course SET Name=‘计算机导论(1)‘ WHERE Name=‘计算机导论‘; UPDATE Course SET Name=‘C语言程序设计(2)‘ WHERE Name=‘C语言程序设计‘; //亦可在客户端中进行操作
例2.2:假设发生故障,此时在主体服务器上手动设置故障转移,从而切换主体服务器、镜像服务器的角色
ALTER DATABASE EduBase2015
SET PARTNER FAILOVER;
例2.3:在当前的主体服务器(即先前的镜像服务器)的数据库中检查数据是否一致,随后修改数据
USE EduBase2015; SELECT * FROM Course; UPDATE Course SET Name=‘VB语言程序设计(3)‘ WHERE Name=‘VB语言程序设计‘; //亦可在客户端中进行操作
例2.4:假设主体服务器的数据库遇到大量数据写入,此时挂起镜像会话,随后继续镜像会话
ALTER DATABASE EduBase2015
SET PARTNER SUSPEND;
ALTER DATABASE EduBase2015
SET PARTNER RESUME;
例2.5:当前的镜像服务器(即先前的主体服务器)已排除故障,此时在当前的主体服务器(即先前的镜像服务器)上手动设置故障转移,从而切换主体服务器、镜像服务器的角色,随后检查数据是否一致
ALTER DATABASE EduBase2015 SET PARTNER FAILOVER; USE EduBase2013; SELECT * FROM tb_Course;
例3.1:停止镜像会话
ALTER DATABASE EduBase2015
SET PARTNER OFF;