Microsoft® SQL Server™ 2005 已经证明能满足客户的高可用性要求,而且提供此功能的成本要比 Oracle 10g 低很多。SQL Server 2005 在 SQL Server 2005 Standard Edition 和 SQL Server 2005 Enterprise Edition 中均提供了所有主要的高可用性功能,如 Microsoft Clustering Services 支持、Database Mirroring、数据库快照、日志传送和复制等,无需额外的资金投入。
Oracle 的 Real Application Clusters (RAC) 可以在高可用性配置中实现。不过,RAC 仅在 Oracle 10g Standard Edition 中提供,而在 Oracle 10g Enterprise Edition 中并不提供此功能。RAC 可以实现自动故障转移,但并不能提供 SQL Server 2005 Database Mirroring 所提供的小于 5 秒的故障转移速度。同样,Oracle 10g 的 Flashback 和 Data Guard 功能在 Oracle 10g Standard Edition 中不可用;为了获得这些功能,客户必须购买价格更高的 Oracle 10g Enterprise Edition。
SQL Server 2005 Enterprise Edition 还通过对多个服务器间的数据进行分区提供了提高可用性的能力。在 Oracle 10g 中增加此功能需要购买 Oracle Partitioning 产品。高可用性并不需要同样的高成本,SQL Server 2005 以比 Oracle 10g 低很多的价格满足客户的高可用性要求。
确保企业中的计算资源的持续可用性是当今各个数据库管理员 (DBA) 的主要目标之一。如果用户和客户不能访问其开展工作所依赖的资源,世界上的所有计算资源和安全/防护应用程序所起的作用就微乎其微了。如果支持应用程序的数据库和服务器不可用,不仅会给组织带来金钱方面的损失,也会有损其信誉和商誉。
根据组织的性质和应用程序的类型不同,服务停机带来的损失可能会非常大。Forrester Research 所做的一个研究表明,在线经纪公司 eTrade 的一次 1 个小时的停机事故造成了 800 万美元的损失。与此类似,DELL 公司一次 10 小时停机事故造成了 8,300 万美元的损失,而英特尔一次 33 小时的停机事故造成了 27,500 万美元的损失。这些数字仅代表了收入的损失,并不包括其他相对不太明显的损失,如客户满意度或公司信誉方面的影响。
对于任务关键型应用程序,支持这些应用程序的数据库和服务器需要在用户需要这些应用程序时保持可用状态。现在,在企业中达到必要的可用性水平不再只是由传统的备份和还原技术提供的简单数据保护。今天的企业需要比以往任何时候都要大的可用性窗口,很多组织需要每天 24 小时、每周 7 天、一年 365 天的可用性。创建高可用性环境以实现业务持续性是一项复杂的工作,因为这会涉及到企业的很多方面。它还受到很多因素的影响,包括技术挑战和功能以及人为因素和组织因素的影响,远远超出了纯技术的范围,而延伸到了运营当中。在此白皮书中,我们将就 SQL Server 2005 和 Oracle 10g 提供的高可用性技术进行比较。客户可以使用此信息帮助评估这两个系统间的功能差异,从而选择最适合其需求的数据库。
高可用性的定义与5个9
可用性可以定义为系统或资源可以使用的时间。高可用性的定义则通常根据其绝对可用性的百分比进行测定,100% 表示资源随时可用,没有停机时间。不过,要实现 100% 可用性非常困难。非常高的可用性的最接近测定为 5 个 9,即 99.999%。可用性可以用数学表达式定义为:
可用性百分比 = ((总时间 – 停机时间的总和)/总时间)
系统可用性的百分比等于总时间减去系统不可用的总时间,然后除以总时间。每年的可用正常工作时间为 8,760 个小时(每天 24 个小时乘以每年 365 天)。总共的正常工作时间为 8,760 个小时,则表示当年的可用正常工作时间为 100%。不过,由于需要定期进行系统维护,而且也可能出现其他计划外的事件,通常不可能提供 8,760 个小时的正常工作时间。例如,系统经常每个月会有一天(8 小时)的计划停机时间,以进行每月的维护工作,以便 IT 人员进行硬件升级、应用系统修补程序或进行其他例行维护活动。在这种情况下,系统的可用性百分比如以下表达式中所示:
98.9 = ((8760 – (8 x 12)/8760)
也就是说,每月停机一天的话,总可用性就为 98.9%。下面将说明如何计算系统可用性中的 9 的数量。9 的数量按照以下方式计算:99.9% 为三个 9,99.99% 为四个 9,依此类推。
正如所您所看到的,每个月停机一天,总体可用性为 98.9%,仅实现了 5 个 9 中的一个 9。每个月停机一天并不多,对于很多组织,这样的可用性就足以满足其需求了。不过,在很多情况下,这个百分比仍然不够。下表中所示为与每个持续增加的可用性水平相关的停机时间量。
9 的个数
| 可用性百分比
| 每年的停机时间
|
1
| 98.9%
| 3 天 18 小时 20 分钟
|
2
| 99.0%
| 3 天 15 小时 36 分钟
|
3
| 99.9%
| 8 小时 46 分钟
|
4
| 99.99%
| 53分钟
|
5
| 99.999%
| 5分钟
|
每年停机时间为每天 15 分钟或一年 92 小时(3 天 18 小时 20 分钟)就可以实现具有一个 9 的可用性。不过,随着 9 的个数的增加,要求也就越严格。最高的可用性(可用性为 5 个 9)中每年的停机时间必须小于每年 0.09 小时(约 5 分钟)。使用目前的数据库平台可以实现更高水平的停机时间,但不能仅靠使用技术而实现。这些高水平可用性仅能通过利用人员、流程和技术因素的组合才能实现。
务必注意,必须从对用户而言的系统可用性角度出发进行停机时间跟踪。某些供应商根据服务器可用性声称其可用性如何如何,但从服务器级别跟踪可用性并不一定考虑了对用户的真正可用性。如果服务器在正常工作,而其他因素导致最终用户无法访问系统,那么也应该将系统视为不可用。
对于全天候可用性的要求受到很多因素的影响。可能会成为创建高可用性操作环境的障碍的主要因素包括:
人员
流程
技术
信息的持续可用性不仅仅涉及到技术方面,还与公司员工(内部人员和位于远程位置的人员)有关。雇佣最好的人员以平稳地运行业务操作,这对于组织保持最大正常运行时间十分关键。将这一点与实现高效操作过程的流程和良好的策略相结合,可以确保您的人员最好地发挥其专业技能。
技术在创建高可用性环境过程中扮演的角色具有多重性。从系统角度而言,技术解决方案将处理例行维护和出现的各种类型的故障(如站点故障、服务器故障和数据库破坏)。从业务的角度而言,技术还会影响业务环境中的人员、策略和流程。例如,公司选择的硬件和软件解决方案将会同时影响人员所需的技能技巧和公司需要建立以管理该技术的流程。这些技能技巧的保持是非常重要的因素,可以影响系统可用性。持续的培训至关重要,这样可以使操作人员保持先进的技能水平,从而确保其能正确高效地执行例行操作和紧急任务。
在执行例行系统维护的同时提供数据库可用性,以及恢复由于应用程序故障或其他事件而丢失的数据,在这两方面 SQL Server 2005 和 Oracle 10g 均提供了一组独特的可用性功能。下面一节将讨论不同数据库功能,这些功能设计用于促进操作持续性和提供数据保护,以防止受到目前的企业数据库平台中的数据损坏的影响。
目前的服务器硬件非常可靠,所有主要硬件供应商均为主要系统组件提供了很多冗余功能,不过,硬件和操作系统维护与升级始终是不可避免的。
Microsoft Windows Server™ 2003 支持热切换 RAM 和 RAID 驱动器,可满足最常见的硬件升级场景:为系统增加内存和磁盘容量的需要。使用支持这些功能的硬件,可以在系统运行时动态地添加 RAM 和 RAID 驱动器,而不会对可用性造成影响。即使这样,仍然会需要进行例行硬件维护。例如,系统日志中某个时间指示某个系统组件出现了问题,或者需要应用要求重新启动系统的操作系统和应用程序级的服务包(service pack)。在单服务器环境中,此类事件会带来计划系统停机时间。计划停机对操作的持续性影响比非计划停机要小,因为可以计划在影响最小的时候进行。
不过,即使是计划的停机时间,对那些要求最大可用性水平的组织也代价巨大。为了满足例行维护和所需的停机时间的需要,目前所有可用的企业数据库平台都支持多服务器集群和其他可用性功能,以使 IT 人员能够进行轮换升级。Microsoft Windows Clustering Services 和 Oracle 的 RAC 都支持进行轮换升级,允许您手动将集群中的一台或一个系统组从网络中断开,以执行例行的维护工作。例如,如果有个要求具有全天候可用性的应用程序,则可以使用某个多服务器集群技术或其他可用技术在数据库平台上实现该技术。然后,当需要执行维护工作时,启动一个手动故障转移,以将需要维护的节点的工作负载关闭。然后就可以在该节点脱机时对其进行维修、升级或修补。其余的集群节点或后备服务器将在所维护的节点不可用时承担其工作负载。因此,不会有应用程序可用性损失。该过程结束后,可以将此节点还原到集群中,恢复正常操作。如果需要,可以对其他集群节点重复此过程。执行轮换升级,就消除了与例行维护关联的计划停机时间。
数据库维护是高效且高可用的数据不可或缺的部分。需要对索引进行维护、需要执行优化、需要执行备份,如此等等。良好的操作计划会将一定的数据库维护时间考虑到其中。不过,数据库维护时间并不一定与数据库停机时间相等。可以使用若干工具帮助 DBA 消除性能和停机时间的负面影响,并提高例行数据库维护任务期间的正常运行时间。
为了便于联机服务器和数据库维护,SQL Server 2005 允许对大部分 SQL Server 系统属性进行动态配置。下表列出了可以联机更改的服务器属性。
allow updates
| network packet size
|
cost threshold for parallelism
| query governor cost limit
|
cursor threshold
| query wait
|
default full-text language
| recovery interval
|
default language
| remote login timeout
|
index create memory
| remote proc trans
|
max degree of parallelism
| remote query timeout
|
max server memory
| show advanced options
|
max text repl size
| two digit year cutoff
|
min memory per query
| user options
|
min server memory
| network packet size
|
using nested triggers
| query governor cost limit
|
SQL Server 2005 独有索引碎片整理语句,允许对表和视图上的聚集索引和非聚集索引进行联机碎片整理。DBCC INDEXDEFRAG 语句并不会长时间占用锁定,因此不会阻塞任何正在运行的查询和更新。SQL Server 2005 和 Oracle 10g 都包含联机索引操作,可提高数据可用性、响应时间、磁盘空间利用率和数据库性能。可以对索引进行碎片整理、添加或重新生成,而同时能够继续对基础表数据进行查询或更新。
在每种数据库解决方案中均具有综合数据库优化工具,能提高性能(即使用户负载和查询会随时间而发生变化)。这些工具给 DBA 提出建议,以通过各种方式最佳地利用配置设置,例如监视和分析查询语句的操作,以及监视磁盘 I/O 子系统的性能。
每个不同的企业级数据库平台都使用其自己的方法和技术的不同组合,提供了类似级别的高可用性。正如您可以预料的,不同的高可用性解决方案提供不同程度的服务器故障和数据破坏保护,而不同的方法会带来不同的成本开销,其中既有购买解决方案所需的技术开销,也包括解决方案实现和操作所必需的人员方面支出的成本。
创建高可用性环境的能力可能会受到纠正应用程序错误和数据破坏的需求的影响。保持数据对用户和员工可用的一个重要方面就是确保“正确”的数据可用。如果数据库中的数据被破坏(例如,用户错误,如使用不正确的信息更新数据库或无意删除了信息),则必须有相应的过程能够快速识别并将数据还原到其原始状态。
SQL Server 2005——备份与事务时间点恢复
高可用性的关键组成部分之一就是良好的备份与恢复计划。SQL Server 2005 不同的恢复模型在记录开销和数据的完全恢复能力这两方面实现了平衡。SQL Server 2005 提供三种恢复模型:简单、完全、批量记录。
简单恢复模型。此模型具有最低的记录开销,但不能恢复任何最后一次备份前的数据。使用简单恢复模型,将丢失从上次备份以来的所有数据修改。
完全恢复模型。该模型与简单恢复模型正好相反,将记录所有的数据更改。使用完全恢复模型,所有数据都可以恢复到发生故障时的状态。默认情况下,SQL Server 使用完全恢复模型。
批量记录恢复模型。此模型位于两个极端之间,将记录处理批量操作(如批量复制和 SELECT INTO)之外的全部事务。在进行恢复时,这些操作会丢失。而批量记录模型可以恢复到最后的数据库或记录备份时的状态。
选择了恢复模型后,组织需要确定采用何种备份计划。可以备份到磁盘、磁带或其他媒体。执行磁盘备份是用于备份和还原数据最快的机制。为了防止受驱动器故障的影响,应始终将备份放置到独立的驱动器上,最好是与数据库数据独立的控制器上。SQL Server 支持三种基本数据库备份类型:完全备份、差异备份和日志备份。
完全数据库备份。此类备份是数据库的完全副本。这将提供一个已知点,从此处开始还原过程。
差异备份。此备份仅复制最后一次完全数据库备份之后修改过的数据库页。频繁进行差异备份,可以尽可能减少将数据库恢复到最近事务状态时所需的事务日志数量。
日志备份。此备份仅复制事务日志。事务日志备份可以在还原了最后的差异备份之后应用。
事务时间点恢复允许将整个数据库恢复到任何给定的时间点时的状态。SQL Server 2005 事务日志是一系列记录,包含自最后一次备份事务日志以来在数据库中所做的全部更改。使用事务日志备份,可以将 SQL Server 数据库恢复到任何特定的时间点。例如,如果 04:00 时出现了应用程序错误,导致一个数据库中数据被破坏,则可以使用 SQL Server 2005 事务日志备份将数据库恢复到 03:59(发生数据破坏前)的状态。
当还原了 SQL Server 事务日志时,该日志中包含的所有事务都会被前滚。除了用于更新数据库的数据外,每个事务日志记录都包含一个时间戳,用以指明事务发生的时间。达到事务日志尾部或在还原期间遇到了指定的时间时,数据库将处于最后事务时的精确状态,使您能够迅速从数据破坏错误恢复。
除了这些标准的备份选项之外,SQL Server 2005 还提供非常准确的页级别还原功能,可以还原一个页或一组页。
SQL Server 2005——有延迟的日志传送
可以将日志传送配置为允许“时间窗”,以方便地从出现数据破坏的情况恢复。日志传送是一种数据库可用性技术,该技术将日志从数据库服务器发送到一个或多个备份服务器上。如果主服务器或数据库出现故障,就可以随后将这些事务应用到备份服务器上。主服务器的事务日志备份在发送到从服务器之前可能会有指定量的延迟。例如,不采用立即将事务日志发送到从服务器的方式,而可以将日志传送配置为每五分钟向从服务器写入一次。如果在这五分钟期间出现数据错误,可以使用从服务器上的事务日志将数据恢复到五分钟前的状态。
SQL Server 2005——文件组还原
时间点恢复和日志传送恢复功能均在 SQL Server 2005 中可用。事务日志备份可以应用于将数据恢复到特定的时间点。
SQL Server 2005 的新功能允许方便地还原被破坏的对象。SQL Server 2005 中的细粒度还原功能允许对数据库中选择的文件组进行还原。在 SQL Server 2000 中,可用性单位是数据库。在数据库可用之前,不能接触到数据库的任何组件。在 SQL Server 2005 中,可用性单位则为文件组。这样就提高了可用性,因为只有当前正在还原的数据不可用;仍然可以访问包含在其他文件组中的其他数据库数据。SQL Server 2005 允许一次还原一个文件组,或在主文件组就绪时,甚至可以还原一个页或一组页。
SQL Server 2005——快速恢复
与 Oracle 的 FastStart Fault Recovery 一样,SQL Server 2005 的快速恢复功能允许用户在事务日志前滚后立即重新连接到正在恢复的数据库,从而提供了数据库可用性。SQL Server 的早期版本要求用户必须等到回滚了未完成的事务之后,即使用户不需要访问所涉及的数据库区域也是如此。
SQL Server 2005——数据库快照
SQL Server 2005 包含数据库快照,允许快速方便地还原损坏的数据。数据库快照提供了生成数据库只读视图的工具,而不会有创建整个数据库及其相关存储区的副本的系统开销。图 1 所示为数据库快照的概览。
图 1:数据库快照