65.9K
CodeProject 正在变化。 阅读更多。
Home

SQL Server 2005 精要 - 第 3 章:企业数据管理

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.37/5 (7投票s)

2006 年 3 月 31 日

93分钟阅读

viewsIcon

109493

本章介绍企业数据库管理的新功能。它不仅仅从功能列表的角度审视产品,而是根据数据库管理的一些常见任务来组织这些功能。

book.jpg

作者 Eric L. Brown
标题 SQL Server 2005 精要
出版社 Addison-Wesley
出版日期 2006 年 3 月 20 日
ISBN 0-321-34979-2
价格 34.99 美元
页数 336

引言

SQL Server 2005 版本发布之前,其 beta 阶段的开发非常注重用于开发应用程序的新功能。可以说,微软深爱着开发者。但对于那些在半夜接到电话,处理宕机关键任务系统的英雄们,有什么新功能呢?本章将关注那些企业 IT 中默默无闻的英雄——数据库管理员 (DBA)。对于 DBA 来说,SQL Server 2005 将彻底改变他们完成管理任务的方式。

本章介绍企业数据库管理的新功能。它不仅仅从功能列表的角度审视产品,而是根据数据库管理的一些常见任务来组织这些功能。本章将专门讨论以下内容:

  • 基础设施管理。 安装和配置是如何工作的?
  • SQL Server 监控。 我们将把它分为反应式和主动式,看看如何实现。

然后,我们将关注 SQL Server 2005 的一项重要工作——非常大的数据库 (VLDB) 管理的出现——尤其是在备份和恢复领域。在此过程中,我们将涵盖复制、高可用性、通用数据可用性以及面向数据库管理员的商业智能。

但在我们开始介绍这些功能之前,我们应该先看看新的工具集,因为这是一个从基于 Microsoft 管理控制台 (MMC) 的工具向 Visual Studio 的重大转变。对于数据库开发人员和管理员来说,用户交互和工具集有很多相似之处。希望最终能提高生产力,并产出更高质量的数据库应用程序。


一览:数据库管理员的新功能 - Microsoft SQL Server 2005 代表了开发人员和管理员工具的融合。在所有 Microsoft 服务器产品中,SQL Server 在可伸缩和可扩展的数据库管理及创作工具方面取得了最显著的进步。SQL Server 管理工具现在包括以下内容:

  • 一套新的创作、管理和操作工具。企业管理器、查询分析器等已被集成的工具集 SQL Server Management Studio 取代。
  • 包括用于远程管理 SQL Server 数据库服务器的新 API。
  • 引入了新技术,通过一系列技术来消除可用性(通用和高可用性)的障碍。
  • 路由管理任务(如备份和恢复)得到了增强,以缩短维护和恢复窗口,从而提高数据库可用性。

新的管理工具范围很广,从创建数据库对象同义词等小功能,到将 .NET 程序集引入数据库等重大功能。更重要的是,DBA 使用的工具已完全重新设计和重写。

当我们从数据库管理角度审视 SQL Server 2005 时,我们可以将功能围绕特定的工作职能进行分组。例如,SQL Server 2005 为服务器的远程管理(包括设置)提供了哪些功能?哪些功能可以让 DBA 查找和修复阻塞进程或配置不当的存储过程?DBA 面临的一大挑战是如何在应用程序和数据库不断变化的情况下保持数据库系统的可用性。对于计划、安全维护、资源分配和未来资源需求建模等平凡但重要的任务又如何呢?SQL Server 2005 如何解决这些问题?

此外,随着数据库产品越来越符合标准,制造商之间相互模仿,问题就变成“什么是有创新的?”微软提供了哪些功能来解决您明天将遇到的问题,因为微软正在超前思考?当我们审视 SQL Server 2005 时,重要的是要将功能与营销信息分开。当然,数据库快照是新颖的,但它有用吗?任何产品的发布都是为了追求未来的能力(下一个大事件)和解决最常见问题的结合,使产品更加完善。就数据库快照而言,其有用性受限于其使用场景。从客户那里了解他们如何找到新技术的新用途总是很有趣的。有时,这些创造性的用法是客户问题的根源。其他时候,他们发现了合法的新用途,然后影响了下一版本的新功能。本章不以功能列表的方式,而是从 DBA 任务导向的角度来审视数据库管理功能。但在那之前,我们必须看看所有变化的中心:SQL Server Management Studio。

SQL Server Management Studio

在 SQL Server 7 和 2000 中,工具集完全基于 MMC。MMC 工具并非为真正的可伸缩性而设计。客户抱怨企业管理器在打开非常大的数据库和复杂架构时花费时间过长。事实上,微软是以“我们会做到的”风格来开发产品的。SQL Server Management Studio 是微软提供的为数不多的“我们做到了”的工具之一。与其他微软提供的管理工具相比,SQL Server Management Studio 非常出色。相比之下,您可以看看复制;它在清晰的工具策略方面仍然欠缺。首先,要知道 SQL Server Management Studio 是基于与 Visual Studio 2005 相同的底层构建的。诸如帮助和大量的窗格之类的东西可能会让您的屏幕显得杂乱。好的一面是,SQL Server Management Studio 包含以下内容:

  • 完全支持对 SQL Server 7.0、SQL Server 2000、SQL Server 2005 和 Analysis Services 2005 实例的管理。管理 Studio 对话框会自动自定义,仅显示适合用户当前正在处理的数据库服务器版本的选项和功能。非模态对话框允许用户多任务处理,一次完成更多事情。
  • 新的集成查询编辑器允许您为所有 SQL Server 技术创建查询。此外,查询编辑器具有自定义功能,使其更易于处理大型批处理文件和复杂查询。
  • 内置源代码管理支持。无论您使用的是 Microsoft SourceSafe 还是 Visual Studio Team System,SQL Server 文件都可以像其他开发组件一样进行管理。您可以使用任何使用 SourceSafe 控件接口 API 的源代码管理系统。

SQL Server Management Studio 实现了 SQL Server Management Objects (SMO),这是一套新的托管类,取代了 SQL Server Data Management Objects (SQL-DMO)。这种主要的架构更改带来了显着性能提升。

SMO 相对于 SQL-DMO 的第一个重要优化是延迟实例化。当您运行应用程序时,SMO 会按需检索对象和属性。您将在对象浏览器中立即注意到这一点。此优化的关键在于进行多次小的服务器往返,而不是像 SQL-DMO 那样一次性获取所有内容,而这在许多情况下都是过度设计的。SMO 还允许您预取整个集合。此外,您可以使用一组预定义的属性检索对象。底线是程序员可以控制 SMO 的行为,这使您能够构建满足您需求的应用程序。

SMO 对象模型也是缓存的,这意味着它不会立即将对象更改传播到服务器。相反,它会缓存这些更改,直到您决定应用(或放弃)更改。这种缓存减少了与服务器的往返次数,因为所有更改都作为一个批次发送。

SMO 通过新的 Scripter 对象提供了高级脚本功能。此对象允许您发现数据库对象依赖关系,从而生成对象树。您可以从该树创建有序的对象列表,然后从列表中生成脚本,并可选择指定脚本选项(SQL-DMO 脚本选项的超集)。这种架构使您能够最大程度地控制每个脚本阶段,从而构建专业化、定制化的脚本解决方案。

此外,SMO 包含一个脚本捕获模式,允许您捕获 SMO 在应用程序对对象执行操作时生成的 Transact-SQL 代码。例如,VB 专家可以使用 SMO 来获取其应用程序生成的 Transact-SQL。

现在您已经了解了 Management Studio 工作架构的结构,让我们更详细地了解一下工具。

连接或断开状态

在开始使用 SQL Server Management Studio 之前,您会注意到一些革命性的变化。旧的 Enterprise Manager 用户界面已消失。此外,您现在有一个新的连接对话框可供使用。连接对话框允许用户同时提供登录凭据和特定的连接属性。连接对话框可以直接连接到 SQL Server 引擎、Analysis Services、Reporting Services、Integration Services 和 SQL Server Mobile Edition。Mobile Edition 连接很有趣,因为移动数据库通常在 Pocket PC 设备上。

除了能够连接到以前的版本(意味着 SQL Server 2000 和 SQL Server 7.0)之外,连接对话框还允许您决定使用哪个数据库、网络方法(TCP/IP)、命名管道和共享内存进行连接。此外,您可以选择加密连接并提供诸如数据库、连接超时和网络数据包大小之类的具体信息。

一旦连接到数据库服务器,您会立即注意到窗口的新布局。与以前的版本一样,您可以查看已注册的服务器。您可以通过新的对象浏览器窗口查看已注册服务器下的数据库对象。需要注意的是,您只能看到您具有安全权限的对象。

对象浏览器

在最高级别上,数据库,而不是服务器,是其中所有对象的中心容器。这是一个重大的、有意义的改变。首先,它更安全,因为 SQL Server 2005 中的元数据安全允许实现最小权限——一直到数据库级别。在另一个层面上,将数据库作为与数据库相关的所有对象的中心轴,可以使管理更容易。当您单击数据库旁边的加号时,只返回直接相关的对象。在以前的版本中,您必须编写查询才能返回与数据库相关的所有对象。在 SAP 等大型数据库部署中,这种新的组织模型可以节省时间。

微软致力于不在版本之间撤销功能。新的 SQL Server Management Studio 也不例外。我建议花时间去了解 SQL Server 2000 中的功能,这些功能在 SQL Server 2005 中被重命名和移动了。您仍然可以执行以下操作:

  • 创建数据库图

  • 通过 Visual Database Tools (VDT) 创建数据库表

  • 创建安全对象

  • 创建复制对象(例如发布)

  • 监控复制

要创建数据库图,您会在对象浏览器中找到特定数据库对象下的一个名为“数据库图”的新文件夹。在图 3-1 中,请注意数据库现在是所有下属对象的新容器。这比以前的版本有了很大的改进。

图 3-1 对象浏览器。

创建数据库

有多种方法可以在 SQL Server 2005 中创建数据库。我最喜欢的方法是右键单击对象浏览器中的“数据库”文件夹,然后选择“新建数据库”。这将打开友好的新“创建数据库”对话框。这个非模态对话框是一个易于使用的工具,可以帮助您完成所有数据库设置。它有三个选项卡。第一个“常规”选项卡提供必要的命名文本框。第二个“选项”选项卡包含更具体的设置,如自动收缩和自动关闭。您还可以指定游标行为、几个杂项设置(微软称之为),以及恢复和状态值。第三个“文件组”选项卡是您构建文件组分配的地方。

“创建数据库”对话框为您提供了将所有设置脚本化到查询编辑器窗口、文件、剪贴板或作业的选项。我觉得这个新功能非常方便。我通常会对我的新数据库进行脚本化,将文件保存在 SourceSafe 中,然后开始构建对象。如果您的公司有标准的数据库格式,那么脚本功能将对您非常有益。

创建表

在准备好数据库后,就可以开始创建表了。如果您是从头开始设计表结构,可以使用 VDT 通过数据库图创建数据库,或者右键单击“表”文件夹并选择“新建表”。我更喜欢使用数据库图,因为我喜欢在表中直观地建立关系。每当您保存数据库图时,表都会被创建。这使得迭代非常容易。通常,我尝试创建所有表,右键单击数据库图标,然后选择“生成脚本”以捕获数据库结构的所有更改。脚本再次被检入源代码管理,以便在出现问题时可以回滚。

如果您不是视觉型的人,您可能想使用内置模板。您可以在新的模板资源管理器框中找到它们;选择“视图”、“模板”。在准备好数据库和表之后,让我们看看新的查询编辑器。

查询编辑器

SQL Server Management Studio 包含许多新功能。您将使用的第一个工具之一是新的查询编辑器 (QE),它取代了查询分析器。QE 不仅仅是一个简单的查询文本编写应用程序。QE 提供以下功能:

  • 断开连接编辑,允许在不建立与 SQL Server 实例连接的情况下访问查询编辑器。

  • 彩色编码的 Transact-SQL 语法,以提高复杂语句的可读性。

  • 自动语句格式化,包括自动缩进。

  • 模板,可用于加速创建 SQL Server 对象的 Transact-SQL 语句的开发。模板是包含创建数据库对象所需的 Transact-SQL 语句基本结构的文件。

  • 编辑执行和解析具有 OLE (Object Linking and Embedding) SQL 关键字的查询。

  • 支持在多个 SQL Server 版本上进行查询编辑,包括 SQL Server 7.0、SQL Server 2000 和 SQL Server 2005。

  • 结果以网格或自由格式文本窗口显示。

  • 显示计划信息的图形化图表,显示内置于 Transact-SQL 语句执行计划中的逻辑步骤。

  • 使用专门的文件夹结构将工作项组织到解决方案、项目和文件中。

非模态对话框

DBA 和开发人员如何使用 SQL Server Management Studio 的一些最有趣和最有用的变化体现在新的用户界面对话框中。在以前版本的 SQL Server 中,管理员会使用“备份数据库向导”并执行备份作业。完成此操作的对话框是模态的,这意味着您必须等到作业完成。对于非常大或慢的操作,这会浪费大量时间。SQL Server 2005 通过非模态对话框改变了这一点。新的对话框样式提供了完成特定任务所需的大部分信息,但向导式流程已消失。

假设 DBA 需要执行多项任务,包括创建备份作业、编写 Transact-SQL 脚本来创建数据库以及添加用户帐户。管理员启动 SQL Server Management Studio,创建并执行备份作业。备份作业需要一些时间才能完成,但管理员可以执行其他任务,因为备份对话框不再是模态的。新对话框样式提供以下功能:

  • 从任何对话框进行脚本化。管理员和开发人员可以从任何对话框创建脚本,以便您可以读取、修改、存储和重用脚本。脚本可以直接写入查询编辑器窗口、文件或剪贴板。

  • 调度或立即执行管理操作。每个管理操作都可以安排在 SQL Server Agent 中执行,或立即运行。

如图 3-2 所示,非模态对话框既复杂又灵活。经理不应该听到数据库管理员说他们在等待一个操作完成,然后再进行下一个任务。

图 3-2 非模态对话框。

现在您已经了解了 SQL Server Management Studio 的基础知识,我们可以看看 SQL Server 2005 如何改变日常任务的完成方式。关于 SQL Server Management Studio,最后要记住的一点是,您只能看到并操作您用于连接到 SQL Server 的登录名的安全授权级别上的项目。

自定义 SQL Server Management Studio

在您适应了新布局的冲击之后,您会想要开始更改它以满足您的工作风格。您可以通过多种方式自定义“shell”的外观和感觉。您可以使用“视图”菜单添加和删除工具栏。如果您熟悉 Visual Studio,这些都易于理解。此外,您可以使用行号来更改自由格式查询编辑器的外观和感觉。当您使用“转到”命令时,可以折叠和展开大块文本。

您可以进行的最有用的更改之一是将键盘方案更改为反映 SQL Server 2000。默认情况下,F5 键不执行当前窗口的查询。图 3-3 显示了选项窗口,其中键盘方案设置为 SQL Server 2000。您可以自定义任何键,这可以节省键入时间和可能的麻烦。

图 3-3 SQL Management Studio 中的“工具”菜单下的“选项”屏幕。

使用 SQL Server Management Studio 的项目和解决方案

当微软决定整合数据库管理和开发工具集时,一个关键的吸引力是能够使用源代码管理系统来管理数据库项目。SQL Server Management Studio 可以利用任何源代码管理系统。更重要的是,SQL 项目现在可以通过项目层次结构进行组织。要使用项目,只需在 Management Studio 中选择“文件”、“新建项目”。图 3-4 显示了一个典型的 SQL Server 项目。

微软设置这个系统的方式有点令人困惑。当您转到“文件”菜单创建新项目时,您会在对话框中看到解决方案名称。文件夹的组织方式是自动创建一个项目。项目包含连接、查询和杂项文件的文件夹。如果您右键单击解决方案名称(最高级文件夹),您可以添加和删除项目,甚至导入其他项目。这种组织方式使工作更容易。我认为项目很有用,因为您可以有一个解决方案,其中包含每个开发阶段的项目的项目。将这种方法与源代码管理结合使用意味着我有一种有组织且高效的方法来处理数据库对象。

图 3-4 项目文件夹层次结构。

定义连接或项目中使用每个对象的已连接用途的能力具有一定的实用性。假设您正在开发一个有多个用户的应用程序。每个用户都有特定的权限集,这些权限会影响查询执行。您可以为每个用户创建一个单独的连接。通过此连接和关联的查询,您可以在用户安全角色下测试查询,这有助于暴露批处理和安全设置的问题。

获取帮助

虽然不需要专门的一章,但新的 SQL Server Books Online 包含一些值得一提的新功能。Books Online 现在不仅包含本地搜索功能,还支持可配置的自动/同步 Internet 搜索。Books Online Internet 搜索会从 MSDN、CodeZone 社区等获取结果。您可以自定义搜索结果。通过按 F1 键打开 Books Online,然后选择“工具”、“选项”。图 3-5 显示了可用于搜索的选项。

图 3-5 在线帮助搜索选项。

SQL Server 2005 基础设施管理

数据库管理员的大部分时间都花在基础设施上,以确保在部署服务包、更改应用程序代码和底层数据库架构以及数据本身发生变化时,数据库对应用程序可用。除此之外,还有系统的复杂性、缺乏透明度或对数据库服务器基础设施的完全了解,以及数据库可能位于另一个国家的事实,您就可以看到管理变更对 DBA 来说是一个多么大的挑战。您的目标是,DBA,在更换引擎的同时保持飞机的飞行。

微软在变更管理方面取得了一些进展。最可能令人痛苦的话题之一是设置,无论是本地还是远程。似乎随着硬件型号的快速变化,操作系统和应用程序代码也在不断变化以跟上步伐。在高数据增长率的组织中,底层硬件结构被消耗并成为潜在的瓶颈。最终,管理变更的结合是管理技能、业务流程和产品功能的综合。这些构造共同反映了组织整体的数据管理策略。变更管理一直是 SQL Server 2000 的一个主要问题。SQL Server 2005 在几个关键领域改进了变更管理方案:

  • 数据库快照可以通过重新应用已更改的数据库页来回滚数据库架构或数据的更改。

  • 设置。使用基于 MSI 的模型,可以实现本地和远程安装。设置现在提供了一个设置一致性检查器,用于检查接收服务器的状态并进行报告。设置也可以从命令行执行,并且完全可脚本化。

  • SQL Server Management Studio 支持源代码管理。这使得对系统中的查询和批处理文件有了更严格的控制。源代码管理扩展到 SQL Server Integration Services (SSIS) 和商业智能数据库代码。

  • 远程管理和脚本化。SQL Server 2005 提供了多种方法来脚本化数据库中的所有对象。这些脚本可用于通过源安全技术管理数据库代码。此外,这些脚本可用于生成数据库对象,包括远程位置的 OLAP 数据库。

  • 对于测试和开发阶段,新的动态管理视图增加了对内存和系统进程的可见性,允许进行查询和过程评估。

在服务器基础设施的状态变化期间保持可用性发生在几个级别。在硬件级别,SQL Server 符合 Windows 2003 和硬件原始设备制造商 (OEM) 提供的功能。SQL Server 利用动态功能,无需从 Windows Server 2003 重启服务器即可添加和删除 RAM、磁盘阵列和组件。使用 Windows 2003,许多服务器更改仍需要重启服务器。通过了解 Windows 环境,管理员可以为计划停机维护做好准备。他们的策略应该是采用 SQL Server 2005 的新功能来减轻计划停机。

两项新功能在此方面有所帮助——数据库镜像和数据库快照,您可以将其视为一种回滚数据库对象更改的机制。数据库快照具有多种优势,使其非常适合动态系统更改。数据库快照使用一种称为“写入时复制”的技术。此机制仅在快照数据库中捕获已更改的数据页。这使得快照非常轻量级。开发团队可以在应用任何架构更改之前进行快照。

管理基础设施变更的另一个工具是 Setup 程序。现在在 SQL Server 中,管理员可以更改数据库功能,包括使用 Setup 对话框将它们添加到故障转移群集或从中移除。(“What's New in Setup?”部分将深入讨论 Setup。)

数据库快照

数据库快照是数据库的只读副本。数据库快照不用于报告或作为开发新架构的数据库快照。它实际上是一个稀疏文件,指向原始数据页。只有当页发生更改时,快照才会吸收原始页。在创建时,数据库快照会创建一个稀疏文件和位图。它们存储在缓冲区缓存内存分配的内存中。位图的大小与源数据库的大小直接相关。这是小型 RAM 系统上的一个重要考虑因素。在总内存为 4GB 的系统中,如果数据库很大,通过驻留在缓冲区池中的快照过多,内存池可能会承受压力。因此,有必要实施一项策略,即除了 RAM 和硬盘之外,所有对服务器的更改都应在创建数据库快照后完成。删除任何不需要的数据库快照也是一个好习惯。

由于其易用性,快照很容易被滥用,因此您应该谨慎使用它们。文件需要易于理解的名称。如果您生成很多文件,请考虑一个命名约定,如下所示:

Databasename_datatype_year_day_militaryhour_.sht

文件扩展名可以是任何内容。Books Online 使用 SS。我使用 sht。在下面的示例中,您可以轻松创建快照:

CREATE DATABASE AdventureWorks_dbss1800 ON
( NAME = AdventureWorks_Data, FILENAME =
'C:\Program Files\Microsoft SQL 
Server\MSSQL.1\MSSQL\Data\AdventureWorks_data_1800.sht' )
AS SNAPSHOT OF AdventureWorks;
GO

安装新功能?

在 SQL Server 2005 中,Setup 与以前的版本相比有了很大的改进。这很大程度上归功于从第三方安装程序转向 Microsoft Windows Installer。核心 Windows Installer 技术存在于所有 Windows 操作系统安装中,为安装 SQL Server 提供了出色的骨干。SQL Server Setup 有两种安装模式:

  • 无人参与安装用于远程安装。它包括在远程服务器上设置故障转移群集的能力。

  • 手动安装通过向导进行交互式操作。新向导会引导用户完成安装过程的每个步骤。新 Setup 工具最重要的收益之一是更高的安全性。Setup Wizard 确保所有功能都默认安全安装。

Windows Installer

Windows Installer 将所有组件安装在单个功能树中。不再实现最小和典型安装模式。相反,Setup 会显示一个功能树,其中已选择默认选项。然后,管理员可以通过选择和取消选择功能树上的项目以及指定安装路径来定制安装。此版本的 Windows Installer 还支持远程 Setup 和多实例配置。

SQL Server 2005 使用“控制面板”中的“添加或删除程序”来添加或删除单个功能以及删除 SQL Server 实例。维护现有 SQL Server 实例可通过 Setup 用户界面、命令行、Microsoft Systems Management Server 或 .ini 文件支持。

SQL Server 及其支持组件——Analysis Services、Reporting Services 和 Notification Services——现在集成到一个单一的功能树中。SQL Server 2005 的 Setup 提供了高级检测逻辑来识别以前的组件安装,从而简化了附加组件或实例的安装以及现有 SQL Server 实例的升级。Setup 最令人兴奋的新功能之一是一致性检查器。

Setup 一致性检查器

SQL Server 2005 提供了 Setup Consistency Checker (SCC),这是一项新功能,可在 Setup 开始之前检查和验证目标计算机。使用 Windows Management Instrumentation (WMI) 技术,SCC 可以防止由于本地、远程和群集目标计算机上的配置不受支持而导致的 Setup 失败。如果 Setup 可以修复失败的检查项,用户可以允许 Setup 执行必要的操作。否则,SCC 会引导用户找到每个阻塞问题的解决方案,然后 Setup 才能继续。SCC 提供了一个丰富的报告界面,允许您单击帮助文件。此外,报告可以复制到剪贴板或从报告窗口通过电子邮件发送。SCC 的配置文件会根据所选安装的功能而变化。

可自定义的安装路径

Setup 允许管理员为 SQL Server 的主要功能指定自定义安装路径,包括 Analysis Services、Reporting Services、SQL Server 关系数据库和客户端工具。此外,管理员可以自定义 SQL Server 日志文件和 tempDB 的安装路径。自定义安装路径的功能在以下场景中非常有用:

  • 管理员希望将 tempDB 和日志文件安装到文件系统的不同卷上。在安装过程中,管理员可以为 tempDB 和日志文件配置自定义安装路径。

  • 管理员希望将 Analysis Services 安装到与 Setup 中定义的默认位置不同的位置。管理员可以为 Analysis Services 配置自定义安装路径。

故障报告

DBA 遇到的最大麻烦之一是 Setup 失败。在以前版本的 SQL Server 中,如果安装失败,您只需检查日志文件,并希望从晦涩的日志文本中弄清楚发生了什么。在 SQL Server 2005 中,已做了大量工作,使 Setup 尽可能无痛。

SQL Server 2005 的 Setup 提供了改进的故障报告和可扩展的警报。如果在安装过程中发生错误,Setup 会确定一个故障退出代码,提供描述性错误消息,推荐为解决问题而应采取的纠正措施,并指向 Setup 日志。Setup 还会保存每次安装的日志。

例如,假设在从 SQL Server 2000 升级到 SQL Server 2005 时,管理员收到一个 Setup 错误。管理员会收到一个信息性警报,说明某个动态链接库 (DLL) 未能在系统中正确注册。管理员单击“确定”,Setup 会回滚失败的安装。当 Setup 完成回滚失败的安装后,管理员会看到一个对话框,询问他/她是否要将问题报告给 Microsoft,并会获得指向其他可用帮助的链接。管理员可以在 Microsoft 支持网站上报告问题,并获得指向相关知识库文章的链接。该文章会向管理员呈现问题的可能解决方法。

Watson 集成

SQL Server 2005 将复制组件中的异常处理扩展到包括用于 Dr. Watson 1.0 集成本地小型转储文件。在早期版本的 SQL Server 中,如果复制代理遇到异常,会生成堆栈转储。此转储提供了调试信息,但其格式无法在 Visual Studio 中加载和调试。在 SQL Server 2005 中,会生成 Visual Studio 兼容的小型转储文件。

应用程序可以生成用户模式小型转储文件,其中包含崩溃转储文件中部分有用的信息。应用程序可以快速有效地创建小型转储文件。由于小型转储文件很小,因此可以轻松地通过 Internet 发送给应用程序的技术支持。

转储文件存储在复制可执行文件的 mssql\log 文件夹中,对于任何使用复制 ActiveX 组件的 .exe,则存储在当前目录中。除了本地小型转储之外,复制组件还会调用 Dr. Watson 来生成包含调试信息的 cab 文件。

操作管理工具

在 DBA 执行的众多任务中,操作管理任务实际上是对 SQL Server 基础设施的监督。它分为客户端连接配置以及通过 SQL Server Agent 运行的批处理过程或作业的监督和管理。其中还包括复制和 SQL Server Integration Services 的管理,以及 Reporting Services 和 Notification Services。这些技术中的每一种都可以从 SQL Server Management Studio 启动和停止。从纯粹的管理角度来看,与以前的版本相比,微软已设法将当前的功能集更统一、更一致地集成起来。在 SQL Server 2005 中,DBA 可以选择操作任务的实现方式。

SQL Computer Manager

SQL Computer Manager 允许管理员配置基本服务和网络协议选项。SQL Computer Manager 结合了以下 SQL Server 2000 工具的功能:Server Network Utility、Client Network Utility 和 Service Manager。SQL Computer Manager 是一个 MMC 管理单元,类似于以前版本中的 Enterprise Manager。SQL Computer Manager 还包括设置以下服务的服务属性的能力:

  • SQL Server

  • SQL Server Agent

  • Analysis Server

  • Microsoft Search

  • 分布式事务协调器 (DTC)

  • Reporting Services

SQL Computer Manager 显示所有服务、服务器网络协议和客户端网络协议。它允许管理员启动、停止、暂停、继续或重启服务。它还允许您查看所选服务的属性,包括:

  • 名称

  • 描述

  • 状态(已启动、已停止或已暂停)

  • 启动类型(手动、自动或禁用)

  • 登录为(服务运行的服务帐户)

  • 上次启动日期(服务的上次已知启动日期)

  • 上次停止日期(服务的上次已知停止日期)

  • 进程标识符 (PID)

SQL Server Agent

SQL Server Agent 自动化服务器上发生的周期性作业。当前版本已经处理了 SQL Server 2000 中 SQL Agent 的大部分问题。SQL Server Agent 作为 Windows 服务运行,可以从 SQL Computer Manager 启动和停止。SQL Server Agent 可用于监视服务器、运行备份等作业,并通过警报监视服务器状况。客户一直要求的一点——并且对于 SQL Server 2005 来说是真实的——是 SQL Server Agent 被包含在故障转移群集中。

SQL Server Agent 最新的功能之一是它可以为其他 SQL Server 子系统执行作业。例如,SQL Server Integration Services 和 Analysis Services 的作业现在可以自动化。新的非模态对话框与 SQL Server Agent 的结合应该会为更高水平的自动化服务器工作铺平道路。从安全角度来看,SQL Server Agent 以执行作业所需的最小权限运行。此外,SQL Server Agent 作业可以利用“运行身份”功能,这意味着 SQL Server Agent 作业不再需要以数据库所有者 (DBO) 身份运行,后者对 SQL Server 拥有所有权限。

SQL Server 2000 中普遍存在的一个问题是 SQL Server Agent 作业导致服务器挂起。SQL Server 2005 为 SQL Server Agent 提供了新的对象和计数器,系统监视器可以使用它们来跟踪 SQL Server Agent 活动,包括已启用作业、已启用警报、已启用计划、活动作业、活动警报以及作业成功率。计数器还允许您配置由 SQL Server Agent 性能计数器条件触发的警报。

SQL Server 2005 远程管理功能

管理员面临的真正挑战之一是如何管理越来越多的服务器。制造和客户支持等业务遍布全球,本地数据副本在越来越短的时间窗口内进行同步。管理员需要能够远程安装、监视、排除故障和维护远程服务器。SQL Server 工具团队为管理远程环境提供了三类接口:

  • SQLCMD 适用于习惯于命令行应用程序的人。对于正在迁移或当前使用命令行语言的客户,OSQL 和 ISQL 已被弃用,并被 SQLCMD 取代。SQLCMD 是一个命令行可执行文件。您可以通过键入 SQLCMD 在命令行中调用它。

  • SQL Server Management Objects (SMO) 适用于构建面向用户界面的应用程序的人。想要构建自定义管理工具的 DBA 会发现 SMO 已取代 DMO。SMO 是一种新的 API 架构,克服了 DMO 的局限性。SMO 可伸缩、可靠且灵活。SMO 比 DMO 更强大,因为它被 SQL Server Management Studio 用于连接和处理 SQL Server 实例。SQL Server Management Studio 中的每个功能都由 SMO 实现。

  • Windows Management Instrumentation (WMI) 允许使用 VBScript 等 Windows 脚本语言,并且比 SMO 或 SQLCMD 更复杂。WMI 功能强大,并提供对操作系统深度的访问,这是 SQLCMD 和 SMO 无法达到的。在极其复杂的环境中,WMI 提供程序可能是最完整的解决方案。

远程功能也通过脚本编写和处理复制和 Analysis Services(通过各自的 .NET 库)、Replication Management Objects 和 Analysis Management Objects 的新功能得到增强。

SQLCMD

SQL Server 2005 引入了一个新的命令行实用程序。SQLCMD 使用 OLE DB API 与 SQL Server 通信,而其他实用程序使用旧的 ODBC 或 DB-Library API。SQLCMD 支持 OSQL 和 ISQL 的功能,但也引入了一组更丰富的命令,使其能够更好地在应用程序脚本(例如 Microsoft Visual Basic for Applications (VBA) 脚本)中运行。

SQLCMD 超越了简单的命令行调用到活动服务器连接。它可以像旧的 DOS 脚本一样使用;也就是说,您可以使用纯文本文件为 CMD 脚本提供输入变量。例如,假设管理员使用一个文本文件来提供数据库服务器连接信息给一个自动将新数据库添加到标准备份和恢复模型中的脚本。DBA 不必运行向导,只需提供新的服务器信息并运行脚本。SQLCMD 也可用于对服务器运行即席查询。可能最重要的功能是 SQLCMD 提供了专用的管理员连接,这是一个有保证的连接到已挂起的服务器。更重要的是,专用管理员连接具有预先分配的带宽,以便您可以使用动态管理视图来迭代地查找有问题的进程并将其终止,而无需关闭整个服务器。

您可以通过打开 SQLCMD 模式在 SQL Server 查询编辑器中开发 SQLCMD 脚本。SQLCMD 模式允许您使用查询编辑器创建 SQLCMD 文件。此模式的优点是您可以开发脚本,在查询编辑器中进行测试,然后部署它。总的来说,DBA 应该熟悉 SQLCMD,因为通过专用管理员连接的简洁执行和编写几个查询可以在服务器进程出现问题时挽救局面。

要开始使用 SQLCMD,请转到命令提示符并键入 **SQLCMD**。处理 SQLCMD 的基本开关是 -S,它标识服务器。要提供实例,命令将是:

sqlcmd -S ComputerName\InstanceName.

身份验证类型有三个开关:

  • -E 是默认设置,使用本地用户。

  • -U 允许您指定用户,例如 SA。

  • -P 是密码。密码区分大小写。如果未使用 -P 选项,并且未设置 SQLCMDPASSWORD 环境变量,SQLCMD 会提示用户输入密码。如果 -P 选项在命令提示符末尾使用而没有密码,SQLCMD 将使用默认密码 (NULL)。

您可以将输入文件和输出文件提供为 XML。您需要了解一些在使用 SQLCMD 时需要注意的事项。要了解更多信息,请在 SQL Server Management Studio 打开时按 F1,并在 Books Online 中搜索 SQLCMD。了解此功能将是救命稻草。

SQL Server Management Objects

SQL Server Management Objects (SMO) 是一组对象,它们公开 SQL Server 数据库和复制管理以及 Analysis Services 管理的功能。您可以使用 SMO 来自动化重复或常用的 SQL Server 管理任务,例如以编程方式检索配置设置、创建新数据库、应用 Transact-SQL 脚本、创建 SQL Server Agent 作业以及安排备份。

SMO 实现为一组 .NET 程序集。SMO 与 DMO 相比有许多改进,包括 .NET 对象模型、部分实例化、捕获模式执行、委派执行、空间对象以及与 .NET Framework 的集成。对于数据库管理应用程序开发人员和高级 DBA 来说,SMO 是创建可操作 SQL Server 实例的自定义应用程序的主要方式。由于 SMO 已包含在 .NET Framework 中,因此您可以开发基于 Web 和 Windows Forms 的应用程序。SMO 还可以管理 SQL Server Express 实例。

Windows Management Instrumentation

Microsoft SQL Server 2005 引入了一个 Windows Management Instrumentation (WMI) 配置提供程序,用于以编程方式管理 SQL Server 配置。使用 WMI 提供程序,您可以编写管理应用程序或脚本,使用 WMI 框架提供的基于标准、面向对象、远程启用的、可脚本化的接口来监视、配置和控制有关 SQL Server 的管理信息。

如果 DBA 需要一种简单的方法来检索给定 SQL Server 实例的所有配置设置并将这些设置保存到文本文件中,WMI 可能会提供一种方法。WMI 还可以提供捕获整体服务器配置的方法,其中包括 Windows 操作系统信息。这在灾难情况下可能非常有用。备份整个注册表和所有子设置将更容易从头开始重新创建服务器。DBA 应该熟悉使用 Windows Script Host (WSH) 编写 VBScript 中的管理脚本。WMI 接口允许您编写一个脚本,该脚本使用 SQL Management WMI 提供程序检索给定 SQL Server 的属性集合,并将这些属性保存到文本文件中。

SQL Server 监控

服务器监视是 SQL Server 管理员面临的挑战。平均而言,SQL Server DBA 负责的服务器数量是其他平台同行的一倍。DBA 还有许多任务要完成。DBA 如何在一天内完成所有工作?他们使用上面提到的脚本语言来自动化他们的流程。

在理想的世界里,数据库将是自监控的。数据库本身将自动终止挂起进程。创建新数据库将自动创建备份作业。数据库将执行必要的操作,以将查询性能保持在某个可接受的水平之上。不幸的是,没有任何数据库提供商接近提供此功能。这就是为什么仍然需要 DBA。

有两种监视场景:

  • 反应式监视更多地处理现有问题或新出现问题的解决。

  • 主动式监视是查看当前服务器状态并对底层对象进行更改的估算和计划的过程。目标是防止问题、提高可伸缩性并保持可用性。

本节将场景分为反应式和主动式监视。反应式技术讨论得更多,因为该领域发生了重大变化。

反应式监视

反应式工具只有一个真正的目的:尽快修复问题。SQL Server 2005 提供了许多新工具来查看服务器内部,以诊断和解决问题。查找问题的根本原因和修复问题需要服务器提供信息——一种关于正在发生什么的健康报告。通常,服务器上会出现问题,而 DBA 却没有任何可用于诊断的工具。(这就像您将汽车带到机械师那里抱怨有奇怪的噪音。除非它是响亮而可怕的,否则机械师一坐上方向盘,声音就消失了。您会有一种“我不是疯了!”的感觉。)在 SQL Server 2005 中,新的动态管理视图不仅仅提供了一种查看引擎盖下的方式。它们为引擎盖下的进程提供了聚合历史数据。试图解决问题的 DBA 将至少有一些基本线索来开始调查。

数据库目录视图

为了更好地保护 SQL Server 数据库,系统目录已锁定。它们无法更改。此外,系统目录并非普遍可见。SQL Server 提供了一套新的 SQL 视图,提供有关系统目录的信息。这些视图是只读的,旨在显示元数据。以下是可用目录视图的列表。您可以通过查找适当的系统函数并使用适当的 SELECT 语句过滤器执行查询来查询目录视图。目录视图的命名约定非常友好。

分区函数目录视图

数据空间和全文目录视图

公共语言运行时 (CLR) 程序集目录视图

标量类型目录视图

对象目录视图

消息(用于错误)目录视图

Service Broker 目录视图

HTTP 端点目录视图

服务器范围配置目录视图

数据库和文件目录视图

架构目录视图

安全性目录视图

数据库镜像目录视图

XML 架构(XML 类型系统)目录视图

链接服务器目录视图

扩展属性目录视图


注意 - 我可以用一整章的篇幅来讨论这些目录视图,但我建议您阅读 SQL Server Books Online 中的相关内容。请查找主题“Catalog Views (Transact-SQL)”。


以下是查询数据库级别视图以获取主体的简单示例:

SELECT type_desc,name,default_schema_name FROM sys.database_principals
WHERE type_desc like 'sql_user'

SQL Server Profiler

SQL Server Profiler 提供了一种捕获服务器上的工作负载并回放它们的方法。Profiler 使用所谓的跟踪文件来捕获和回放服务器上的查询。(您可以在 SQL Server Books Online 中了解有关跟踪文件的更多信息。阅读此主题非常值得。)已包含许多改进,包括客户端跟踪和 CPU 级跟踪元素。Profiler 可以排序和查看存储过程以及服务器上的所有执行。SQL Server Profiler 允许您执行以下操作:

  • 单步执行问题查询以找到问题的原因。

  • 查找和诊断运行缓慢的查询。

  • 捕获导致问题的 SQL 语句序列。然后可以使用保存的跟踪在测试服务器上复制问题,以便进行诊断。

  • 监视 SQL Server 的性能以调优工作负载。

Profiler 使用的数据捕获在跟踪文件中。跟踪文件包含记录的元素。它还包含有关哪些查询被执行、它们执行了多长时间以及在哪个服务器上的信息。在 SQL Server 2005 中,现在可以使用客户端连接信息。此附加功能提供了一种方法来观察客户端到服务器执行往返中的事件。


注意 - SQL Server Profiler 可与故障转移群集一起用于排除幽灵故障转移。


尽管 SQL Server Profiler 在捕获跟踪时会产生一些开销,但这种开销很小。SQL Server Profiler 跟踪文件可以保存、导出、共享和进行基准测试。新的数据库调优顾问甚至可以使用跟踪来提供调优数据库的反馈。

Microsoft SQL Server 2005 对 SQL Server Profiler 进行了几项增强:

  • 滚动跟踪文件。 Profiler 现在可以连续有序地回放一个或多个收集到的滚动跟踪文件。

  • 新的可扩展性标准。 Profiler 使用基于 XML 的定义。此新定义允许 Profiler 更轻松地从其他类型的服务器和编程接口捕获事件。

  • 分析服务配置文件。 Profiler 现在支持捕获 Analysis Services 引发的事件。管理员需要识别由特定用户帐户发出的 OLAP 查询的性能问题。管理员将 SQL Server Profiler 配置为捕获该会话的登录事件和关联的服务器进程标识符 (SPID)。管理员还将 Profiler 配置为捕获具有相同 SPID 记录的所有 Query Begin 和 Query End 事件。使用开始时间、结束时间和持续时间,管理员可以确定查询的计时。

  • 将跟踪结果保存为 XML。 除了标准的 ANSI、UNICODE 和 OEM 保存格式外,跟踪结果还可以保存为 XML 格式。

  • 聚合视图。 用户可以选择聚合选项并选择聚合键。这允许用户看到一个显示执行聚合的列的视图,以及构成聚合值的行数。

  • 跟踪事件与性能监视器计数器的相关性。 Profiler 可以将性能监视器计数器与 SQL 或 Analysis Services 事件相关联。

可导出的显示计划和死锁跟踪

对于 DBA 来说,没有什么比查找丢失数据或发现服务器为何在此事务上挂起更糟糕的了。当 DBA 开始调查数据库犯罪现场时,能够法医式地研究显示计划,或在跟踪回放中观察死锁的发生,是至关重要的。SQL Server 2005 增强了显示计划和死锁跟踪,为管理员提供了更多调优数据库服务器的方法。许多时候,归咎于数据库的问题实际上是由于编写不佳的存储过程或批处理文件引起了争用。(我将不在这里对编写高效应用程序进行说教。)在发生死锁事件的情况下,DBA 通常被召唤来解决问题。死锁会强制回滚并失败事务,因为底层行被同时写入活动锁定。在 SQL Server 2005 中,提供了新的死锁检测功能:

  • 通过跟踪事件收集的死锁发生情况以图形方式表示。图形表示显示死锁周期或链,提供比从早期 SQL Server 版本使用的跟踪标志收集的信息更简单、更直观的分析死锁发生的方法。

  • 显示计划结果以 XML 格式保存,之后可以在查询编辑器中加载以进行图形显示。

以 XML 格式保存显示计划结果的能力为性能调优提供了许多好处。显示计划可以保存、传输到另一个位置,并无需底层数据库即可查看。管理员可以使用导出的显示计划来帮助识别内部或远程数据库之间的差异。从主动监视的角度来看,管理员可以收集服务器的基线数据,然后将该数据与服务器的增长或性能特征变化进行比较。


数据库警报 - SQL Server 2005 允许您自动化系统活动监视。可以设置警报以响应两种类型的事件。首先,当错误发生时,数据库会发出一个错误标志。可以监视此标志,并根据需要采取响应。其次,可以将警报设置为严重级别。这是一种基于阈值的响应系统状态的方法。例如,您可能为系统事件创建警报,例如当等待进程运行时间过长时。警报可以在 SQL Server Management Studio、通过 SQL Server Agent 或通过 Transact-SQL 设计。


动态管理视图

SQL Server 2005 提供了 80 多个新的动态管理视图 (DMV)。DMV 是用于排除 SQL Server 数据库问题的全新拓扑。它们分为从服务器级别到数据库级别的组。提供了特殊的视图来检查 .NET 程序集、SQL Service Broker、安全性等。DMV 不仅包含当前数据,还包含聚合历史数据。

SQL Server 2005 开启了默认跟踪,它提供了一种在发生错误时了解发生了什么的方法。您可以将默认跟踪视为黑匣子录音机。DMV 使用默认跟踪。这就是 DMV 真正有趣的地方:管理员可以在意外事件后查看默认跟踪,了解发生了什么。此外,当您首次登录 SQL Server 时,主窗口中的摘要报告是从历史数据创建的。

DMV 实际上是数据库视图。因此,它们可以在每个用户数据库系统数据库文件夹下的“视图”文件夹中找到。(视图的前缀是 dm_。)DMV 分为五类。视图按它们报告的环境因素进行分类:

  • 名称为 dm_exec_* 的 DMV 提供有关用户模块和连接执行的信息。

  • 遵循 dm_os_* 约定的 DMV 报告内存、锁和执行调度。

  • 使用名称 dm_trans_* 的 DMV 提供对事务和隔离的洞察。

  • 用于监视磁盘 I/O 的 DMV 命名为 dm_io_*

  • dm_db_* 提供数据库级别的数据。

DBA 不了解这些类别并构建自定义监视工具是失职。图 3-6 显示了 SQL Server Management Studio 的“摘要”选项卡上的架构更改报告。“摘要”选项卡有 13 个有趣且有用的报告。这些报告不仅使用默认跟踪和 DMV,而且实际上运行 Reporting Services API 来显示数据。图 3-6 中显示的报告是交互式的,允许用户深入查看报告的子区域并探测更多信息。

图 3-6 SQL Server Management Studio 中的 SQL Server 动态管理视图报告。

当您的服务器行为异常并冻结时,您可以将 DMV 与另一个新功能结合使用:专用管理员连接 (DAC)。使用 DAC 和 DMV,您可以找到有问题的进程或作业并终止它,而无需重启服务器。

主动监视

通过让 DBA 扮演更具前瞻性的角色,组织可以预防应用程序的未来问题。DBA 可以提供关于硬件配置、磁盘和存储需求以及应用程序性能计算的见解。在组织中,开发和管理之间无缝的接口可以提高整体应用程序质量,因为 DBA 通常比开发人员更精通 Transact-SQL,并且更擅长设计数据库对象。此外,应用程序流程应考虑备份/恢复策略,应作为整体数据库管理策略的一部分实施,并应符合当前的监管和隐私政策问题。为什么备份和恢复会成为应用程序设计流程的一部分?

SQL Server 2005 具有两项新的数据库技术,它们利用了特定的数据库设计。我们来看一下分区功能,了解其工作原理。当数据库对象在设计时就考虑了分区方案时,新的分区功能效果最佳。此外,对数据进行查询的查询更具可伸缩性,因为它们可以更有效地执行磁盘读取和文件 I/O。随着数据库的增长,将表数据划分为更小的分区至关重要。跨越可能数百个磁盘使用物理文件组需要专业知识 — 这通常是管理员的领域。虽然应用程序开发人员无需执行任何操作,但数据库设计需要具有适当的主键和外键关系,以便尽可能轻松地长期管理数据。为了使数据库分区正常工作,数据分区方案和功能必须遵循数据中的基本关系,以便高效地将数据移入和移出分区系统。本章稍后将介绍新的分区和快照隔离功能。

当前用于调整 SQL Server 工具的作者是 Microsoft Research。DMX 团队提供了改进了许多倍的数据库调整顾问 (DTA)。

数据库调整顾问

在 SQL Server 2005 中,DTA 取代了索引调整向导。DTA 提高了调整建议的质量,增加了调整操作的可伸缩性,并简化了用户体验。DTA 包含以下数据库调整改进:

  • 有时间限制的调整。为用户指定的时段提供建议。在早期版本中,用户只能选择三种调整模式之一:快速、中等或彻底。

  • 多数据库调整。从引用多个数据库中表的负载中进行调整。在早期版本中,向导仅调整属于单个数据库的表。

  • 事件调整增强。增强的事件解析功能允许向导调整包含表值用户定义函数和引用临时表的事件。

  • 选择性创建索引。用户可以选择性地创建 DTA 建议索引的子集。

  • XML 输出。除了作为 DTA 标准输出的 Transact-SQL 脚本和文本分析报告外,用户还可以生成 XML 格式的输出。

  • 数据分区调整。根据工作负载推荐适当的数据分区。

  • 可伸缩性增强。增强的解析功能、统计信息创建、查询优化、工作负载压缩和内存管理旨在提高调整操作的可伸缩性。顾问还使用多个连接在具有多个处理器的服务器上并行执行工作。

DTA 作为其自身的可执行文件在 SQL Server 进程空间之外运行。该可执行文件称为 DTAShell.exe。DTA 专注于数据库的物理方面。如果物理结构得到优化,查询处理器将更加高效。物理性能结构包括聚集索引、非聚集索引、索引视图和分区。

当前活动窗口(SQL Server Management Studio)

SQL Server Management Studio 中的“当前活动”窗口以图形方式显示以下信息:

  • 当前用户连接和锁

  • 活动用户正在运行的进程号、状态、锁和命令

  • 被锁定的对象和存在的锁类型

如果您是数据库的系统管理员,您可以查看有关选定进程的附加信息或终止选定进程。“当前活动”窗口在数据库级别受到限制。如果您想以聚合的方式一次监控服务器上找到的所有数据库,您必须使用第三方工具或使用 SMO 开发一个。

事件通知和反应式监视

事件通知是一种新的数据库对象。它响应各种 DDL 语句和跟踪事件而执行。当通知执行时,它会将 XML 格式的消息发送到 Service Broker 服务。事件通知类似于触发器,因为它响应事件而运行。然而,与触发器不同的是,事件通知与事件源是解耦的;事件消息可以由接收服务队列的消息异步消耗。您可以使用事件通知来响应数据库架构更改或与数据库对象相关的任何其他更改。如果您利用 Service Broker 队列和传递支持,事件通知将是一个强大的盟友。事件通知值得用一整章来讨论。我建议您在开始之前阅读有关它们的内容。但是,理解事件通知和触发器之间的区别很重要。表 3-1 说明了主要区别。

表 3-1 事件通知与触发器的比较

触发器

事件通知

响应 DML 和 DDL 事件。

响应 DDL 语句和部分 SQL Server 跟踪事件。

运行 SQL 或 CLR 代码。

不运行任何代码 — 仅将 XML 消息发送到 Service Broker 服务。但是,服务可以设计为激活处理消息的存储过程。

事件必须同步消耗。

事件异步消耗。

事件使用者与事件生产者紧密耦合。

事件使用者与事件生产者解耦。

事件必须在本地服务器上消耗。

事件可以在远程服务器上消耗。

在包含事务的范围内执行。

不在包含事务的范围内执行。

支持 ROLLBACK。

不支持 ROLLBACK。

DML 触发器名称具有架构范围。

 

DDL 触发器名称具有数据库或服务器范围。

事件通知名称的范围由服务器、数据库、程序集或数据库内的特定对象确定。

DML 触发器与触发器表具有相同的拥有者。

对象上的事件通知可能与通知监视的对象具有不同的拥有者。

元数据

元数据

SELECT * FROM sys.triggers

SELECT * FROM sys.event_notifications

SELECT * FROM sys.server_triggers

SELECT * FROM sys.server_event_notifications

支持 EXECUTE AS

不支持对事件通知使用 EXECUTE AS

DDL 触发器的事件信息可通过新的 EventData() 内置函数以 XML 形式提供。

将 XML 格式的事件信息发送到 Service Broker 服务。XML 的架构与 EventData() 内置函数发出的架构相同。

正如您所见,这两种选择之间的差异很大。在许多情况下,触发器是最佳机制。事件通知的使用确实占有重要位置。在拥有服务器场的组织中,系统结构的更改需要与操作系统更改相结合,可以通过 WMI 将事件通知功能挂接到 Windows 应用程序。这是一个非常高级的功能。在实施之前,您应该对其进行研究并充分理解。

数据库邮件

在 SQL Server 2005 中,一项默认关闭的新技术基于 SQL Service Broker。数据库邮件取代了 SQL Server 2000 的 SQLMail。数据库邮件提供通过用户界面或命令行/代码界面调用的邮件发送功能。它使用 SQL Server Service Broker 队列发送消息。

数据库邮件位于每个数据库实例的数据库资源管理器的“管理”文件夹中。它不包含在 SQL Server Express 中,因此您无法托管垃圾邮件服务器!您可以使用数据库邮件配置向导配置数据库邮件。

图 3-7 显示了此向导的开始页,让您了解必须提供的参数。请注意,数据库邮件使用 SMTP 邮件协议。在使用数据库邮件之前,您必须在服务器上启用 SMTP 并更改 Windows 中的默认安全设置。通过继续执行向导或转到表面区域配置 (SAC) 工具并打开数据库邮件来完成此操作。

图 3-7 数据库邮件配置向导。

数据库邮件可在多种场景中使用。以下是几个示例:

  • 数据库管理员设置了一个特殊的例程,当备份作业成功或失败完成时,该例程会向他/她发送电子邮件。

  • DBA 设置了一个例程,当服务器处理器利用率高于 75% 时发送电子邮件。

数据库邮件是仅发送程序,因此可以接收邮件并执行操作。总体而言,数据库邮件比早期版本的 SQL Server 中提供的邮件功能更安全、更易于管理。

管理非常大的数据库

由于可伸缩性涉及许多方面,因此设计可伸缩性很困难,特别是对于 SAP 和 Siebel 等软件供应商打包的应用程序。在 SQL Server 2005 中,许多功能提供了用于提高非常大的数据库 (VLDB) 系统可伸缩性的机制。事实上,扩展 500GB 数据库比扩展 500MB 数据库要复杂得多。备份和恢复功能的处理开销不能妨碍系统可用性。SQL Server 2005 启用了新的可伸缩性功能,包括横向分区技术、备份和恢复大型数据集的新方法以及提供更高的数据读取并发级别。本节涵盖最重要和最复杂 VLDB 技术:表分区功能。

表和索引分区

在以前的 SQL Server 版本中,分区是通过分布式分区视图 (DPV) 创建的。DPV 既不容易设置也不容易维护。在 SQL Server 2005 中,DPV 仍然可用,但已弃用。如何实现分区?

表分区分为几个步骤。首先,确定一个表是否应进行分区。这是最重要的一步。并非所有表都受益于分区。确定哪些表性能不佳。执行正常的纠正措施,例如优化索引。此时,使用 DTA 对表进行运行以查看其是否推荐分区将非常有用。另外,查看数据。该表是否包含旧数据和新数据的混合?找出是否有监管原因将这些数据保留在系统中。

选择表后,您需要定义分区键并决定分区的数量。这更棘手;分区键用于生成分区函数。用于分区的列应能够分解为范围。此外,值范围最终决定了您的表将支持多少分区。潜在的最大分区数为 1,000。简单来说,分区函数将每一行映射到其适当的分区。在确定分区列时,请考虑整体计划。子集的数量为长期分区维护提供了可能性。最常见的分区列之一是日期列。它为分解表数据提供了最自然的方式。一旦决定了分区列,就必须设计一个分区方案。

分区方案将分区函数指定的每个分区映射到一个文件组。本质上,分区方案将分区映射到一个物理位置。计划分区方案本质上涉及决定要将分区放在哪个文件组上。希望将分区放在单独的文件组上的主要原因是确保您可以独立地对分区执行备份操作,因为您可以对单个文件组执行备份。此外,您希望通过将索引放在与分区数据相同的文件组上来对齐数据。当您将索引与分区数据对齐时,维护和查询性能会得到改善。另外,请记住,分区方案在逻辑上独立于分区函数;您可以有多个方案。您的方案和函数应具有相同数量的分区。

创建文件组是下一步,它需要您考虑硬件。为了获得性能和更轻松的维护,文件组应有助于分隔数据。文件组的数量可能受硬件资源的限制。通常,最好让文件组位于不同的主轴上,以避免磁盘 I/O 问题。分隔数据也有性能优势,因为跨分区的并行性会增加。还值得考虑您的分区是否允许不同质量和数量的磁盘。例如,如果您的系统使用 RAID 10 磁盘阵列,您可能希望将最常用的数据保留在这些磁盘上。这样做有很多好处。您还可能考虑为不承受显著工作负载压力且包含旧数据的分区和文件组使用成本较低的磁盘。随着分区方案和列计划的完成以及文件组的确定和创建,您可以专注于创建分区函数和方案以及分区数据的任务。创建分区时,请记住您必须考虑两个边界:左边界和右边界。分区函数必须包含所有数据,并且应通过检查约束进行限制。

当您实际创建和设置分区时,必须创建新表。在需要分区但无法重建表结构的系统中,这可能是一个问题。分区还有一些其他限制,例如数据类型限制。您不能将 SQL CLR、timestamp、image 或 ntext 类型用作分区列。列必须是确定性的并且在列中持久化,因此您不能使用派生列。这主要影响数据仓库,因此对于非数据仓库用途,这些障碍不应成为问题。最后,分区必须位于同一节点上。

除了分区表数据之外,还可以分区索引。次级索引可以完全独立于主索引进行设置。创建语法相同。当索引和分区位于同一文件组中时,索引会进行对齐。对齐提供了几个优点;最重要的是,它提供了简化数据备份的方法。在对齐索引系统中,查询性能更好,因为查询处理的 I/O 方面得到了增强。

备份和恢复增强

对于数据库管理员来说,最令人心惊胆战的经历是接到通知,需要从数据库的媒体集进行备份,而此时媒体出现故障。此外,在以前的 SQL Server 版本中,您无法镜像备份,因此您只有一组备份可供使用。如果发生灾难且备份丢失,数据将永远丢失。SQL Server 2005 具有新的检查功能,用于确保备份数据的质量。

校验和完整性检查

SQL Server 2005 引入了 dbcc_checksum 语句,该语句可启用额外的数据验证。使用 ALTER DATABASE 命令的 SET page_verify 恢复选项启用校验和。page_verify 命令提供三种选项来发现由磁盘 I/O 错误引起的未完成 I/O 事务:

  • 撕页检测。如果指定此选项,则在将 8KB 数据库页写入磁盘时,会为每个 512 字节扇区反转一个位。当稍后读取页时,如果位处于错误状态,则表示页写入不正确,并且检测到撕页。这是默认选项。

  • 校验和。如果指定此选项,则会计算整个页内容的校验和,并在页写入磁盘时将其存储在页头中。当从磁盘读取页时,会重新计算校验和并与存储在页头中的校验和值进行比较。如果不匹配,则会向 SQL Server 错误日志和 NT 事件查看器报告错误消息。

  • 无。如果指定此选项,则 page_verify_option 设置为 OFF。未来的数据页写入将不包含校验和,并且在读取时也不会验证校验和,即使存在校验和。

磁盘 I/O 错误可能导致数据库损坏,这通常是由于电源故障或写入磁盘时发生的磁盘硬件错误造成的。CHECKSUM 选项提供了最全面的完整性检查级别,为检测磁盘硬件本身无法检测到的磁盘 I/O 错误提供了额外的保护层。

快速恢复

SQL Server 2005 通过新的、更快的恢复选项提高了 SQL Server 数据库的可用性。在事务日志滚动转发后,用户可以重新连接到正在恢复的数据库。早期版本的 SQL Server 要求用户等待直到未完成的事务回滚,即使他们不需要访问数据库的受影响部分。新的数据库选项 ALLOW ACTIVITY DURING UNDO 默认处于打开状态。

在线还原

SQL Server 2005 引入了在 SQL Server 实例运行时执行还原操作的能力。在线还原提高了 SQL Server 的可用性,因为只有正在还原的数据不可用。数据库的其余部分保持在线可用。早期版本的 SQL Server 要求您在执行还原之前将数据库置为脱机状态。

使用在线还原时,您可以选择两个选项:

  • 对整个数据库文件执行在线文件级别还原

  • 对单个数据页执行在线页级别还原

SQL Server 2005 还支持文件组的在线还原,因为文件组只不过是文件的集合。

镜像备份

SQL Server 2005 引入了对镜像备份集的支持,这提高了 SQL Server 备份的可靠性。早期版本的 SQL Server 只支持给定备份的单个副本。如果备份媒体损坏,滚动转发将需要更长的时间或失败。在 SQL Server 2005 中,备份媒体现在可以被镜像。例如,管理员可以设置四个磁带设备来备份两个媒体系列,每个媒体系列都有一个镜像。镜像中的相应卷具有相同的內容,从而在还原时可互换。管理员最多可以实现四个镜像备份集。

全文目录包含

SQL Server 2005 提供了全文目录的集成备份和还原功能。早期版本的 SQL Server 没有提供集成且可靠的机制来备份和还原全文目录。在 SQL Server 2005 中,全文目录可以与数据库数据一起备份和还原,也可以独立于数据库数据备份和还原。此功能减少了从灾难中恢复所需的时间,并简化了将数据(包括目录)从一台计算机移动到另一台计算机的任务,而无需完全重新填充目录。

此备份和还原功能提供以下能力:

  • 您可以像备份其他数据一样,将一个或多个全文目录备份到媒体或从媒体还原。

  • 它消除了还原后重新填充数据的需要。

  • 它通过在还原后滚动日志来更新全文数据以反映更改。必须启用更改跟踪才能使用此功能。

SQL Server 复制增强

SQL Server 复制支持分布式和移动部署中的数据同步,支持从电子商务到客户关系管理的所有业务线中的应用程序。Microsoft 已经在以前版本的 SQL Server 中发布了复制。


注意 - 本节不涵盖复制的所有用途和功能;它侧重于新功能。SQL Server Books Online 提供了关于复制的深入且出色的介绍。


SQL Server 2005 复制服务包括以下新功能和改进:

  • 可编程性。提供了一组 CLR 类,用于配置、管理、脚本化和监视复制。您可以使用这些对象模型以编程方式控制复制对象,例如发布和订阅。

  • 可管理性。引入了许多用于设置和管理复制拓扑的增强功能。这些包括使用“创建订阅向导”创建多个订阅、一种轻量级合并订阅服务器选项(存储的元数据少得多)以及增强的从备份进行事务性订阅的能力。此外,复制监视器得到了增强,可帮助您从一个控制台监视整个企业中的复制操作。复制监视器还经过重新设计,以便用户能够更好地理解复制操作的状态。

  • 可用性。引入了快照生成、架构复制和元数据维护的改进。在传递过程中中断的快照可以自动恢复,而无需重新发送已完全传输的文件。此外,现在可以复制更广泛的数据定义语言 (DDL) 更改,而无需使用特殊的存储过程。最后,合并复制现在具有基于保留期的自动元数据清理功能,从而可以更轻松地维护合并拓扑。

  • 商业智能/数据仓库。引入了对 Oracle 作为一流事务复制发布者的支持。Oracle 数据可以直接发布到 SQL Server,在那里您可以利用 SQL Server 和 .NET 平台提供的商业智能和数据仓库工具和技术。

  • 移动性。引入了基于消息的复制,这是通过 HTTP 或 SOAP 协议复制数据的能力。基于消息的复制非常适合通过 Internet 进行复制以及包含移动订阅服务器(如 Microsoft Windows CE 设备)的拓扑。

  • 可伸缩性和性能。引入了新的性能优化,包括过滤合并复制发布的订阅组以及为希望对发布的部分内容几乎没有更改跟踪的客户提供新的文章类型。此外,通过使用多个连接来检索和应用命令,提高了事务复制的性能。


场景:复杂拓扑中的复制管理 - 假设您在一家大公司工作,负责管理 SQL Server 数据库的复制。您在公司办事处设置了事务复制,以便连续读取发布服务器上的日志并将事务分发到订阅服务器。您还设置了合并复制,以发布公司服务器上的产品和库存信息给销售团队,并将销售团队的订单复制回公司服务器。在创建了发布和订阅之后,您使用复制监视器来定义允许数据在服务器之间复制的最大时间。您让复制监视器在后台运行,以便您可以不时地检查它,以确保数据平稳快速地流动。出现问题时,复制监视器会提醒您,然后您可以深入了解具体问题并进行修复。


SQL Server 2005 复制监视器得到了增强,可帮助您从一个控制台监视整个企业中的复制操作。复制监视器可帮助您在性能问题变得严重之前发现它们。出现问题时,新的复制监视器会提供更详细的统计信息和历史记录,以帮助您更快地排查和解决问题。

复制监视器允许您执行以下操作:

  • 在一个显示屏中查看整个企业的复制活动摘要,并根据需要钻取到更详细的信息。

  • 设置警告级别,以便在数据传递到订阅所需时间过长时,复制监视器可以向您发出警报。

  • 让复制监视器在一个小的后台窗口中运行,当同步速度变慢或发生错误时,该窗口会弹出通知。

  • 从中央位置控制同步计划、属性和通知。

  • 当复制代理上发生事件时,通过复制警报接收通知。

  • 验证订阅,以确保发布服务器和订阅服务器上的数据值相同。

  • 根据需要重新初始化一个或所有订阅到某个发布。

点对点复制

点对点事务复制专为可能读取或修改参与复制的任何数据库中的数据的应用程序而设计。例如,在线购物应用程序非常适合点对点复制。您可以通过将读取数据的查询分散到多个数据库来提高应用程序性能。此外,如果托管数据库的任何服务器不可用,应用程序可以被编程为将流量路由到其余服务器,这些服务器包含数据的相同副本。读取性能得到提高,因为活动可以分散到所有节点。拓扑的聚合更新、插入和删除性能类似于单个节点,因为最终所有更改都会传播到所有节点。

点对点拓扑中的所有节点都是对等节点:每个节点发布和订阅相同的架构和数据。可以在所有节点上进行更改(插入、更新和删除)。复制会识别何时在给定节点上应用了更改,从而防止更改循环经过节点超过一次。

建议使用点对点复制的两种基本拓扑:

  • 第一种拓扑是电子商务或基于 Web 的应用程序平台的典型代表。在这种情况下,每个对等节点服务器都有一个参与事务复制模式的数据库。Microsoft 建议将工作负载分配给对等节点,以便一个充当读取服务器,另一个充当写入服务器。写入操作会传递给读取服务器。虽然两个服务器都可以作为读取数据库运行,但事务复制要求只有一个数据库接收写入操作。

  • 第二种拓扑是其中对等节点跨越显著的时区差异,因此写入活动没有重叠。在这种情况下,所有对等节点都会接收拓扑中的事务更新,由于时区和工作时间的差异,不会发生争用。每个数据库都独立于其他数据库。由于数据库的峰值负载时间是隔离的,因此事务争用最小化。

Oracle 发布

使用 Microsoft SQL Server 2005,您可以将 Oracle 发布服务器包含在复制拓扑中,从 Oracle 版本 8.0.5 开始。发布服务器可以部署在任何 Oracle 支持的硬件和操作系统上。该功能构建在成熟的 SQL Server 快照复制和事务复制基础之上,提供相似的性能和可用性。Oracle 作为发布服务器的主要目的是将数据从 Oracle 提取到 SQL Server Analysis Services。在许多客户场景中,用于报告的旧数据存储在 Oracle 中。Oracle 发布功能专注于少数场景,而不是复制 Oracle 功能。如果您考虑使用 Oracle Publisher 功能,强烈建议您阅读 Books Online 主题。

基于 Web 的复制更新

许多复制客户要求的功能之一是能够通过超文本传输协议/安全协议 (HTTP/S) 执行合并复制。通过端口 80 允许订阅服务器请求合并的功能,使得在无法进行 VPN 连接的客户场景成为可能。服务器上的 Internet 服务器应用程序编程接口 (ISAPI) 服务充当合并复制中交换的文章的存储位置。简而言之,复制将数据提供给 Internet Information Services (IIS) 中的虚拟服务器,然后客户端应用程序(通常是 Windows Pocket PC 或笔记本电脑)连接到该虚拟服务器。连接是通过与任何其他 HTTP 命令相同的协议完成的。客户端应用程序的使用场景是数据库用户未连接到主数据存储。用户通常在其本地源上修改数据,并在连接/同步时更新主数据库。例如,销售人员可以在本地计算机上保留其客户列表,并在外出时添加新客户和订单。在一段时间结束时,她通过将其笔记本电脑连接到公司后端数据来同步数据。

性能和可伸缩性

合并复制和事务复制都提供了提高性能的新功能。复制有三个主要关注点来提高性能和可伸缩性。合并复制和事务复制都增加了对更多并发订阅服务器的支持(更高的并发性是改进领域之一)。随着订阅服务器的增加,通过新功能实现更高吞吐量级别的可伸缩性是预期的 — 这是改进的第二个领域。第三个改进领域是通过更精细地定义包集的能力来更好地控制和设计。表 3-2 描述了新的性能和可伸缩性功能。

大众化的高可用性

IT 世界的变化决定了可用性的新定义。曾经有一段可接受的计划停机时间用于系统维护。然而,随着企业 24/7 营业,系统维护窗口正在被压缩。此外,计划外停机对于依赖 IT 基础设施可用性为生的组织来说是灾难性的。这不是什么新鲜事。SQL Server 2005 提供了新的可用性技术和对现有通用技术的增强。

高可用性解决方案

SQL Server 提供了多种创建高可用性的方法。真的没有万能药。纵观客户格局,您会发现每个应用程序和场景都需要 IT 团队发挥极大的创造力。Microsoft 改进了其核心高可用性 (HA) 技术,称为故障转移群集。Microsoft 引入了一种新的日志发送技术:数据库镜像。仍然支持日志备份发送,但很少在这方面做重大工作。表 3-3 检查了三种核心技术,并展示了它们如何影响整体可用性。此表不是详尽的,但它涵盖了核心问题。请记住,HA 解决方案的目标之一是掩盖硬件和软件故障。数据库镜像和故障转移群集在这一点上是完全不同的。故障转移群集解决方案需要两个相同的系统。数据库镜像运行在商品硬件上。日志备份发送是一种热备用解决方案,仅在地理距离提供额外安全级别时才提供解决方案。

表 3-2. 新的性能和可伸缩性功能

合并复制

并发阶段代理:通过并行运行合并代理的下载阶段和上传阶段来提高合并复制的性能。当合并代理在本地区域网络 (LAN) 上运行时,或使用高吞吐量服务器到服务器配置文件时,这尤其有益。

新的仅下载文章:文章类型为仅在发布服务器上更改数据的客户提供了新的性能优化。

新的良好分区的文章为仅更改其订阅分区的客户提供了新的性能优化。由于数据已良好分区,可以跳过合并协调过程的内部步骤,从而在上传阶段提高性能。

分区组是过滤合并复制发布的新的性能优化。当订阅服务器与发布服务器同步时,发布服务器必须评估订阅服务器的过滤器,以确定哪些行属于该订阅服务器的数据集。如果没有合并分区组,则必须为自上一个合并代理为特定订阅服务器运行以来上传到发布服务器的每次更改进行分区评估。如果发布服务器运行在 SQL Server 2005 上并使用合并分区组,则每个订阅服务器仅评估符合订阅服务器筛选条件的更改。当发布中存在大量更改、订阅服务器或文章时,这可能会带来显著的性能提升。在使用合并分区组时,过滤器有一些新的限制。但是,如果满足这些限制,性能可以得到显著改善。

事务复制

通过使用多个连接来检索和应用命令,提高了多分发流的性能。当分发代理长时间未运行时,或者当要复制的命令数量出现大幅峰值时,这一点尤其有益。

快照复制

并行快照准备在快照代理中处理多个文章,同时脚本化架构或批量复制数据。管理员无需配置任何特殊选项即可利用此新功能,因为它现在已嵌入到准备快照的过程中。此功能允许 SQL Server 以比早期版本的 SQL Server 更快、更高效的速度准备快照。


注意 - 尽管 Microsoft 可能不同意,但我没有将复制包含在高可用性技术矩阵中,因为复制不提供自动故障检测机制。此外,它不提供任何恢复或撤销错误的方法。复制发生的情况是,许多公司使用它将数据副本分发到拥有大量只读数据目录的 Web 群集。这个服务器的 Web 群集在某种意义上掩盖了单点故障。毕竟,如果服务器 A 发生故障,并且它与服务器 B 和 C 共享工作,那么剩余的两个服务器应该能够承担工作负载。这并不能使其成为真正的 HA 解决方案,而是使其成为负载平衡解决方案。


表 3-3 高可用性解决方案比较

可用性功能

数据库镜像

故障转移群集

日志备份发送

备用类型

即时

故障检测

自动故障转移

否;网络负载均衡 (NLB) 有帮助

掩盖磁盘故障

否;共享磁盘

掩盖 SQL 进程故障

掩盖其他进程故障

元数据支持

数据库

所有系统和数据库

数据库

事务一致性

事务是最新的

是,始终最新

是,始终最新

否,自上次日志备份以来

感知停机时间

30 秒加上数据库恢复时间

秒加上数据库恢复时间

对客户端透明

是;自动重定向

是;重连到同一 IP

否;应用程序必须知道备用

需要特殊硬件

否;需要重复系统

来自群集硬件兼容性列表 (HCL) 的专用硬件

否;需要重复系统

距离限制

几乎无限

100 英里

分散

复杂性

一些

更多

一些

备用可访问

备用可访问;对性能有一定影响

备用永远不可访问

是;多个副本,只读,百分比取决于更新频率

对性能的影响

无影响到最小影响

无影响

最小;主副本上的文件复制

对备份策略的影响

无影响

必须能够从任何节点备份

最小;许多小备份

此外,您还应考虑操作系统,以规划您的 HA 解决方案。表 3-4 显示了 Standard Edition 和 Enterprise Edition 之间的差异。

表 3-4 - Standard Edition 和 Enterprise Edition 在 HA 解决方案上的差异

HA 技术

Standard Edition

Enterprise Edition

故障转移群集

最多八个节点

数据库镜像

可用

数据库快照

可用

多实例

16 个实例

50 个实例

故障转移群集

SQL Server 2005 故障转移群集支持服务器级故障的高可用性。通过故障转移群集,操作系统和 SQL Server 协同工作,通过提供冗余硬件和在主服务器发生故障时自动将数据库服务器转移到辅助硬件来提供故障保护。故障转移群集支持多达八个节点,具体取决于服务器上运行的 Microsoft Windows Server 2003 的版本。

SQL Server 已将故障转移群集的功能扩展到 SQL Server Analysis Services、Notification Services 和 SQL Server Replication。在 SQL Server 2000 中,SQL Server Agent 和其他作业管理和处理功能不包含在故障转移群集中。现在,这些技术已具有群集感知能力。SQL Server 故障转移群集现在是一个更完整的服务器级冗余解决方案,尽管群集解决方案难以正确实施且成本高昂。对于大多数客户来说,故障转移群集仅用于他们最有价值的事务性数据库。

回顾表 3-3,您会发现一些使故障转移群集成为最佳 HA 技术的特性。首先,故障转移群集在操作系统级别运行。这意味着故障转移群集能够感知操作系统进程故障。某些操作系统级别的进程可能会干扰 SQL Server 或阻止其响应连接请求。此外,故障转移群集涵盖了参与群集的所有服务器上的数据库。这意味着 master 受到保护。此外,SQL Server 2005 有一个隐藏的数据库称为 System Resource,它包含在群集中,但在数据库镜像中无法访问。

另一方面,拥有两个同步的服务器,其中一个“什么都不做”,成本非常高且难以管理。正如我之前所说,如果它是任务关键型的,它必须是故障转移群集。其他解决方案只会变成一场噩梦。另一个值得注意的事情是,所有“好东西”(可以说)都在 Enterprise Edition 中,因此该许可级别的最佳用途是故障转移群集。

数据库镜像

SQL Server 引入了一套新技术,允许您创建一个与主数据库保持紧密同步的热备用数据库。数据库镜像允许您创建热备用数据库,提供快速故障转移,而不会丢失已提交事务保存的数据。您可以将数据库镜像视为实时日志发送。如果主系统发生故障,应用程序几乎可以立即重新连接到辅助服务器上的数据库,而无需等待恢复完成。

数据库镜像功能受您运行的 SQL Server 版本的影响。如果您选择使用 Standard Edition 进行镜像,您的故障转移选项将受到限制,如表 3-5 所示。也就是说,如果您可以接受手动故障转移,Standard Edition 可能就足够了。尽管 Developer Edition 拥有 Enterprise Edition 的所有功能,但它并未获准在生产环境中使用。任何 SQL Server 版本都可以作为见证,包括 Express Edition。

表 3-5 数据镜像功能

功能

Standard Edition

Enterprise Edition

伙伴

见证

完全安全

安全关闭(高性能模式)

并行重做(使用多个线程重放事务日志)

数据库快照

在这些差异中,最值得注意的是缺少数据库快照,这不影响镜像的部署。此外,并行重做可能会影响大型数据库。有趣的是,Standard Edition 不支持高性能模式。Microsoft 可能将许多镜像功能排除在 Standard Edition 之外,只是为了销售更多的 Enterprise Edition,因为在许多场景中高性能模式是可取的。我将包含任何事务量大的应用程序以及地理距离可能允许业务接受损失/重做的应用程序。

以下是一些您可能需要使用数据库镜像的场景:

  • 管理员需要提高支持多个关键应用程序的 SQL Server 数据库的可用性。管理员希望解决方案能够自动快速故障转移,不需要共享存储组件或特殊控制器,并在故障转移后自动与主数据库重新同步。通过配置具有主、辅助和见证服务器的数据库镜像,管理员可以实现一个系统,该系统在服务器故障或主数据库连接丢失时自动故障转移。

  • 管理员希望保护非任务关键但重要的数据库。数据库镜像为 Notification Services、Reporting Services 和 SQL Server Service Broker 数据库提供了良好的解决方案。

  • 如果您将应用程序设计为使用许多较小的面向服务体系结构 (SOA) 数据库,则使用数据库镜像提供了一种经济高效的方式来串联服务器,从而提供一系列可轮换的故障转移数据库服务器。

此时,理解数据库镜像的应用程序和数据库影响非常重要。数据库镜像是一项单数据库技术。故障转移群集按设计包含所有系统数据库、用户、角色和 SQL Agent 作业等,但数据库镜像不包含。这表示

如果您的应用程序使用链接服务器进行跨数据库调用以访问镜像数据库外部的对象,则该应用程序不适合镜像。在考虑数据库镜像时,请花大量时间理解数据库可伸缩性场景。尽管确实需要镜像不使用完全相同的硬件,但未使用奇偶校验服务器可能会导致客户满意度和性能出现问题。

数据库镜像概念和混淆

您必须掌握一系列新的词汇和概念。最基本的是,数据库镜像只需要两个“伙伴”——主服务器和镜像服务器。但是,根据您的需求,您也可以选择拥有一个见证服务器。此外,您还需要在事务安全性与性能之间做出决定。让我们深入探讨基本概念。

数据库镜像系统需要三台运行 SQL Server 的服务器。每台服务器都有特定的架构角色:

  • 主服务器。应用程序连接并在其中处理事务的服务器。

  • 镜像服务器。事务日志记录的目标,可以同步或异步应用。镜像服务器处于不允许直接读取数据的状态。当在主服务器上生成事务日志记录时,它们会连续重放到镜像服务器上,从而产生一个镜像服务器的状态,该状态通常仅比主服务器落后于单个日志写入中写入的日志的重放时间。这提供了数据在特定时间点的副本。

  • 见证服务器。架构中的仲裁者,在确定哪个服务器是主服务器以及哪个是镜像服务器时提供“平局”的“投票”。为了将一台服务器指定为主服务器并因此成为所有事务的目标,架构中的两台服务器必须达成一致。从客户端应用程序的角度来看,从一台服务器到另一台服务器的故障转移是自动的且几乎瞬时的。只有在需要自动故障转移时才需要见证服务器。为了自动发生故障转移,伙伴(镜像服务器或主服务器和见证服务器)必须达到仲裁。当主服务器未能响应见证服务器的 ping 时,镜像服务器将被提升为主服务器并接管工作。但是,见证服务器不会向 DBA 发送电子邮件通知主服务器已关闭!

数据库镜像最重要的事情之一,除了从主服务器到镜像服务器故障转移过程中提供的极低延迟之外,是双向同步更改的能力。如果主服务器脱机并且应用程序故障转移到镜像服务器,则镜像服务器将成为架构中的主服务器。当发生故障的服务器重新上线时,它将被指定为镜像服务器。来自主服务器的事务日志记录将被应用到它上面,以使其与该时间点数据库的状态保持同步。

参与数据库镜像的数据库具有三种伙伴模式。作为管理员,您可以在“高可用性”模式、“高保护”模式和“高性能”模式之间进行选择。在高性能模式下,事务安全性已关闭。基本上,这意味着当设置为“关闭”时,主服务器不会等待镜像服务器确认收到或固化事务。在这种情况下,主服务器将事务发送到网络并继续。根据流量,这可能意味着很小的延迟或很大的延迟。在测试过程中,您应该尝试理解风险级别。

在高保护模式下,通过让主服务器等待镜像服务器确认收到事务来确保事务安全性。这与高可用性模式相似,但有一项例外。高可用性模式提供了自动故障转移的可能性,而高保护模式则不提供。您也可以将数据库镜像视为同步技术。我的意思是,对于高可用性和高保护模式,事务会在服务器之间同步;在高性能模式下,它们不一定同步。

准备使用数据库镜像时,您需要考虑一些重要事项:

  • 主数据库必须使用 FULL 恢复备份模型。这意味着主数据库应执行大量批量插入工作,因为批量操作产生的日志文件不会与镜像服务器共享。为什么?过多的带宽和日志文件流量会导致镜像无法正常工作。

  • 镜像数据库必须使用 NORECOVERY 模式从主数据库的当前备份进行初始化,然后依次恢复主数据库的事务日志。此过程确保数据一致性以及关系初始期的同步。没有这一点,镜像就会赶上太多。

  • 镜像伙伴的数据库名称必须相同。

  • 在伙伴关系会话期间,您无法直接访问镜像服务器。如果需要访问数据库,请使用数据库快照。

数据库镜像状态一览

数据库状态在数据库镜像会话期间保持不变。当两个服务器配对时,会话开始。状态可以在 sys.database_mirroring 目录视图中找到。您可以查看所有状态号及其描述,方法是阅读 Books Online 中的相关主题。此外,还有几个服务器概念值得注意。这些术语有助于您了解会话的运行情况:

  • 暴露是指主服务器正在处理事务,但没有日志数据发送到镜像服务器。发生这种情况时,镜像不起作用。本质上,您在事务方面不是受保护状态。

  • 无法服务数据库是指主服务器不允许任何用户连接到数据库或处理任何事务。

  • 隔离是指服务器无法与镜像会话中的任何其他服务器联系,反之亦然。此状态实际上是通信中断。

  • 同步是指安全设置为完全,记录成功发送到镜像服务器,并且镜像服务器固化日志。

  • 同步中发生在安全设置为 OFF 时,并且日志始终处于追赶状态。

  • 挂起是会话中断时发生的状态。当会话暂停或镜像服务器出现重做错误时,会话状态设置为 SUSPENDED。

有关数据库镜像和状态的完整讨论,请参阅 Books Online。

自动客户端重定向

数据库镜像成功的关键要素之一是使用自动客户端重定向。这是一种缓存主服务器和镜像服务器位置以供客户端连接的新技术。您只能将客户端重定向与新的数据访问协议一起使用:ADO.NET 2.0 和 SQL Native Client。它相对容易使用:在连接字符串中,您提供主服务器和镜像数据库的名称或 IP 地址。当客户端连接时,客户端访问代码会检查确定哪个计算机可用,然后进行相应的连接。(以下是一个连接字符串示例:“server=Partner_A; failover partner=Partner_B; database=AdventureWorks”。)有关自动客户端重定向的更多信息,请参阅 SQL Server Books Online 并搜索主题“Client Connections to a Mirrored Database”。

要使数据库镜像使用极其简单,请通过“数据库属性”对话框设置镜像系统。(请参阅第 2 章,“关于安全性,每个人都应该知道什么”,了解与数据库镜像相关的安全问题。)


注意 - 自动客户端重定向仅在 Enterprise Edition 中可用。


日志备份发送

日志备份发送具有一段有趣的历程。使用 SQL Server 2000 可以进行日志发送。最初 Microsoft 不支持它,但客户对热备用技术的需求推动了该技术进入支持模式。

实际上,日志发送确实是一种备份日志发送技术。日志发送允许您自动将事务日志备份从一个数据库(称为主数据库)发送到另一个服务器上的辅助数据库(称为辅助服务器)。在辅助服务器上,这些事务日志备份会被恢复到辅助数据库,使其与主数据库保持紧密同步。一个可选的第三台服务器(称为监视服务器)记录备份和恢复操作的历史记录和状态,并在这些操作未能按计划发生时发出警报。

与实时日志发送技术数据库镜像相比,备份日志发送对于可以承受一些数据丢失的非任务关键型应用程序来说是一种足够好的解决方案。此外,日志发送服务器可以放置在很远的距离,并且它们可以在“大自然母亲”可能造成麻烦的情况下提供解决方案。在 SQL Server 2005 中,为了提高此功能的性能或可靠性,所做的工作很少。在 SQL Server 2005 中,您无法从 SQL Server 2000 升级日志发送。相反,您必须通过在每个服务器(主服务器和辅助服务器)都脱机的情况下应用升级来迁移日志发送数据库。(您可以通过访问 SQL Server 2005 Books Online 并搜索主题“Upgrading a SQL Server 2000 Log Shipping Configuration”来了解如何执行此操作。)您还可以通过打开“数据库属性”对话框并在“事务性日志发送”对话框中提供所需信息来设置日志发送。

通用数据库可用性

Microsoft 有两项新功能可帮助应用程序连接到数据库,这被称为通用数据库可用性:

  • 表分区。表分区是将表分解为更小的子表,然后将它们用作一个表的能力。这可以提高查询性能并使数据库更易于管理。

  • 快照隔离。这是一种新的事务锁定方案,可防止读取者阻塞写入者,并为数据用户提供数据库的一致时间点视图。此快照隔离的实现与 ANSI 标准的隔离级别重叠。

在深入探讨表分区细节之前,您应该更好地理解为什么分区很有趣。回到基本的数据库开发,数据库表被设计用来存储实体​​的所有属性。例如,您的客户表包含相关的客户信息。在销售表中,订单头表和订单明细表共同包含订单的相关特征。随着时间的推移,这些表会变大。此外,表的访问模式不一致。客户表更新的次数相对少于订单明细表。此外,组织现在发现,商业智能和报告的使用要求将旧数据保留在活动系统中更长时间。过了一段时间,表的巨大尺寸对查询性能不利。那么什么使表变大?行数和每行的位数。第一个因素对于查询处理器来说是重要的。您可能会得出结论,大表是性能不佳的表。您还可以补充说,需要很长时间才能正确维护索引的表可能是一个大表。分区的简单目标是通过将表分解为更小的部分来使其更易于管理。SQL Server 2005 仅支持一种分区——范围分区。一种称为垂直分区的分区类型将列分解为分区;这通过分布式分区视图得到支持。测试和使用分区有许多好处:

  • 更易于管理。可以添加和删除滑动窗口分区。

  • 通过增加多 CPU 系统的并行性,提高分区表的查询性能。

  • 大规模删除和插入可以大大提高。

  • 关系数据仓库的创建得到简化。

快照隔离

快照隔离提供了一种锁定机制,可防止读取者阻塞写入者,从而在高混合工作负载的系统上运行。理想情况下,数据会按使用情况进行划分:读取数据库和写入数据库。这似乎是一个合乎逻辑的模型,但实际上很难做到。交易系统侧重于插入和更新,使用存储过程或动态 Transact-SQL 插入新信息。只读类型数据库大量使用索引和视图,查询需要大量的缓存和计算能力。快照隔离实现为一种乐观锁定策略。DBA 拥有精细控制权,允许在查询或存储过程级别使用快照隔离。需要在数据库级别启用快照隔离。在 SQL Server 内部,快照隔离会创建一个一致的读取数据版本并将其放置在 TempDB 中。

以下是一些您可能需要使用快照隔离的场景:

  • 一家大型零售公司记录所有交易并实时更新库存水平。员工需要在此数据库上执行报告和即席查询。DBA 可以将隔离级别设置为快照,以允许报告和查询与库存应用程序并行运行。

  • DBA 需要提高聚合(如 AVG、COUNT 和 SUM)、索引交叉连接和索引连接的一致性,而无需将读取扫描升级到更高的隔离级别。

快照隔离使用一种行版本控制机制,该机制存储连接时要查询的数据的版本。SQL-99 标准定义了以下隔离级别,SQL Server 支持所有这些级别:

  • 未提交的读取(最低级别,其中事务仅隔离到足以确保不会读取物理损坏的数据)

  • 已提交的读取(数据库引擎默认级别)

  • 可重复读取

  • 可串行化(最高级别,其中事务相互隔离)

读取已提交隔离级别的新实现使用行版本控制,前提是 READ_COMMITTED_SNAPSHOT 数据库选项设置为 ON。如果选项设置为 OFF,则读取已提交隔离级别使用与早期版本 SQL Server 相同的锁定类型。

索引视图

Microsoft 在 SQL Server 2005 中提供的 Oracle 功能是索引视图。索引视图提高了应用程序的并发性。在 Oracle 领域,索引视图称为物化视图。当视图包含索引时,该索引将以与具有聚集索引的表存储的方式相同的方式创建并存储在唯一的聚集索引中。在创建第一个唯一索引后,可以创建非聚集次级索引。在此新功能中,开发人员可以使用索引外部连接、标量聚合以及使用 ROLLUP 和 CUBE 函数的批处理。索引视图的优点如下:

  • 可以消除每次引用该视图的查询动态生成结果集的开销。

  • 优化器可以在不直接在 FROM 子句中命名该视图的查询中使用视图索引。

  • 引用索引视图中列的现有查询可以受益于从索引视图检索数据的改进效率,而无需重新编码。

以下是一些您可能需要使用索引视图的场景:

  • 一个频繁执行的查询聚合了来自多个表的数据,并使用外部连接来合并结果。开发人员设计了一个视图来提供与查询相同的结果。通过支持包含外部连接的索引视图,开发人员可以索引该视图并提供一种更有效的解决方案来检索聚合数据。

  • 您有一个包含多个计算列的数据库,或者您希望将计算列存储在视图中。索引视图通过使用索引为这些对象提供更好的查询性能。

公共语言运行时和数据库管理员

在 SQL Server 2005 的 Beta 版期间,我向数百名数据库管理员展示了 CLR 功能。他们的反应从“无所谓”到“别把它放进我的数据库!”。本节有望揭开 CLR 集成到 SQL Server 2005 的神秘面纱。如果我只说“别担心”那将是失职。揭开集成过程的神秘面纱可能是有价值的。SQL Server 2005 的核心功能都不是以托管代码运行的。也就是说,SMO 接口全部是托管代码,SQL Server Management Studio 是托管代码,Reporting Services 中的新报表生成器也是托管代码。第 4 章,“数据库开发功能”涵盖了如何以及何时使用 CLR。本节涵盖了管理 SQL Server 中程序集的 MRAI。

集成有多深入?

公共语言运行时 (CLR) 与数据库引擎深度集成。CLR 本质上是一种托管应用程序的引擎——一种使用托管代码创建的特殊应用程序。SQL Server 实际上是托管代码的共宿主。SQL 引擎直接与 CLR 协作,以管理已放置在 SQL Server 内部并由 Transact-SQL 或 MDX 查询调用的程序集。图 3-8 说明了 SQL Server 引擎与 CLR 之间的耦合。

图 3-8 SQL 引擎与 CLR 之间的耦合。

当您在 SQL Server 中创建程序集时,这些代码块会被加载到数据库中的一个表中。程序集被注册,但不会自动加载到内存中。代码块仅存在于数据库中。CLR/托管层与 SQL 操作系统 (OS) 之间的交互一直持续到程序集被过程调用。在调用时,SQL Server 引擎与 CLR 协作以管理内存、执行和已为该程序集运行的代码的销毁。因此,CLR 通过 SQL OS 进行以下操作:

  • 内存。SQL Server 管理自己的内存。CLR 根据需要向 SQL 请求内存。

  • 线程/光纤用于完成工作。由于 SQL Server 本机使用这些,因此由 SQL 管理 CLR 是有意义的。所有线程都由 SQL Server 管理。

  • 同步是将数据移入和移出程序集到 TDS 和内存中。

托管层具有一组 API,用于管理 SQL Server OS 和 CLR 之间的通信。调用对象时,CLR 会向 SQL Server 请求内存缓冲区、线程分配和安全性。托管层管理多个安全层。CLR 使用称为应用程序域的东西来创建执行上下文,它实际上只是一个容器,用于包含特定命名空间中找到的所有托管代码。应用程序域提供一个控制程序集间交互的容器。基本上,不同应用程序域之间没有交互。因此,如果发生问题(例如内存问题),应用程序域是 SQL Server 卸载程序集的主要容器。CLR 管理程序集的升级策略。CLR 还维护程序集的[状态]。

此主题可以占用一整章,但简而言之,以下是您需要了解的全部内容:所有内存分配都通过 SQL Server 从 CLR 进行。大多数 CLR 内存(GC Heap)来自多页内存分配器(在 Buffer-pool 或 MemToLeave 之外)。对于内存密集型操作,SQL OS 会指示 CLR 启动垃圾回收以清除内存。请注意,SQL Server 中的 MAX Memory 设置不包括 CLR。这是因为 CLR 存在于操作系统内存中,而不是 SQL OS 中。要了解 CLR 的情况,请查看以下 DMV:

Sys.dm_os_memory_clerks
Sys.dm_os_memory_objects

SQL OS 和 CLR 之间的交互大部分是面向线程的。线程由 SQL Server 调度程序管理,因此它们对 SQL Profiler 和 Activity Monitor 可见。用于程序集监视的 SQL Profiler 性能计数器包括 # GC 和分配的内存量。查看 SQLCLR 和 SQLCLRASSEMBLY 的内存计数器。线程是协作调度的。SQL Server 调度程序旨在惩罚非让步任务 — 无论是托管代码还是 Transact-SQL — 强制它们返回。这可以防止非让步任务导致服务器崩溃。不让步的任务被称为停止,然后放回队列或强制跳过轮次。

以下是监视程序集的有趣方法列表:

  • Profiler 跟踪事件

    • CLR:load assembly 监视程序集加载请求(成功和失败)

    • SQL:BatchStarting, BatchCompleted

    • SP:Starting, Completed, StmtStarting, StmtCompleted 监视 Transact-SQL 和 CLR 例程的执行

  • 性能计数器

    • SQL Server: Total CLR time

    • .NET CLR Memory

    • Processor

  • DMV 和目录视图

    • sys.assembly* 显示有关存储的程序集的基本信息

    • sys.dm_os_memory_clerks

    • sys.dm_clr*

    • sys.dm_exec_query_stats

    • sys.dm_exec_requests

    • sys.dm_exec_cached_plans

有关何时以及如何使用托管代码的更多见解,请参阅第 4 章和 Books Online。此主题对 SQL Server 来说非常新,并且在 Beta 过程中表达了严重的担忧,但您有许多资源可以帮助您快速上手。

商业智能和数据库管理员

第 5 章,“商业智能概述”涵盖了 SQL Server 商业智能 (BI) 平台的新功能。对于普通 DBA 来说,BI 似乎是花哨的报告,实际上也是如此。但转折点在于:Analysis Services、SQL Server Integration Services 和 Reporting Services 中的许多新功能将渗透到 DBA 的工作中。首先,我建议 DBA 阅读第 5 章。许多 DBA 会发现新的 Reporting Services 功能令人兴奋且有用,特别是那些为高管生成报告的 DBA。我想向您和您的同事提出一些问题供您思考:

  • Reporting Services(尤其是新的即席报告工具 Report Builder)对您的服务器的安全和性能有何影响?服务器应该有多少 RAM?

  • 我们应该使用 32 位还是 64 位平台?

  • 我们在一个 SQL Server 实例中运行多少应用程序?

  • 如何将 Analysis Services、Integration Services 和 Reporting Services 纳入我们的灾难恢复计划并进行管理?随着这些功能被纳入高可用性,我们如何管理复杂性?

  • 通过 SQL Server Integration Services (SSIS) 拥有提取、转换和加载服务器的能力,您如何构建一个使用公司最佳技术的基础设施?

随着他们转向 SQL Server 2005,组织将不得不处理这些类型的问题(以及更多问题)。

摘要

对于 DBA 来说,SQL Server 的不同版本之间变化不大。DBA 会欢迎许多节省时间的功能,以及新的可扩展性和可用性功能。SQL Server 改进了其大型数据库技术组合,以提高大型数据库的可用性。这些新技术为 IT 人员带来了新的挑战和机遇。DBA 的角色正在不断发展。

本章介绍了新的管理工具和 .NET 程序集,用于以编程方式处理 SQL Server。它还介绍了用于监视和管理 SQL Server 的新技术,并讨论了大型数据库、备份和恢复以及 SQL Server 复制的功能。最后,本章讨论了数据库邮件以及一些与数据库管理相关的商业智能/分析功能。

© . All rights reserved.