通常我们有一种概念,认为影响数据库可用性的因素,比如有它崩溃了或者是受硬件的一些影响,或者有其他的因素会影响到数据库的可用性。
微软希望达到的目标,就是高可用性,具体指所有的数据、所有的用户他们所需要的任何操作都能够为他们提供这种服务。我会给您一些例子,在SQL Server 2005中的一些特性,这些特性和功能是如何显著的改善了SQL Server的高可用性。
第一个是关于索引的一些操作,指生成或者是维护索引的一些操作。通常以前,你如果需要重建一个索引,或者是维护一个索引时,你都需要把整个表锁起来。在以前,我们需要重建索引时,任何对于表上的变化,任何更新都必须将它暂时停止下来,这是以前的要求,不能够再允许这样的事情发生了。所以在SQL Server 2005中,我们推出了两种新特性,一个是在线索引构建以及在线索引维护。这两个方面所提供的功能就是在索引重建时,对于下面的表,用户仍然可以继续进行他们的操作和更改,而不会像以前一样被阻止。这一功能对于一些很大的表是非常有意义的,因为通常来讲,重建一个索引是需要花很长时间的。这种在线索引重建,不需要把用户排斥在外,对于改善表的可用性有巨大的帮助,特别是当这个表很大的时候。
第二个特性功能是表的分区,就是能够减少用户不能使用表的时间,这是改善这个表可用性。表的分区特性功能允许在表上删除一个分区时,只需要毫秒数量计的时间。在这个功能没有之前,你需要删除很多条记录的话,需要用delete的操作,通常会使这个表上的锁升级。我解释一下,因为通常你这个锁是按照每条记录,或者是按照整个表、整个区段来进行锁定,当你要删除很多记录的时候,用户并不需要定义用什么样的锁,SQL Server自己会决定这件事情。但是你如果删除很多条记录的话,数据库的引擎就会出来,对于每条记录我可以分别设定一个锁,但这不是一件高效的事情,所以它会把这个锁升级成整个表的锁,这就使得其他用户不能对这个表进行一些更新的操作。
第三个对于高可用性的改善,就是当你去备份一个数据库时,你可以只选择备份某一个文件组,而不是一定要备份整个数据库。一旦有什么不测时,数据库坏了,你需要对它进行恢复时,你可以选择最重要的文件组对它首先进行恢复,使得这个文件组,用户马上可以使用,在用户已经可以用的时候,你再对其他的那些不太重要的文件组进行继续恢复。使得你整个数据库不可用的时间显著减少。同时,还有更多的例子,是关于改善可用性的。这些是非常非常重要的可用性方面的一些功能。
总结一下,重点是三个特性,第一个是在线索引操作,可以重建、维护。第二是可以进行表的分区。第三是当你做备份时,可以选择某个或者某些个文件组进行备份,这样当你将来一旦宕机时,你对数据库进行恢复时,你可以选择你认为最重要的文件组先进行恢复,当恢复完之后用户马上可以使用。
另外,从微软的角度来说,影响高可用性最多的是我们个人的一些看法和讨论中的意见。其中最重要的是系统管理方面的问题。比如说我们日常运维过程中更新安装、索引重建,会直接影响到高可用性,大家都有这方面的经验。这是最重要的内容。第二个是可用性的逻辑错误,用户的应用带来的逻辑性错误。如果是我们的设计不好,或者是用户使用过程中操作不当,也会影响到我们数据库的应用。第三很可能是软件和硬件的失败,在我们使用过程中,长时间的硬件故障发生,或者是软件的错误,因为软件都是人制造的都有这样那样的问题。再就是意外的自然灾害。
刚才讲的这几大方面的问题,结合上面介绍的微软是如何应对这些因素的,微软是提供了很好的细分技术来帮助我们的系统DBA和相应设计人员、管理人员提高系统的可用性。
【编后】前面提到的系统管理方面的一些要求,系统的安装、索引重建、系统恢复时间,微软提供了相应的技术来帮助管理人员提高系统可用性。但总的一句话,系统可用性不单单是一个软件技术的问题,更多的是和管理相结合的问题。所以微软是使用最先进的数据库技术来帮助我们的DBA、管理人员解决这个问题。
企业中如何提高数据库或者是应用系统的高可用性?我们相应的DBA和管理人员首先应该做好的是要有一个比较好的系统管理计划和相应的工作。如何实现这个系统管理计划,我们可以选择不同的软硬件产品共同支撑这个高可用性。