SQL Server 2012实施与管理实战指南
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

2.1 什么是SQL Server的“高可用性”与“灾难恢复”

作为一个数据库服务,SQL Server其实可以分成两个部分:

1.SQL Server服务本身

SQL作为一个应用服务主要用来接受用户的连接,处理用户发过来的各项请求等。这部分功能是由一组安装在Windows上的可执行文件来提供的。如果这部分出问题,就需要恢复Windows系统、网络连接、SQL Server的可执行文件及SQL的一切相关配置。如何能保证这部分的正常运行,在系统故障时能够快速恢复是非常重要的。

2.存储的数据(数据库)

SQL Server将其处理和存储的数据以文件的形式存储在硬盘上。SQL可执行程序需要访问这些文件,才能访问到数据。如果数据文件发生损坏,管理员需要将文件里的内容恢复到“正确”的状态。当SQL Server的数据库文件达到几百GB,甚至上TB时,在磁盘上完全恢复这么大的数据量是相当耗时的,所以一定需要使用相关技术来减少数据恢复时间。

而一个服务的生命周期是怎样的呢?对SQL来讲它有两种状态:

1.在线

SQL Server服务正常运行,数据库文件也可以被正常读写。这时候用户可以正常使用SQL Server服务。每个数据库管理员都希望这个状态维持得越长越好。

2.宕机

也就是SQL Server由于用户连接无法建立,或者由于SQL服务的可执行文件不能正常运行,也因为数据库文件不能被正常读写,而产生的宕机时间。严格来讲,宕机时间分为两个阶段:

(1)离线

从服务发生宕机问题到被管理员发现并开始采取措施恢复服务之前。

(2)修复

管理员修复SQL Server服务所需要的时间。

所以可以得到如下公式,如图2-1所示。

图2-1 数据库服务的可用时间

数据库服务的可用时间=在线时间/(在线时间+宕机时间)

这样分析很有意思,读者可以得到这样一个事实:

为了降低宕机时间,管理员可以通过:

1.努力让系统从来不宕机或极少出现宕机事故,或者

2.能够很快地从宕机事故中恢复。也就是说,要能够很快发现SQL Server离线,并且能够快速地修复服务。

提高服务可用性的种种技术和方案都是围绕着这两点来设计的。

讨论数据库系统的持续可用还需要区分两个概念:“高可用性”和“灾难恢复”。

“高可用性”(High Availability,HA)指的是数据库服务能够始终保持在线运行。在数据库系统中的某台服务器发生任何软件和硬件的故障时,还可以保持数据库服务不宕机,或者尽量缩短停机时间(Downtime)。换句话说,“高可用性”技术主要关心的是SQL Server服务本身,它要努力保证在任何一个时间点客户端都能够找到一个SQL Server服务来响应它们的请求。

“灾难恢复”(Disaster Recovery,DR)指的是当数据库中的数据发生损坏或者不可访问时,可以在尽可能短的时间恢复全部数据或者恢复尽可能多的数据,从而保证应用系统的正常运行。有时灾难恢复简称“灾备”。“灾难恢复”是要保证数据库里的数据始终可用。理想情况下,假使一份数据因为火灾、地震这样的灾难而损毁,管理员也要能够很快地准备好第二份数据,供SQL Server服务使用。

“高可用性”和“灾难恢复”的概念非常接近,在很多文档中它们都被彼此互相涵盖了。本书倾向于将两者的概念区别开来:“高可用性”针对的是软件或硬件问题造成的数据库系统不可用;而“灾难恢复”针对的是保存在数据库系统中的数据不可用。这两者同等重要。例如,用户经常使用的群集技术,它可以在一台服务器发生问题时自动将SQL Server服务切换到另一台服务器上,从而使宕机时间缩短到几分钟甚至更短,所以它是一个广泛使用的“高可用性”技术。但是,如果数据库存储的磁盘发生损坏,群集的SQL还是不能使用。这时,需要有相应的“灾难恢复”技术来帮助用户快速恢复数据库中的数据,从而快速恢复SQL Server服务。

SQL Server所提供的各种技术有些针对于“高可用性”、有些针对于“灾难恢复”、有些对两者都有帮助,所以用户需要清楚地看到各种SQL Server技术所针对的不同目标,然后根据自己的实际需求选择最适合自己的方案。在本章接下来内容中,我们会逐个介绍SQL Server各种传统的“高可用性”和“灾难恢复”技术。