SQLServer 数据库镜像+复制切换方案
目标: ? ? ? 主机做了Mirror和Replication,当主机出现问题时,Replication和Mirror实现自动的故障转移(Mirror?和Replication都切换到备机,而当主机 ? ? ? ?重新启动后,自动充当备机的角色)。 ? 环境: ??????????五台虚拟机,配置均为Windows2008?Enterprise + SQLServer2008R2 Enterprise ????????? 08R201:Mirror?见证机(WITNESS) ? ? ? ? ? IP:192.168.56.101 ????????? 08R202:主机(Rep+Mirror)? ? ? ? ? ? ? ? ? IP:192.168.56.102 ????????? 08R203:Rep分发机?????????????????????????????? IP:192.168.56.103 ????????? 08R204:Rep订阅机?????????????????????????????? IP:192.168.56.104 ????????? 08R205:镜像机(Mirror)? ? ? ? ? ? ? ? ? ? ? ?IP:192.168.56.105 ? 步骤: 配置有见证服务器的镜像
? ? ?08R202(Master)?上运行下面的脚本: --主机执行: USE master; CREATE MASTER KEY ENCRYPTION BY PASSWORD = '123456abc'; CREATE CERTIFICATE HOST_A_cert WITH SUBJECT HOST_A certificate',START_DATE 11/08/2010',EXPIRY_DATE 10/31/2099'; CREATE ENDPOINT Endpoint_Mirroring STATE = STARTED AS TCP ( LISTENER_PORT=5022,LISTENER_IP = ALL ) FOR DATABASE_MIRRORING ( AUTHENTICATION = CERTIFICATE HOST_A_cert,ENCRYPTION = REQUIRED ALGORITHM AES,ROLE ALL ); 主机执行: BACKUP CERTIFICATE HOST_A_cert TO FILE D:HOST_A_cert.cer'; ? ? ? 08R205(Mirror)?上运行下面的脚本: 备机执行: CREATE CERTIFICATE HOST_B_cert HOST_B certificate= CERTIFICATE HOST_B_cert,255)">BACKUP CERTIFICATE HOST_B_cert D:HOST_B_cert.cer';? ? ? 08R201(WITNESS)?上运行下面的脚本: 见证机执行 USE master; '; CREATE CERTIFICATE HOST_W_cert HOST_W certificateCREATE ENDPOINT Endpoint_Mirroring STATE = STARTED AS TCP ( LISTENER_PORTALL ) FOR DATABASE_MIRRORING ( AUTHENTICATION = CERTIFICATE HOST_W_cert,255)">BACKUP CERTIFICATE HOST_W_cert D:HOST_W_cert.cer
? ? ?将HOST_B_cert.cer和HOST_W_cert.cer拷贝到?08R202?机器的”D:Cert“目录; ? ? ?将HOST_A_cert.cer和HOST_W_cert.cer拷贝到?08R205?机器的”D:Cert“目录; ? ? ?将HOST_A_cert.cer和HOST_B_cert.cer拷贝到?08R201?机器的”D:Cert“目录; ? Master CREATE LOGIN HOST_B_login WITH PASSWORD 123abc!@#CREATE USER HOST_B_user FOR LOGIN HOST_B_login; AUTHORIZATION HOST_B_user FROM D:CertHOST_B_cert.cerGRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [HOST_B_login]; CREATE LOGIN HOST_W_login USER HOST_W_user FOR LOGIN HOST_W_login; AUTHORIZATION HOST_W_user D:CertHOST_W_cert.cerHOST_W_login]; ? ? ?08R205(Mirror)?上运行下面的脚本: Mirror CREATE LOGIN HOST_A_login USER HOST_A_user FOR LOGIN HOST_A_login; AUTHORIZATION HOST_A_user D:CertHOST_A_cert.cerHOST_A_login ? ? ?08R201(WITNESS)?上运行下面的脚本: WITNESS? ? ?08R202(Master)?上备份数据库: BACKUP DATABASE RepTest DISK=D:tempRepTest.bak' BACKUP LOG RepTest D:tempRepTest.trn' ? ? ?将备份文件拷贝到?08R205(Mirror)?上做还原(最好以SA帐号登录,使得数据库所有者为”SA“): RESTORE RESTORE FROM DISK = ND:RepTest.bak' WITH 1,MOVE NRepTest' TO ND:DataRepTest.mdfRepTest_logD:DataRepTest_log.ldf10 GO RESTORE D:RepTest.trnWITH NORECOVERY ? ? ? 在08R205(Mirror)?上执行: ALTER SET PARTNER TCP://192.168.56.102:5022'; ? ? ?在?08R202(Master)上执行: TCP://192.168.56.105:5022SET WITNESS TCP://192.168.56.101:5022SET SAFETY FULL? ? ?到此,镜像已经建立完成。 配置Replication(事务型复制) ? ? ?Replicaiton不做具体的搭建过程,只做几点说明: ? ? ?1. ?08R202和08R205都需要搭建到08R203的Distribution; ? ? ?? ? ? ?2. ?08R202和08R205上的发布库的所有者必须为“SA”,否则切换会出现如下错误:The process could not execute 'sp_replcmds' on 'WIN-08R205'. ? ? ?3. ?08R203分发机上配置文件需要做如下修改(配置故障转移Partner): 配置复制故障转移参数 查看代理配置,在分发服务器运行 exec sp_help_agent_profile Agent_Type含义 1 = Snapshot Agent; 2 = Log Reader Agent; 3 = Distribution Agent; 4 = Merge Agent; 9 = Queue Reader Agent. 对于事务复制,需查看Agent_Type=1,2的Profile_id 对于事务复制,需要配置快照代理(Snapshot Agent)和日志读取代理(Log Reader Agent) exec sp_add_agent_parameter @profile_id @parameter_name -PublisherFailoverPartner@parameter_value WIN-08R205'镜像服务器名称 2,128)">镜像服务器名称? ? ? ?修改完成后,记得重启Agent服务,使之生效。 ? ? ? 4. ?从08R202创建到08R204的同步链。 模拟故障转移并观察结果 ? ? ?1. ?暂停08R202的SQLServer服务; ? ? ?2. ?到08R205上观察镜像和同步链是否转移过去了; ? ? ?? ? ? ? 3. ?如果同步链正常,修改某个表中的数据,看是否能同步到08R204上; ? ? ? 4. ?重新启动08R202的SQLServer服务,看其是否成为了镜像机; ? ? ??
C# 连结镜像服务器连结 Data Source=192.168.0.139;Failover Partner0.140DataBase=mydbUser ID=saPassword; ?sp_addlogin? @loginame ? = ? ' <LoginName> ' ,? 4 @passwd <Password> 5 @sid < sid > ?; 6 这里的’LoginName’即主数据库中的登录名,sid即是上述通过SQL语句查找出的sid。 例如,查询得到的sid和name如下所示。 ? ? sid?name-- --------------------------------?----------------- 7 则建立登录名的SQL语句: cz_account password ; 到此为止可以认为备机数据库的环境已经与主机同步了,还差数据库内的数据未同步。 1、主备互换 --主机执行: [sql] view plaincopy USE master; ? ?? ALTER DATABASE <DatabaseName> SET PARTNER FAILOVER; ? ? 2、主服务器Down掉,备机紧急启动并且开始服务 --备机执行: [sql] view plaincopy USE master; ? ?? ALTER DATABASE <DatabaseName> SET PARTNER FORCE_SERVICE_ALLOW_DATA_LOSS; ? ? 3、原来的主服务器恢复,可以继续工作,需要重新设定镜像 --备机执行: [sql] view plaincopy USE master; ? ?? ALTER DATABASE <DatabaseName> SET PARTNER RESUME; --恢复镜像 ? ?? ALTER DATABASE <DatabaseName> SET PARTNER FAILOVER; --切换主备 ? ? 4、原来的主服务器恢复,可以继续工作 --默认情况下,事务安全级别的设置为 FULL,即同步运行模式,而且SQL Server 2005 标准版只支持同步模式。 --关闭事务安全可将会话切换到异步运行模式,该模式可使性能达到最佳。 [sql] view plaincopy USE master; ? ?? ALTER DATABASE <DatabaseName> SET PARTNER SAFETY FULL; --事务安全,同步模式 ? ?? ALTER DATABASE <DatabaseName> SET PARTNER SAFETY OFF; --事务不安全,异步模式 ?? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |