13.4 故障转移

13.4.1 故障定位

在前几节明确的提及到,日志传送由三个基本的作业组成:备份作业、复制作业和还原作业。通过上一节日志传送监控功能来定位哪一个作业出了问题:

如果备份作业出了问题,检查主服务器状态。

如果还原作业出了问题,检查辅助服务器状态;或者辅助数据库处于STANDBY模式时用户正在使用辅助数据库。

如果复制作业出了问题,检查除了辅助服务器状态外,还需要检查网络状态。

13.4.2 故障转移

日志传送的故障转移除了考虑切换技术操作以外,更需要考虑主服务器和辅助服务器之间的各类依赖的对象和基础环境是否一致。

1. 同步依赖对象

基于业务连续性需求,数据库系统的高可用性解决方案必须允许在当前的主数据库和辅助数据库之间能够切换。日志传送技术也是数据库高可用性解决方案之一,但是日志传送是数据库级别的,它不会传送在被传送的数据库之外的对象。例如,存储在master数据库中的SQL Server登陆名和存储在MSDB中的SQL作业,以及其他所依赖的对象。

提示:

建议通SSIS包来传送依赖对象,配合SQL作业定期执行以保证主服务器和辅助服务器的依赖对象能够同步,以避免在故障转移期间辅助服务器因缺少这些依赖对象也变得不可用。

2. 故障转移

当主服务器出现故障变为不可用,切换辅助服务器担当主服务器角色。在主服务器故障发生后,SQL代理上的复制作业和还原作业可能还未将最近的事务日志备份复制并还原到辅助服务器上。尽可能的同步辅助服务器,保证业务数据在故障期间丢失最少。手动转移步骤如下:

(1)利用“标准报表”“事务日志传送”查看主服务器故障发生后还未复制和还原的日志备份;

(2)手动复制事务日志备份到辅助服务器,并和在NORECOVERY模式下将事务日志备份还原到辅助数据库;

这个时候辅助服务器已经可以担当主服务器对外可用。

提示:

(1) 使用norecovery模式还原辅助数据库,使其可用;更重要的是日志传送的故障转移只能手动执行。

(2) 待原主服务器故障修复后,可以使用以原辅助服务器作为主服务器,原主服务器作为辅助服务器重建日志传送;操作步骤按照13.2.3章节。

3. 客户端重定向连接到辅助服务器

故障转移以后需要把客户端重新定向到辅助服务器,并且尽可能的减少终断用户的操作,一般来说有以下方式:

应用程序代码 在应用程序中开发自动感知故障的功能,逻辑上首先连接主服务器,如果主服务器不可用,通过应用程序自动或者手动连接辅助服务器。

网络负载均衡(NLB)通过网络负载均衡或者类似的硬件解决方案,一旦故障发生需要手动或者使用脚本将在NORECOVERY模式下还原后辅助服务器添加到网络负载均衡器上,网络负载均衡会自动将应用程序重定向到辅助服务器。

域名服务(DNS) DNS提供名称到IP地址的映射。一旦主服务器发生故障,只需要更改名称对应的IP地址为辅助服务器的IP地址,便可将客户端的数据库请求重定向到辅助服务器。

SQL客户端别名 主数据库故障修改SQL Native Client中SQL 客户端别名可将客户端的数据库请求重新定向到辅助服务器;假如有大量的客户端需要修改则这个方式不一定实用。如果客户端是通过Web或者应用程序服务器来连接数据库服务器,只需要修改Web或者应用程序服务器上的SQL客户端别名,所有的客户端就重定向到辅助服务器

13.5 删除日志传送

13.5.1 通过Management Studio删除日志传送

通过Management Studio删除日志传送步骤如下:

1.打开主服务器SQLSVR1中作为日志传送的主数据库DB01的属性页面,,然后选择“事务日志传送”;取消“将此数据库启用为日志传送配置中的主数据库(E)”复选框。

p_w_picpath

2.在弹出的数据库属性界面,单击“是”;

p_w_picpath

3.单击“确定”;

p_w_picpath

4.等待删除日志传送配置完成,单击“关闭”;完成删除日志传送。

p_w_picpath

 

13.5.2 通过T-SQL删除日志传送

1.在主服务器上运行以下命令删除主服务器sqlsvr1上msdb.dbo.log_shipping_primary_secondaries表中有关辅助服务器sqlsvr2的信息:

Use master;
go
sp_delete_log_shipping_primary_secondary db01,sqlsvr2,db01;

2.在辅助服务器sqlsvr2上运行以下命令删除辅助服务器sqlsvr2上有关辅助服务器sqlsvr2的信息和复制和还原作业:

Use master;
go
sp_delete_log_shipping_secondary_database db01;

3. 在日志传送主服务器上,执行以下命令以删除有关主服务器的日志传送配置的信息。 此操作还将删除备份作业。

Use master;
go
sp_delete_log_shipping_primary_database DB01;

4.在日志的监视服务器上,执行以下命令删除监视日志传送的警报作业。

USE master;
GO
sp_delete_log_shipping_alert_job;

 

小结

日志传送是简单的,廉价和可靠的SQL Server高可用性解决方案,可保留较长时间的跟踪记录。作为灾难恢复解决方案,可以部署在远程,通过维护一台辅助服务器来缓解局部灾难、电网故障和网络故障造成的影响,以便提供业务连续性。日志传送可以把事务日志传送到世界上的任何地方,唯一的限制是及时传输事务日志所需要的网络带宽。