用SQL Server事务日志轻松删除常见故障(下)

日期: 2009-03-18 作者:彭芬 来源:TechTarget中国 英文

  另外也可以通过数据库镜像方案中来解决生产服务器与备用服务器之间的数据同步问题。生产数据库的每次更新都在独立的、完整的备份数据库中立即重新生成。主体服务器实例立即将每个日志记录发送到镜像服务器实例,镜像服务器实例将传入的日志记录应用于镜像数据库,从而将其继续前滚。“数据库镜像”是用于提高数据库可用性的首选软件解决方案。镜像基于每个数据库实现,并且只适用于使用完整恢复模式的数据库。简单恢复模式和大容量日志恢复模式不支持数据库镜像。因此,所有大容量操作始终被完整地记入日志。数据库镜像可使用任意支持的数据库兼容级别。在“数据库镜像模式”中,主体服务器和镜像服务器作为伙伴进行通信和协作。两个伙伴在会话中扮演互补的角色:主体角色(生产服务器)和镜像角色(备份服务器)。在任何给定的时间,都是一个伙伴扮演生产服务器角色,另一个伙伴扮演备用服务器角色。如果生产服务器角色出现故障时,则备份服务器角色马上会顶替出现故障的生产服务器角色,转变为生产服务器角色。从而实现数据库的高可用性。

  数据库镜像方案有两种镜像运行模式。一种是“高安全性模式”,它支持同步操作。在高安全性模式下,当会话开始时,镜像服务器将使镜像数据库尽快与主体数据库同步,一旦同步了数据库,事务将在伙伴双方处提交,这会延长事务滞后时间。第二种运行模式,即高性能模式,它与第一种模式的主要差异就在于异步运行。镜像服务器尝试与主体服务器发送的日志记录保持同步。镜像数据库可能稍微滞后于主体数据库。但是,数据库之间的时间间隔通常很小。但是,如果主体服务器的工作负荷过高或镜像服务器系统的负荷过高,则时间间隔会增大。在高性能模式中,主体服务器向镜像服务器发送日志记录之后,会立即再向客户端发送一条确认消息。它不会等待镜像服务器的确认。这意味着事务不需要等待镜像服务器将日志写入磁盘便可提交。此异步操作允许主体服务器在事务滞后时间最小的条件下运行,但可能会丢失某些数据。具体采用哪种模式,则需要数据库管理员根据企业对待数据损失的态度与工作负荷等来确定。

  可见现在可用的备份服务器与生产服务器之间的数据同步解决方案都是基于事务日志来实现的。

  故障三:解决数据一致性问题。

  假设现在有这么一种情况。在一个银行系统中,某个用户需要转帐。这个转帐作业主要是通过两个步骤来完成。第一个步骤就是扣减用户帐户中的金额; 第二个步骤是把钱转入到另外一个用户那里。现在如果在转帐的过程中,第一步成功了,但是第二个步骤因为某种原因出错了。如用户提供的帐户名字与实际转帐的帐户名字不符,则第二个操作就会失败。此时整个转帐操作就会以失败而告终。但是现在的问题是,第一个扣减的动作在数据库zhon给已经完成了。而实际却是没有转帐成功,就救造成了数据一致性的问题。

  实际过程中如果应用程序发出 ROLLBACK 语句,或者数据库引擎检测到错误,就使用日志记录回滚未完成的事务所做的修改。也就是说,当第二个操作失败的话,应用程序要发出一个ROLLBACK 语句,利用事务日志回滚功能,恢复第一步的操作。也就是说,把扣减金额的操作进行恢复,从而实现数据的一致性。类似的应用,在数据库开发过程中很频繁。

  故障四:数据库时点恢复的问题。

  如现在遇到这么一种故障。数据库系统在上午11点突然发现故障,启动不起来了。而数据库系统是在昨天晚上12点刚做完一个完全备份。在这种情况下,如果只是从完全备份中恢复数据的话,只能够恢复到昨天晚上12点的数据。那从昨天晚上12点到今天上午11点的数据就不能够恢复了吗?

  其实不然。因为用户在对数据库做的任何一个修改都会保存在事务日志当中。为此只要事务日志不损坏的情况下,数据库管理员可以把数据恢复到上午 11点那个时刻的数据。具体的操作方法很简单,就好先利用完全备份文件恢复数据库系统,此时数据库中的数据位昨天晚上12点的数据。然后再利用日志恢复功能把数据恢复到今天上午11点的数据。可见事务日志可以帮助管理员把数据恢复到某一个具体的时点。

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

相关推荐