Microsoft SQL Server 2012 简介

Ross Mistry, Stacia Misner

摘要: 本书讨论了 Microsoft SQL Server 2012 的改进和新功能: 安全性和高可用性、 企业管理、 商业智能服务与开发等等 。 数据库管理员，应用开发和技术决策者都能通过阅读本书了解 SQL Server 2012 的优势。

类别: 概述
适用于: SQL Server 2012
来源: 白皮书
电子书出版日期: 2012 年 6 月

Copyright © 2012 by Microsoft Corporation

保留所有权利 No part of the contents of this book may be reproduced or transmitted in any form or by any means without the written permission of the publisher.

Microsoft and the trademarks listed at http://www.microsoft.com/about/legal/en/us/IntellectualProperty/Trademarks/EN-US.aspx are trademarks of the Microsoft group of companies. All other marks are property of their respective owners.

The example companies, organizations, products, domain names, email addresses, logos, people, places, and events depicted herein are fictitious. No association with any real company, organization, product, domain name, email address, logo, person, place, or event is intended or should be inferred.

This book expresses the author’s views and opinions. The information contained in this book is provided without any express, statutory, or implied warranties. Neither the authors, Microsoft Corporation, nor its resellers, or distributors will be held liable for any damages caused or alleged to be caused either directly or indirectly by this book.

目录

简介

本手册适用的人群

假设前提

本手册不适用的人群

本手册的编排方式

本手册中的约定和特色

预发布软件

致谢

勘误表和手册支持

我们希望收到您的反馈

联系联系

SQL Server 2012 版本和引擎增强功能

针对数据库管理员的 SQL Server 2012 增强功能

可用性增强功能

可伸缩性和性能增强功能

可管理性增强功能

安全性增强功能

可编程性增强功能

SQL Server 2012 版本

Enterprise Edition

Standard Edition

Business Intelligence Edition

专用版本

SQL Server 2012 许可概述

硬件和软件要求

安装、升级和迁移策略

就地升级

就地升级的利与弊

SQL Server 2012 就地升级策略概述

并行迁移

并行迁移的利与弊

SQL Server 2012 并行策略概述

高可用性和灾难恢复增强功能

SQL Server AlwaysOn ：灵活、集成的解决方案

AlwaysOn 可用性组

理解概念和术语

可用性副本角色

数据同步模式

可用性组故障转移模式

辅助副本中的连接模式

可用性组侦听器

配置可用性组

先决条件

部署示例

使用仪表板监视可用性组

活动辅助副本

对辅助副本的只读访问

辅助副本上的备份

AlwaysOn 故障转移群集实例

支持在 Windows Server Core 上部署 SQL Server 2012

在 Server Core 安装 SQL Server 2012 的先决条件

Server Core 上支持的 SQL Server 功能

在 Server Core 上安装 SQL Server 的安装选项

其他高可用性和灾难恢复增强功能

支持服务器消息块

数据库恢复顾问

联机操作

滚动升级和修补管理

性能和可伸缩性

列存储索引概述

列存储索引的基础知识和体系结构

在使用列存储索引时如何存储数据？

列存储索引是如何显著提高查询速度的？

批模式处理

列存储索引的存储及其组织方式

列存储索引支持和 SQL Server 2012

列存储索引的限制

适合生成列存储索引的情形

不适合生成列存储索引的情形

加载新数据

创建列存储索引

使用 SQL Server Management Studio 创建列存储索引

使用 Transact-SQL 创建列存储索引

使用列存储索引

使用列存储索引提示

列存储索引的注意事项和最佳做法

安全性增强功能

SQL Server 2012 中的安全性增强功能

安全可管理性改进

组的默认架构

用户定义的服务器角色

创建和管理服务器角色

审核增强功能

在所有 SKU 上都支持了审核

改进了弹性

使用 SSMS 创建新的审核

用户定义的审核事件

记录筛选

数据库身份验证增强功能

启用包含数据库

创建用户

与包含数据库身份验证有关的安全问题

其他安全增强功能

密码更改

与 SharePoint 和 Active Directory 紧密集成

设置增强功能

新权限

可编程性和超越关系增强功能

使用超越关系范例的难点

SQL Server 2012 超越关系目标

丰富的非结构化数据和服务生态系统

超越关系示例

FILESTREAM 增强功能

FileTable

FileTable 先决条件

在 SQL Server 实例上启用 FILESTREAM

在数据库级别启用目录名称和非事务性访问

配置 FILESTREAM 文件组和数据库文件并指定 FileTable 目录

创建 FileTable

将文档和文件复制到 FileTable

在 SSMS 中通过 FileTable 查看文档

管理 FileTable

全文搜索

统计语义搜索

配置语义搜索

语义搜索示例

在文档中查找关键短语

查找相似或相关文档

查找使文档相似或相关的关键短语

空间增强功能

空间数据方案

SQL Server 中支持的空间数据特征

空间类型改进

其他空间改进

扩展事件

Integration Services

开发人员体验

“添加新项目”对话框

常规界面更改

“入门”窗口

SSIS 工具箱

界面改进

项安排

共享连接管理器

脚本引擎

表达式指示器

撤消和重做

按名称对包排序

状态指示器

控制流

表达式任务

执行包任务

数据流

源和目标

源和目标助手

ODBC 源和目标

平面文件源

转换

透视转换

行计数转换

合并和合并联接转换

DQS 清理转换

列引用

没有列引用的组件

解决引用编辑器

可折叠的分组

数据查看器

变更数据捕获支持

CDC 控制流

CDC 数据流

CDC 源

CDC 拆分器

灵活的包设计

变量

表达式

表达式结果长度

新函数

部署模型

支持的部署模型

项目部署模型的功能

项目部署工作流

生成

部署

导入

转换

参数

项目参数

包参数

参数用法

部署后的参数值

服务器默认值

执行参数值

Integration Services 目录

目录创建

目录属性

加密

操作

项目版本控制

环境对象

环境

环境变量

环境引用

管理

验证

包执行

工具日志记录和故障排除

包执行日志

数据分流

报告

安全性

包文件格式

Data Quality Services

Data Quality Services 体系结构

数据质量服务器

数据质量客户端

知识库管理

域管理

“DQS 数据”知识库

新建知识库

结束“域管理”活动

知识发现

映射

发现

管理域值

匹配策略

映射

匹配策略

匹配结果

数据质量项目

清理项目

映射

清理

管理和查看结果

导出

匹配项目

映射

匹配

导出

管理

活动监视

配置

引用数据

常规设置

日志设置

集成

Integration Services

DQS 连接管理器

DQS 清理转换

Master Data Services

Master Data Services

入门

升级注意事项

配置

主数据管理器

资源管理器

实体管理

多对多映射

层次结构管理

集合管理

集成管理

用户和组权限

模型部署

MDS Excel 外接程序

安装 MDS 外接程序

主数据管理

连接

数据检索

数据发布

建模任务

实体和属性

基于域的属性

快捷查询文件

数据质量匹配

其他更改

SharePoint 集成

元数据

大容量更新和导出

事务

Windows PowerShell

Analysis Services 和 PowerPivot

Analysis Services

服务器模式

Analysis Services 项目

表格建模

工作区数据库

表导入向导

表格模型设计器

关系

计算列

度量值

关键绩效指标

层次结构

透视

分区

角色

在 Excel 中分析

报表属性

DirectQuery 模式

部署

多维模型存储

服务器管理

事件跟踪

XML for Analysis 架构行集

体系结构的改进

可编程性

PowerPivot for Excel

安装和升级

可用性

模型增强功能

DAX

PowerPivot for SharePoint

安装和配置

管理

磁盘空间使用情况

服务器运行状况规则

数据刷新配置

Reporting Services

新的呈现器

Excel 2010 呈现器

Word 2010 呈现器

SharePoint 共享服务体系结构

SharePoint 版本支持的功能

共享服务体系结构的优点

服务应用程序配置

Power View

数据源

Power View 设计环境

数据可视化

图表

排列

卡片和图块

播放轴

序列图

排序顺序

多个视图

突出显示的值

筛选器

切片器

图块容器

视图筛选器

可视化对象筛选器

显示模式

PowerPoint 导出

数据警报

数据警报设计器

警报服务

数据警报管理器

警报配置

简介

Microsoft SQL Server 2012 是 Microsoft 推出的首个可用于云的信息平台。该平台为企业提供了有效的工具，用来保护、释放并扩展企业数据的强大功能；此外，该平台可跨越多种设备和数据源工作，从台式机、手机和平板电脑到数据中心乃至私有云和公有云，适用范围极其广泛。 Microsoft SQL Server 2012 简介一章介绍了 Microsoft SQL Server 2012 中的新增和改进的功能，这些功能可确保实现关键任务的可靠性、深入的数据洞察力以及在您的企业环境中使用云。

阅读本手册时，您会发现 SQL Server 2012 中充满了令人兴奋的增强功能和新增功能。这些功能使您能以低廉的总拥有成本大大提升性能和可用性、利用整个组织范围内无所不及的数据发现能力增进对企业全新的深入了解，并且加速了业务解决方案的制定全部依您的条件量身打造！

本手册适用的人群

本手册适用于所有对 SQL Server 2012 感兴趣并且想要了解其功能的用户。受篇幅所限，对于 SQL Server 有别于其他数据库或以往版本的每项功能，我们无法面面俱到，所以我们假定您已对 SQL Server 有一定的了解。您可能是数据库管理员 (DBA)、应用程序开发人员、商业智能解决方案架构师、高级用户或技术决策者。无论您是以上哪种角色，我们都希望您可以通过阅读本手册发现最令您受益的 SQL Server 2012 功能。

假设前提

本手册是从数据库管理员的角度和商业智能的角度来介绍的，因此您至少应具备 SQL Server 的基本知识，而且还需要了解产品的相关组件（例如，数据库引擎、 Analysis Services、 Reporting Services 和 Integration Services）。

本手册不适用的人群

如前所述，本手册旨在为读者提供 SQL Server 2012 相关功能和特性的简要介绍，而不是详细的综合指南。此外，本产品进行了 250 多项的全新改进，所以本手册无法巨细无遗地介绍每项改进。

本手册的编排方式

SQL Server 2012 与其以往版本一样，不只是一个数据库引擎。它由一系列组件构成，您可以单独实施各个组件，也可以将多个组件作为一个组来实施，以便形成可伸缩的可用于云的信息平台。从广义上讲，这个可用于云的信息平台包含两类组件：帮助您管理数据的组件和帮助您提供商业智能 (BI) 的组件。相应地，我们将本手册分为两部分，专门介绍以上两方面的新增功能。

第 1 部分“数据库管理”面向数据库管理员 (DBA) 而编写，向读者介绍了 SQL Server 2012 中的众多创新。第 1 章“SQL Server 2012 版本和引擎增强功能”讨论与可用性、可伸缩性、性能、可管理性、安全性和可编程性相关的关键增强功能。随后概述了不同的 SQL Server 2012 版本、硬件和软件要求以及可用的安装、升级和迁移策略。在第 2 章“高可用性和灾难恢复增强功能”中，读者会了解 SQL Server 2012 中新增的 AlwaysOn 功能（具体而言就是 AlwaysOn 可用性组），以及如何使用它们实现更高的数据置信度和相关功能。第 3 章“性能和可伸缩性”介绍了一种名为“列存储”的新型索引，并解释了如何利用它显著加快数据仓库工作负载和其他本质上相似的查询的处理速度。第 4 章“安全增强功能”涵盖与本产品相关的新增安全增强功能，如针对安全性管理方面的增强以及审核和身份验证方面的增强功能。最后，第 5 章“可编程性和超越关系增强功能”讨论积极影响非结构化数据的新增超越关系增强功能，包括对现有技术特性（如全文搜索、空间数据，FILESTREAM）的优化，以及 FileTable 和统计语义搜索之类的全新功能。

第 2 部分“商业智能开发”面向有以下需要的读者编写：需要了解 SQL Server 2012 如何帮助他们更轻松地执行数据集成、数据质量改进、主数据管理、数据分析和报告等任务。第 6 章“Integration Services”探讨了本版本中影响 Integration Services 包的开发、部署和管理的全面更改。在第 7 章“Data Quality Services”中，读者会了解到 SQL Server 2012 中用于集中数据质量活动（包括如何在知识库中存储数据质量规则以及如何自动执行规则发现）的最新 BI 组件。第 8 章“Master Data Services”介绍了为了简化 Master Data Services 功能的实施、工作流和管理而改进的界面。第 9 章“Analysis Services 和 PowerPivot”介绍新增的表格服务器模式、说明如何开发表格模型，并描述了针对 Analysis Services 平台和 PowerPivot for Excel 功能的改进。最后，第 10 章“Reporting Services”涵盖在 SharePoint 集成方面的改进以及通过新的特别报告工具 Power View 提供的自助功能的详细信息。

本手册中的约定和特色

为了使信息更具可读性且便于效仿，本手册使用以下约定提供信息：

• 每项练习包括一系列任务，通过有编号的步骤（1、2、…）列出。####

• 带有 “注意” 等标签的内容是成功完成某个步骤的替代方法或者补充信息。

• 您键入的文本（除代码块之外）以粗体显示。

• Transact-SQL 代码用于帮助您进一步了解特定示例。

预发布软件

为了帮助您在 SQL Server 2012 发布后尽早熟悉该产品，我们特意使用适用于该产品的 Release Candidate 0 (RC0) 版本的示例编写了本手册。因此，最终版本可能包括新的功能，而我们所讨论的功能可能会更改或删减。请参阅
http://msdn.microsoft.com/zh-cn/library/ms130214%28v=sql.110%29.aspx 上的 SQL Server 联机丛书中的“SQL Server 2012 的新增功能”主题，了解该产品的最新更改列表。请注意，您可能还会发现该产品的 RTM 版本与本文提供的描述和屏幕快照之间有些细微差别。

致谢

首先，我想感谢 Microsoft Press 和 O’Reilly Media 的同事为我提供另一个难得的创作机会，感谢他们在这样短的时间内推出了这一明星产品。特别感谢 Devon Musgrave、Colin Lyth、Karen Szall、Carol Dillingham、Steve Sagman、Mitch Tulloch、Roger LeBlanc、Christina Yeager、Anne Hamilton、Steve Weiss 和 Ken Jones。对于出版团队为这项工作自始至终提供的各项支持，我深表感谢。

其次，我想感谢我的家人。我因为本手册经常加班加点，没能时常伴他们左右，对此他们给予足够的耐心和理解。没有他们的爱和支持，我根本不会有今天的成就。

我还想感谢 Shirmattie Seenarine 对此项工作给予的大力支持。Shirmattie 进行了辛勤地编辑和改写，对此项工作做出的贡献令我不胜感激。对于我的合著伙伴，Stacia Misner，我要感谢你再次对本书的商业智能部分做出的出色工作。

最后，本手册的出版离不开 SQL Server 团队同事们的支持，他们提供了相关的说明、战略性技术指导、技术审核和编辑。我想向以下这些人致谢：Tiffany Wissner、Quentin Clark、Joanne Hodgins、Justin Erickson、Santosh Balasubramanian、Gopal Ashok、Goden Yao、Jack Richins、Susan Price、Michael Rys、Srini Acharya、Darmadi Komo 和 Luis Daniel Soto Maldonado。

—Ross Mistry

我也要感谢整个团队在本手册的出版上给予我和 Ross 的大力支持。很高兴能够再次与整个团队和 Ross 精诚合作。热切盼望将来能与大家再次合作！

每个产品小组的帮助都很大，我很感谢他们的协助，并且很赞赏他们所开发的优秀产品。特别是，我想感谢 Matt Masson、Akshai Mirchandani、Marius Dumitru 和 Thierry D’hers，他们在百忙之中抽出宝贵时间及时回应我的问题。

以往我丈夫总是在我写作时表现出几乎源源不绝的耐心，但这还是他头一次没有机会证明这一点，因为他忙着在另一个州为我们筹备新家。因此，我无法就这本手册给予他真正的感谢，但我可以感谢他即将为我布置的舒适的家。他让我能在今年晚些时候安心地工作和写作，还让我心境平和，对未来充满希望！

—Stacia Misner

勘误表和手册支持

我们已经竭尽全力确保本手册及其随附内容的准确性。自本手册出版以来报告的任何错误列在 oreilly.com 上的 Microsoft Press 网站中：

http://go.microsoft.com/FWLink/?Linkid=xxxxx

如果您发现了尚未列出的错误，也可以通过这个网页将错误报告给我们。如果您需要额外的支持，请向 Microsoft Press Book Support 发送电子邮件，邮件地址为 mspinput@microsoft.com。

请注意，以上地址并不提供有关 Microsoft 软件的产品支持。

我们希望收到您的反馈

在 Microsoft Press，您的满意是我们首要考虑的问题，您的反馈是我们最宝贵的资产。请通过以下网址告诉我们您对本手册的看法：

http://www.microsoft.com/learning/booksurvey

该调查非常简短，我们会仔细阅读您的每一项建议和意见。热切期待您的任何反馈！

保持联系

请访问我们的 Twitter 网站 http://twitter.com/MicrosoftPress， 与我们时刻保持联系！

第 1 章
SQL Server 2012 版本和引擎增强功能

SQL Server 2012 是 Microsoft 最新的可用于云的信息平台。借助 SQL Server 2012，企业和组织可以在不同的台式机、移动设备、数据中心以及私有云或公有云之间，高效地保护数据的安全、释放数据的潜能，并且能够对数据进行缩放。在 SQL Server 2008 R2 版本的辉煌成就的基础上，SQL Server 2012 百尺竿头更进一步，它的重要功能已对全世界范围的组织产生了巨大影响。它为组织提供了能够胜任关键任务的性能和可用性，同时还赋予组织敏锐的洞察力，能够洞彻整个组织中的数据内在的各种关系。最后，SQL Server 2012 还提供了多种可供您选择的混合解决方案。例如，一个组织可以在传统的非虚拟化环境中、在设备上以及在内部私有云或外部公有云上开发和部署应用程序和数据库解决方案。而且，这些解决方案可以轻松地相互集成，提供一个完全集成的混合解决方案。图 1-1 说明了可用于云的信息平台的整个生态系统。

图 1-1 SQL Server 2012，可用于云的信息平台

为帮助读者准备 SQL Server 2012， 本章从数据库管理员的角度介绍了全新 SQL Server 2012 的特性、功能和版本。本章还论述了 SQL Server 2012 的硬件和软件要求以及安装策略。

针对数据库管理员的 SQL Server 2012 增强功能

与以往相比，组织现在更加需要可信赖、经济合算和可伸缩的数据库平台，它可以提供能够胜任关键任务的置信度、深入的洞察力以及灵活的基于云的产品和服务。在全球经济大环境下，这些组织正面临着不断变化的业务情况以及各种挑战，例如 IT 预算限制、需要洞察业务情况以便保持竞争力以及能够在正确的时间使用正确的信息。此外，组织必须始终要作出调整，因为新趋势和重要趋势往往会改变开发和部署软件的方式，这些新趋势包括数据爆炸（数据使用量大幅增长）、消费化 IT、大型数据（大型数据集）以及私有云和公有云部署。

SQL Server 2012 是 Microsoft 投巨资打造的重量级产品；但在本章中，我们将从下面的这些方面来介绍数据库管理员 (DBA) 关注的那些新特性和突破性功能：可用性、可管理性、可编程性、可伸缩性和性能以及安全性。下面几节将介绍其中一些新特性和功能；不过，本手册中的其他章节将会更深入地说明那些重大的技术改进。

可用性增强功能

在 SQL Server 2012 中，高可用性方面有了很大改进，可确保组织增强对其数据库的信心，并且确保这些数据库能够获得最长的正常运行时间。SQL Server 2012 继续提供了数据库镜像、日志传送和复制功能。不过，SQL Server 2012 还提供一项称作 AlwaysOn 的全新技术，用于实现高可用性和灾难恢复。下面我们将简要地介绍一下 AlwaysOn 这个全新的高可用性增强功能：

• AlwaysOn 可用性组 对于数据库管理员而言，AlwaysOn 可用性组可能是最令人期待的数据库引擎相关功能。这个新功能可以对数据库加以保护，并且允许多个数据库作为一个单元进行故障转移。因为该解决方案支持多达四个辅助副本，所以实现了更好的数据冗余和保护。在这四个辅助副本中，可将最多两个辅助副本配置为同步副本，以便确保副本是最新的。辅助副本可以驻留在一个数据中心内，针对一个站点提供高可用性；也可以驻留在多个数据中心上，以实现灾难恢复。此外，AlwaysOn 可用性组还可以提供更高的投资回报，这是因为在辅助副本处于活动状态并且可读取的情况下，它可以分担主要副本上的备份、报告和即席查询的工作负载，从而提高硬件的利用率。该解决方案紧密集成到 SQL Server Management Studio 中，可以轻松地进行部署并且支持共享存储或本地存储。

图 1-2 说明了一个跨国组织使用 AlwaysOn 可用性组为执行关键任务的数据库实现了高可用性和灾难恢复。此外，该组织还使用辅助副本减轻了报告和备份的工作负载。

图 1-2 跨国组织使用的 AlwaysOn 可用性组

• AlwaysOn 故障转移群集实例 (FCI) AlwaysOn 故障转移群集实例使用
Windows Server 故障转移群集和共享的存储提供卓越的实例级别的保护。但对于 SQL Server 2012 而言，在提高可用性和可靠性方面有着大量的改进。首先，FCI 现在支持多个子网的故障转移群集。FCI 节点所在的这些子网，可以位于同一个数据中心中，也可以位于地理上分散的站点中。其次，TempDB 数据库现在可以使用本地存储。第三，在发生故障转移后，启动和故障恢复时间更短。最后，可以利用改进的群集运行状况检测策略，提供更强大和更灵活的故障转移。

• 支持 Windows Server Core 现在，SQL Server 2012 可以在 Windows Server Core 上安装。Windows Server Core 是 Windows 操作系统的缩减版本，修补服务器时必需的重新启动次数大约会减少 50%-60%。这意味着 SQL Server 正常运行时间更长、安全性更高。要在 Server Core 上进行部署，操作系统需要 Windows Server 2008 R2 SP1 及更高版本。第 2 章“高可用性和灾难恢复选项”介绍了如何在 Server Core 上部署 SQL Server 2012，包括支持的功能。

• 恢复顾问 在 SQL Server Management Studio 中引入了一个全新的可视化的时间线，简化了数据库还原的过程。如图 1-3 中所示，可以使用时间线下方的滚动条来指定备份，以便将数据库还原到某个时间点。

图 1-3 恢复顾问的可视化时间线

注意 要了解有关 AlwaysOn 技术和其他高可用性改进的详细信息，请务必阅读第 2 章。

可伸缩性和性能增强功能

SQL Server 产品组在提高与 SQL Server 数据库引擎关联的可伸缩性和性能方面做出了大量工作。能够帮助组织改善 SQL Server 工作负载的一些主要增强功能包括：

• 列存储索引 为了保持竞争力，越来越多的组织要求对大型数据集提供突破性和可预测的性能。SQL Server 2012 引入了直接在关系引擎中生成内存中列存储索引的功能。通过与高级查询处理增强功能相结合，这些技术可以提供超凡的性能，并将与数据仓库工作负载相关联的查询性能提高了多达 10 甚至 100 倍。在某些情况下，客户可以获得的性能提高达到了 400%。有关针对数据仓库工作负载的这个新功能的详细信息，请参阅第 3 章“性能和可伸缩性”。

• 支持的分区数量提高 为了显著提高与大型表和数据仓库相关联的可伸缩性和性能，SQL Server 2012 现在默认支持每个表多达 15,000 个分区。与以前的 SQL Server 版本相比，支持的分区数量大大增加，以前的版本默认限制为 1000 个分区。这个新的扩展支持还有助于为数据仓库维护实现大型的滑动窗口方案。

• 联机索引创建 、重新生成和删除 运行关键任务工作负载的许多组织都使用联机索引来确保业务环境在日常的索引维护过程中不会出现停机。在 SQL Server 2012 中，包含 varchar(max)、nvarchar(max) 和 varbinary(max) 列的索引现在可以在联机操作中创建、重新生成和删除。这对于要求在索引操作过程中保持最长正常运行时间和并发用户活动的组织而言至关重要。

• 在 Windows Server 2008 R2 上实现最大程度的可伸缩性 Windows Server 2008 R2 致力于实现前所未有的工作负载大小、动态的可伸缩性以及全面的可用性和可靠性。因此，在 Windows Server 2008 R2 上运行的 SQL Server 2012 可实现最大程度的可伸缩性，因为在单个操作系统实例中可支持多达 256 个逻辑处理器以及 2 TB 的内存。

可管理性增强功能

组织中部署 SQL Server 的情况越来越多，越来越普遍。这种态势表明，所有数据库管理员都应该准备好通过适当的工具来成功管理 SQL Server 基础结构。以前的 SQL Server 版本已包括了许多为可管理性量身打造的新功能。例如，数据库管理员可以方便地利用基于策略的管理、资源调控器、数据收集器、数据层应用程序和实用工具控制点。不过，负责可管理性的产品组从未停止过在可管理性方面的努力。在 SQL Server 2012 中，SQL Server 工具和监视功能方面有了进一步的改进。下表阐述了 SQL Server 2012 在可管理性方面的增强功能：

• SQL Server Management Studio 在 SQL Server 2012 中，IntelliSense 和 Transact-SQL 调试得到了改进，改善了在 SQL Server Management Studio 中的开发体验。

• IntelliSense 增强功能 自动完成列表现在可以根据部分单词来建议匹配的字符串，而在以前，通常是根据第一个字符来提出建议。

• 新的“插入代码段”菜单 图 1-4 中显示了这个新功能。它向开发人员提供了一个经过分类的代码段的列表，开发人员可从中选择所需的代码段，对自己的代码进行优化。按下 CTRL+K、CTRL+X，或者从“编辑”菜单选择相应的代码段，可以启动代码段选择工具提示。

• Transact-SQL 调试器 此功能让开发人员可以在 SQL Server 2005 Service Pack 2 (SP2) 或更高版本的实例上调试 Transact-SQL 脚本，并且还增强了断点功能。

图 1-4 在 SQL Server 数据库引擎查询编辑器中编写新的 Transact-SQL 语句时，利用 Transact-SQL 代码段模板作为起点

• 资源调控器增强功能 许多组织当前都在利用资源调控器来获取可预测的性能，并且根据传入的请求对资源消耗量实行限制，从而改进了对 SQL Server 工作负载和资源的管理。在过去的几年中，客户还在一直要求进一步改进资源调控器功能。客户想要增加资源池的最大数目，并且希望支持具有更高工作负载隔离水平的大规模多租户数据库解决方案。他们还希望能够对计算机资源进行可预测的退款和垂直隔离。

负责资源调控器功能的 SQL Server 产品组引入了一些新功能，以便满足客户和 SQL Server 社区的这些要求。首先，单个 SQL Server 实例现在已经实现了大规模多租户的支持，因为资源调控器支持的资源池数目从 20 增加到了 64。此外，还引入了 CPU 使用率的最高上限，以便实现可预测的退款以及 CPU 的隔离。最后，可以将资源池与单独的时间表或一组时间表相关联，以便实现对计算机资源的垂直隔离。

新的动态管理视图 (DMV) (sys.dm_resource_governor_resource_pool_affinity) 可以让数据库管理员更为有效地跟踪资源池关联。

下面将以一个示例来展示一些新的资源调控器功能。在下面这个示例中，资源池 Pool25 更改为与六个计划程序（8、12、13、14、15 和 16）相关联，并且确保这些计划程序最少占用 CPU 容量的 5%。它可以接收不超过这些计划程序 80% 的容量。当存在 CPU 带宽争用时，将要分配的最大平均 CPU 带宽是 40%。

ALTER RESOURCE POOL Pool25
WITH(
MIN_CPU_PERCENT = 5,
MAX_CPU_PERCENT = 40,
CAP_CPU_PERCENT = 80,
AFFINITY SCHEDULER = (8, 12 TO 16),
MIN_MEMORY_PERCENT = 5,
MAX_MEMORY_PERCENT = 15,
);

点击这里查看代码为图像

• 包含数据库 在以前的 SQL Server 版本中，实现与数据库可移植性关联的身份验证颇具挑战性。这是由于数据库中的用户与 SQL Server 源实例上的登录名相关联导致的。一旦数据库移到了另一个 SQL Server 实例，则可能会出现该登录名不存在的情况。通过在 SQL Server 2012 中引入包含数据库，可直接在用户数据库中对用户进行身份验证，无需依赖数据库引擎中的登录名。此功能可改善用户数据库在服务器之间的可移植性，因为包含数据库有没有外部依赖项。

• 与 SQL Azure 紧密集成 图 1-5 中所示是一个新的“将数据库部署到 SQL Azure”向导，该向导集成在 SQL Server 数据库引擎中，可帮助组织将内部数据库部署到 SQL Azure。此外，使用 SQL Azure 数据同步可以实现新的方案。SQL Azure 数据同步是一种云服务，可以跨数据中心和云在各数据库之间提供双向的数据同步。

图 1-5 使用“部署数据库”向导将数据库部署到 SQL Azure

• 重新定位了启动选项 在 SQL Server 配置管理器中，引入了一个新的“启动参数”选项卡，方便您更好地管理启动所需的参数。DBA 现在可以轻松地指定启动参数，在以前版本的 SQL Server 中执行这项工作有时相当繁琐。现在可以通过在 SQL Server 配置管理器中右键单击某一 SQL Server 实例名称，然后选择“属性”，调用“启动参数”选项卡。

• 数据层应用程序 (DAC) 增强功能 在 SQL Server 2008 R2 中引入了数据层应用程序的概念。数据层应用程序是单个部署单元，它包含应用程序使用的所有数据库架构、依赖对象和部署要求。SQL Server 2012 引入了一些 DAC 增强功能。与以往我们一直习以为常的并行升级过程相比，在这个新的 SQL Server 版本中，现在可通过就地升级方式执行 DAC 升级。此外，可以更轻松地在内部/外部以及公有云环境（例如 SQL Azure）之间部署、导入和导出 DAC。最后，数据层应用程序现在支持的对象要比以前的 SQL Server 版本多很多。

安全性增强功能

自 Microsoft 发起可信任计算倡议以来，已过去大约 10 年了。自那时起，SQL Server 在安全性方面一直有口皆碑。与行业中的主要数据库竞争对手相比，SQL Server 安全漏洞的数量以及暴露给外界的风险最少。图 1-6 中所示的图形援引自美国国家标准技术研究所（来源：ITIC 2011：SQL Server 提供了行业领先的安全性）。它显示了从 2002 年 1 月到 2010 年 1 月报告的常见安全漏洞和暴露风险。

图 1-6 NIST 报告的常见安全漏洞和暴露风险（2002 年 1 月到 2010 年 1 月）。

就 SQL Server 2012 而言，该产品继续将这一安全基石打造得更加牢固，提供增强的安全性以及数据库平台内的遵从性。有关与数据库引擎相关联的所有安全增强功能的详细信息，请参阅第 4 章“安全增强功能”。而现在，我们仅列举一些可供企业使用的新安全功能和控件，它们使组织能够满足严格的遵从策略和规定：

• 更易于划分职责的用户定义的服务器角色

• 用于提高遵从性和灵活性的审核增强功能

• 通过组默认架构简化了安全管理

• 包含数据库身份验证，可以使用自包含访问信息进行数据库身份验证，而不需要服务器登录名

• 用于在最终用户报表中提供更高数据安全性的 SharePoint 和 Active Directory 安全模型

可编程性增强功能

SQL Server 2012 在可编程性方面也有不少改进，特别是支持 “超越关系”的元素，例如 XML、空间、文档、数字媒体、科学记录、factoid 和其他非结构化数据类型。为什么要在这些方面加以改进呢？

组织一直在要求能够设法降低与管理结构化数据和非结构化数据相关联的成本。他们想要简化针对所有数据的应用程序开发工作，并且想要改进针对所有数据的管理和搜索功能。我们现在用一点时间回顾一下对可编程性有着积极影响的一些 SQL Server 2012 增强功能。有关可编程性以及超越关系的元素的详细信息，请参阅第 5 章“可编程性和超越关系增强功能”。

• FileTable 应用程序通常将数据存储在关系数据库引擎中；但是，多种不同形式的应用程序也以非结构化格式维护数据，如文档、媒体文件和 XML。非结构化数据通常驻留在文件服务器上，并不直接处于 SQL Server 之类的关系数据库中。想象一下，如果组织不仅需要在这些不同的系统之间管理结构化和非结构化数据，而且还要使这些数据保持同步，那么管理起来将会困难重重。不过，借助 SQL Server 2012 中的新功能 FileTable，这些困难将会迎刃而解。这项功能是在 SQL Server 2008 中首次引入的 FILESTREAM 技术的基础上建立的。FileTable 为组织提供了 Windows 文件命名空间支持以及与 SQL Server 中存储的文件数据的应用程序兼容性。它还提供了另外一个好处，就是当允许应用程序在 SQL Server 内集成存储和数据管理时，可针对非结构化数据和结构化数据实现全文和语义搜索

• 统计语义搜索 通过引入新的语义搜索功能，SQL Server 2012 使企业能够更深入了解存储在数据库引擎中的非结构化数据。这项功能中引入了三个新的 Transact-SQL 行集函数，它们不仅能够查询文档中的字词，而且还能查询文档的含义

• 全文搜索增强功能 SQL Server 2012 中的全文搜索能够提供更好的查询性能和规模。它还引入了属性范围的搜索功能，使组织能够搜索 Author 和 Title 之类的属性，而无需开发人员在单独的数据库中维护文件属性。开发人员现在还可以使用新的 NEAR 运算符来自定义邻近搜索，该运算符允许开发人员指定搜索条件中的第一个搜索词和最后一个搜索词之间的非搜索词的最大数目。

• 扩展事件功能增强 引入这个新的用户界面是为了帮助简化与扩展事件关联的管理工作。在 SQL Server 2012 中还引入了用于功能和性能故障排除的新扩展事件。

SQL Server 2012 版本

SQL Server 2012 有三个主要版本。与以前的版本相比，所有这三个版本都进行了更周密的调整，通过在商业智能方面的增强功能满足几乎所有客户的需要。每个版本都有 32 位和 64 位两个版本。在下面的图 1-7 中列出了主要版本：

• Standard Edition

• Business Intelligence Edition

• Enterprise Edition

图 1-7 SQL Server 2012 的主要版本

Enterprise Edition

SQL Server 2012 Enterprise Edition 是最高级别的 SKU；它可以满足关键任务应用程序的性能和可用性要求，能够部署私有云、高度虚拟化的环境，以及大型集中式或面向外部的商业智能解决方案，是满足大规模数据中心和数据仓库解决方案苛刻要求的不二之选。

注意 在以前的 SQL Server 版本中包括的 Datacenter Edition 现已废止。所有数据中心功能现在都包含在 SQL Server 2012 Enterprise Edition 中。

Enterprise Edition 的功能包括：

• 内核的最大数目由所使用的操作系统决定

• 可以使用 AlwaysOn 实现高级的高可用性

• 如果组织有软件保证，则可以实现无限制的虚拟化

• 支持新的列存储索引功能

• 高级审核

• 透明数据加密 (TDE)

• 压缩和分区

• 包括 Business Intelligence Edition 的所有特性和功能：

• 报表

• 分析

• 多维 BI 语义模型

• Data Quality Services

• Master Data Services

• 内存中表格 BI 语义模型

• 自助商业智能

Standard Edition

Standard Edition 是为部门数据库和有限的商业智能应用程序（通常适用于中型解决方案、较小的组织或部门解决方案）量身定制的数据管理平台。它并不包括 Enterprise Edition 和 Business Intelligence Edition 的所有那些让人眼花缭乱的特性和功能；但是，它同样提供一流的可管理性和易用性。与 Enterprise Edition 和 Business Intelligence Edition 相比，Standard Edition 支持最多 16 个内核，并且包括以下功能：

• 空间支持

• FileTable

• 基于策略的管理

• 公司商业智能

• 报表

• 分析

• 多维 BI 语义模型

• 使用 AlwaysOn 2 节点故障转移群集可以实现基本的高可用性

• 支持最多四个处理器、最高 64 GB 的 RAM、一个虚拟机和两个故障转移群集节点

Business Intelligence Edition

提供 Business Intelligence Edition 开创了 SQL Server 历史的先河。Business Intelligence Edition 为组织提供全套强大的 BI 功能，例如可伸缩的报告和分析、Power View 和 PowerPivot。它是为致力于实现公司商业智能和自助功能、但不需要 SQL Server 2012 Enterprise Edition 中提供的完整联机事务处理(OLTP) 性能和可伸缩性的组织而量身打造的。下表概括性地列举了新的 Business Intelligence Edition 中所包括的功能：

• 对于数据库引擎，最多 16 个内核

• 用于商业智能处理的最大内核数量

• 在 Standard Edition 中提供的全部功能

• 公司商业智能

• 报表

• 分析

• 多维 BI 语义模型

• 自助功能

• 警报

• Power View

• PowerPivot for SharePoint Server

• 企业数据管理

• Data Quality Services

• Master Data Services

• 内存中表格 BI 语义模型

• 使用 AlwaysOn 2 节点故障转移群集可以实现基本的高可用性

专用版本

除了上述三个主要版本之外，SQL Server 2012 将继续为具有独特要求的组织提供专用版本。下面是专用版本中的一些例子：

• Developer Developer Edition 包括 Enterprise Edition 中提供的所有特性和功能；但是，它严格用于开发、测试和演示目的。请注意，您可以通过将它升级到 SQL Server 2012 Enterprise，无需重新安装就可以将 SQL Server Developer 安装直接过渡到生产。

• Web Web Edition 的价格要比 Enterprise Edition 和 Standard Edition 实惠得多，SQL Server 2012 Web 主要用于托管面向 Internet 的 Web 服务环境的服务提供商。与 Express Edition 不同，此版本没有数据库大小方面的限制，它支持四个处理器，并且支持最多 64 GB 的内存。SQL Server 2012 Web 不提供 Enterprise Edition 和 Standard Edition 中的高级功能，但它仍是用于托管网站和 Web 应用程序的理想平台。

• Express 这是一个免费版本，是针对独立软件供应商、非专业开发人员和构建客户端应用程序的技术爱好者的最佳入门级选择。想要学习数据库的有关知识或想要了解如何构建客户端应用程序的个人会发现，这个版本正是他们所需要的。简而言之，此版本限制为一个处理器和 1 GB 的内存，并且可具有最大 10 GB 的数据库大小。此外，Express 与 Microsoft Visual Studio 相集成。

注意 有关不同 SQL Server 2012 版本的主要功能的完整比较，请参阅 http://msdn.microsoft.com/zh-cn/library/cc645993(v=sql.110).aspx 和 http://www.microsoft.com/sqlserver/en/us/future-editions/sql2012-editions.aspx 处的“SQL Server 2012 各个版本支持的功能”。

SQL Server 2012 许可概述

与 SQL Server 2012 关联的许可模型已经简化以便更好地适应客户解决方案，并且为虚拟化和云部署进行了优化。组织应了解相关的知识。对于 SQL Server 2012 而言，针对计算能力的许可是基于内核的，而 Business Intelligence Edition 和 Standard Edition 则是基于服务器 + 客户端访问许可证 (CAL) 模型提供的。此外，组织可以通过向单独的数据库虚拟机授予许可，节约基于云的计算的成本。因为每个客户环境都是独一无二的，所以，有关许可证更改是如何影响您的环境的讨论不在本文的范围内。有关许可更改以及它们是如何影响您的组织的详细信息，请与您的 Microsoft 代表或合作伙伴联系。

有关 SQL Server 2012 许可的详细信息，请查阅下面的链接： http://www.microsoft.com/sqlserver/en/us/future-editions/sql2012-licensing.aspx。

硬件和软件要求

SQL Server 2012 建议的硬件和软件要求视要安装的组件、数据库工作负载以及要使用的处理器的类型而定。表 1-1 和表 1-2 可帮助理解 SQL Server 2012 的硬件和软件要求。

因为 SQL Server 2012 支持许多处理器类型和操作系统，所以，表 1-1 仅涵盖典型 SQL Server 2012 安装的硬件要求。典型安装包括了在 Windows Server 2008 R2 操作系统上运行的 SQL Server 2012 Standard 和 Enterprise 版本。需要其他方案的信息的读者应该参考 http://msdn.microsoft.com/zh-cn/library/ms143506(v=SQL.110).aspx 处的“安装 SQL Server 2012 的硬件和软件要求”。

表 1-1 硬件要求

硬件组件

要求

处理器

处理器类型：（64 位）x64

最低：AMD Opteron、AMD Athlon 64、支持 Intel EM64T 的 Intel Xeon 和支持 EM64T 的 Intel Pentium IV

处理器速度：最低 1.4 GHz；建议 2.0 GHz 或更快

处理器类型：（32 位）

Intel Pentium III 兼容处理器或更快

处理器速度：最低 1.0 GHz；建议 2.0 GHz 或更快

内存 (RAM)

最小：1 GB

推荐：4 GB 或更多

最大：操作系统最大内存

磁盘空间

硬盘空间要求视所安装的组件而定。

数据库引擎：811 MB

Analysis Services ：345 MB

Reporting Services：304 MB

Integration Services：591 MB

客户端组件：1823 MB

点击这里查看表为图像

表 1-2 软件要求

软件组件

要求

操作系统

Windows Server 2008 R2 SP1 64 位 Datacenter 、Enterprise 、Standard 或 Web

版本或者

Windows Server 2008 SP2 64 位 Datacenter 、Enterprise 、Standard 或 Web 版本

.NET Framework

Microsoft .NET Framework 3.5 SP1

和

Microsoft .NET Framework 4.0

Windows PowerShell

Windows PowerShell 2.0

SQL Server 支持工具和软件

SQL Server 2012 - SQL Server Native Client

SQL Server 2012 - SQL Server 安装程序支持文件

最低：Windows Installer 4.5

Internet Explorer

最低：Windows Internet Explorer 7 或更高版本

虚拟化

运行 Hyper-V 角色的 Windows Server 2008 SP2

或者

运行 Hyper-V 角色的 Windows Server 2008 R2 SP1

点击这里查看表为图像

注意 服务器硬件若干年以来一直支持 32 位和 64 位处理器；但是，Windows Server 2008 R2 仅限 64 位。在计划 SQL Server 2012 部署时要审慎考虑这方面的因素。

安装、升级和迁移策略

与以前的版本一样，SQL Server 2012 提供 32 位和 64 位版本。这两个版本既可以通过命令提示符使用 SQL Server 安装向导进行安装，也可以使用 Sysprep 进行自动部署，后者只需要管理员执行很少的工作。如本章中前面所述，SQL Server 2012 现在可以安装在 Server Core 上，Server Core 是 Windows Server 2008 R2 SP1 或更高版本的一个安装选项。最后，数据库管理员还可以在安装 SQL Server 2012 时选择升级现有的 SQL Server 安装或执行并行迁移。以下各节将详细说明上述不同的策略。

就地升级

就地升级是将现有 SQL Server 安装升级到 SQL Server 2012。在执行就地升级时，SQL Server 2012 安装程序会在现有计算机上用新的 SQL Server 2012 二进制文件替换以前的 SQL Server 二进制文件。SQL Server 数据自动从以前的版本转换到 SQL Server 2012。这意味着不必复制或迁移数据。在图 1-8 的示例中，数据库管理员正对在服务器 1 上运行的 SQL Server 2008 实例进行就地升级。升级完毕后，服务器 1 仍然存在，但 SQL Server 2008 实例及其所有数据都升级到 SQL Server 2012。

注意 SQL Server 2005 SP4、SQL Server 2008 SP2 和 SQL Server 2008 R2 SP1 全都支持就地升级到 SQL Server 2012。不过，较早的版本（如 SQL Server 2000、SQL Server 7.0 和 SQL Server 6.5）不能升级到 SQL Server 2012。

图 1-8 从 SQL Server 2008 就地升级到 SQL Server 2012

有关能够升级到 SQL Server 2012 的早期 SQL Server 版本的详细列表，请参阅以下链接： http://msdn.microsoft.com/zh-cn/library/ms143393(SQL.110).aspx。

就地升级的利与弊

与并行迁移策略相比，就地升级策略通常更容易并且风险更低。此外，升级速度相当快，并且不需要额外的硬件。因为服务器和实例的名称在升级过程中不会更改，所以应用程序仍指向旧实例。因此，此策略耗时更少，因为无需对应用程序连接字符串进行更改。

就地升级的缺点是不能对升级过程加以精确控制。例如，当运行多个数据库或组件时，数据库管理员不能灵活地选择要升级的项目，而是所有数据库和组件都同时升级到 SQL Server 2012。此外，在就地升级过程中，实例将处于脱机状态。这意味着，如果执行关键任务的数据库或应用程序或重要的业务线应用程序正在运行，则需要制定计划停机安排。此外，如果在升级过程中出现灾难情况，则回滚策略可能既复杂又耗时。数据库管理员可能不得不从头安装操作系统、安装 SQL Server 并还原所有 SQL Server 数据。

SQL Server 2012 就地升级策略概述

就地升级到 SQL Server 2012 的策略大体上包括以下步骤：

1. 请确保要升级的 SQL Server 实例满足 SQL Server 2012 的硬件和软件要求。

2. 查看 SQL Server 2012 中不推荐使用和停用的功能。有关详细信息，请参考 http://technet.microsoft.com/zh-cn/library/ms143729(v=sql.110).aspx 处的“SQL Server 2012 中不推荐使用的数据库引擎功能”。

3. 请确保要升级的 SQL Server 版本是支持升级的版本。若要查看 SQL Server 2012 的所有支持的升级方案，请参阅http://msdn.microsoft.com/zh-cn/library/ms143393(SQL.110).aspx中的“支持的版本升级”。

4. 运行 SQL Server 2012 的 SQL Server 升级顾问。升级顾问是 SQL Server 2012 随附的一个工具，也可以从 Microsoft 网站直接下载。它会分析您计划升级的 SQL Server 实例上的已安装组件，以便确保系统支持 SQL Server 2012。在开始升级之前，升级顾问将生成一个报告，确定需要修复或要特别注意的异常。

5. 安装 SQL Server 2012 必备组件。

6. 通过运行安装程序开始升级到 SQL Server 2012。

并行迁移

“并行迁移”一词指的是全新 SQL Server 2012 实例与旧 SQL Server 实例同时存在的部署。在 SQL Server 2012 安装完毕后，数据库管理员将数据从旧的 SQL Server 数据库平台迁移到新的 SQL Server 2012 数据库平台。图 1-9 中描述了并行安装。

注意 您可以使用同一个服务器实现并行迁移到 SQL Server 2012。还可以使用并行方法在单个服务器上升级到 SQL Server 2012。

图 1-9 从 SQL Server 2008 到 SQL Server 2012 的并行迁移

并行迁移的利与弊

与就地升级相比，并行迁移的最大好处是有机会在 SQL Server 2012 上构建出一个新的数据库基础架构，以及避免可能与就地升级有关的迁移问题。因为您可以彼此独立地迁移数据库和组件，所以，并行迁移还可以精确控制升级过程。此外，旧实例在迁移过程中保持联机状态。所有这些优势都使服务器更为强大。此外，当两个实例并行运行时，可以进行其他测试和验证。如果在迁移过程中出现问题，执行回滚操作也很容易。

但是，并行策略也有一些缺点。例如，可能需要购买额外的硬件。应用程序可能还需要定向到新的 SQL Server 2012 实例，这对于非常大的数据库而言可能会很麻烦，因为在迁移过程中需要双倍的存储容量。

SQL Server 2012 并行策略概述

并行升级到 SQL Server 2012 的策略大体上包括以下步骤：

1. 请确保您计划迁移的 SQL Server 实例满足 SQL Server 2012 的硬件和软件要求。

2. 若要查看 SQL Server 2012 中不推荐使用和停用的功能，请参考 http://technet.microsoft.com/zh-cn/library/ms143729(v=sql.110).aspx 处的 “SQL Server 2012 中不推荐使用的数据库引擎功能”。

3. 尽管旧实例不会升级到 SQL Server 2012，但运行 SQL Server 2012 升级顾问仍然好处多多，可确保要迁移到新 SQL Server 2012 的数据是受支持的，并且在迁移后不会出现中断情况。

4. 购买硬件，并安装您选择的操作系统。建议使用 Windows Server 2012。

5. 安装 SQL Server 2012 必备组件和所需组件。

6. 将对象从旧 SQL Server 迁移到新的 SQL Server 2012 数据库平台。

7. 将应用程序指向新的 SQL Server 2012 数据库平台。

8. 迁移完成后，停用旧服务器。

第 2 章
高可用性和灾难恢复增强功能

Microsoft SQL Server 2012 显著增强了高可用性 (HA) 和灾难恢复等人们熟知的关键功能。这些增强功能旨在帮助组织在服务器环境中实现迄今为止最高程度的置信度。Server Core 支持、创新性功能（例如 AlwaysOn 可用性组和活动辅助副本）以及对故障转移群集之类功能的关键改进为组织提供多种形式的选择，可以在数据中心内和各数据中心之间为 SQL Server 实例和数据库实现最高的应用程序可用性和数据保护。

本章的目标是使让读者了解与高可用性和灾难恢复功能有关的最新信息。SQL Server 2012 中集成的高可用性和灾难恢复功能是 Microsoft 全力打造的 AlwaysOn 技术的重要成果。

SQL Server AlwaysOn：灵活、集成的解决方案

每个组织的成功和信誉都是建立在确保数据始终可以访问并受到全面保护的基础之上。在 IT 领域中，这意味着提供的产品可实现最高级别的可用性和灾难恢复，同时将数据丢失和停机时间降至最低。在以前版本的 SQL Server 中，组织通过使用故障转移群集、数据库镜像、日志传送和对等复制之类的技术实现高可用性和灾难恢复。虽然组织使用这些解决方案取得了巨大的成功，但他们肩负着一项任务，就是将这些本机 SQL Server 技术结合起来，以便实现与他们的恢复点目标 (RPO) 和恢复时间目标 (RTO) 有关的业务要求。

图 2-1 阐释了使用以前版本的 SQL Server 的组织所常用的高可用性和灾难恢复策略。这一策略包括了故障转移群集和异步数据库镜像，前者用来保护各数据中心内的 SQL Server 实例，后者为执行关键任务的数据库提供灾难恢复功能。

图 2-1 通过将 SQL Server 2008 R2 中的故障转移群集与数据库镜像相结合，实现高可用性和灾难恢复

同样，对于需要多个辅助数据中心或没有共享存储的组织，他们的高可用性和灾难恢复部署需要将同步数据库镜像与主要数据中心内的见证服务器整合在一起，并且与日志传送相结合以便将数据移到多个位置。图 2-2 中说明了此部署策略。

图 2-2 通过将 SQL Server 2008 R2 中的数据库镜像与日志传送相结合，实现高可用性和灾难恢复

图 2-1 和 2-2 都揭示了实现高可用性和灾难恢复的成功解决方案。但是，这些解决方案都存在一些局限，需要进一步的改进。此外，随着组织不断发展，他们会发现这些局限，并且要求增添更多选项和改进，这只是一个时间问题。

许多组织都对数据库镜像十分关注。数据库镜像是用来保护数据库的一种好方法；但是，这个解决方案采用的是一对一映射，无法维持多个辅助副本。面对这种情况，许多组织又恢复采用日志传送，用来代替数据库镜像，因为它支持多个辅助副本。不过，日志传送也有自己的局限，因为它无法提供零数据丢失或自动故障转移功能。使用故障转移群集的组织也有顾虑，因为他们感到共享存储设备（例如存储局域网，SAN）可能是一个故障点。同样，许多组织认为，从成本角度来看，他们的投资未能得到最充分地利用。例如，在一些解决方案中，被动服务器是空闲的。最后，许多组织都想要减轻主要数据库服务器上的报告和维护任务，但这并不容易实现

SQL Server 一直努力解决这些问题，其中一种办法就是使用一个称作 AlwaysOn 的集成解决方案。 AlwaysOn 可用性组和 AlwaysOn 故障转移群集实例是在 SQL Server 2012 中引入的新功能，这些新功能提供了多个选项并且向客户提供最高级别的可用性以及灾难恢复。总的来说， AlwaysOn 可用性组可以保护数据库，并且提供多数据库故障转移、多个辅助副本、活动辅助副本以及集成的 HA 管理。另一方面，还有一个专门定制的 AlwaysOn 故障转移群集实例功能，可用于提供实例级别的保护、多站点群集和整合，并且以一致的方式提供灵活的故障转移策略和改进的诊断。

AlwaysOn 可用性组

AlwaysOn 可用性组在企业级别上可以完全替代数据库镜像功能，它使组织能够自动或手动将一组数据库作为一个单元进行故障转移，同时支持最多四个辅助副本。该解决方案提供了零数据丢失保护并且十分灵活。它可以部署在本地存储区或共享存储区上，并且支持同步和异步数据移动。应用程序故障转移的速度非常快，支持自动页修复，并且可以利用辅助副本来减轻报告和大量维护工作（例如备份）的负荷。

图 2-3 说明了一个 AlwaysOn 可用性组部署策略，该策略包含一个主要副本和三个辅助副本。

图 2-3 使用 AlwaysOn 可用性组实现高可用性和灾难恢复

在此图中，使用同步数据移动在主要数据中心内提供高可用性，使用异步数据移动来提供灾难恢复。此外，使用辅助副本 3 和副本 4 来减轻主要副本上报表和备份的负荷。

现在，我们将探讨与此突破性功能相关联的新概念和术语，从而进一步了解 AlwaysOn 可用性组。

理解概念和术语

可用性组是在 Windows 故障转移群集的基础上建立的，支持共享和非共享存储区。根据组织的 RTO 和 RPO 要求，可用性组可以使用异步提交可用性模式或同步提交可用性模式在主要副本和辅助副本之间移动数据。可用性组包括内置的压缩和加密功能，并且支持文件流复制和自动页修复。副本之间的故障转移既可以自动进行，也可以手动进行。

在部署 AlwaysOn 可用性组时，第一步是部署 Windows 故障转移群集。可以使用 Windows Server 2008 R2 中的故障转移群集管理器管理单元来完成此操作。构建了 Windows 故障转移群集后，其余的可用性组配置是在 SQL Server Management Studio 中完成的。当使用可用性组向导来配置可用性组时，SQL Server Management Studio 会自动在故障转移群集管理器中创建相应的服务、应用程序和资源；因此，即便是不熟悉故障转移群集的数据库管理员也能在部署时得心应手。

现在，AlwaysOn 可用性组的基础结构业已构建完毕，接下来的问题自然就是如何使用此功能来增强组织的运营。与仅支持一个辅助副本的数据库镜像不同，AlwaysOn 可用性组支持一个主要副本和最多四个辅助副本。可用性组还可以包含多个可用性数据库。同样有吸引力的是，可以在一个实现内承载多个可用性组。因此，可以将具有应用程序依赖项的数据库组合在一个可用性组内，并且可以让所有可用性数据库无缝地作为一个紧密结合的单元进行故障转移，如图 2-4 中所示。

图 2-4 Finance 和 HR 可用性数据库的专用可用性组

此外，如图 2-4 中所示，两个可用组都有一个主要副本和两个辅助副本。一个可用性名为 Finance，它包含所有 Finance 数据库；另一个可用性组名为 HR，它包含所有 Human Resources 数据库。这两个可用性组都可以独立进行故障转移，互不影响；与数据库镜像不同，一个可用性组内的所有可用性数据库可以作为一个单元进行故障转移。此外，组织可以通过利用辅助副本进行备份和只读操作（如报告和维护）来提高辅助/被动硬件的资源使用率，从而提高 IT 效率、改善性能以及降低总拥有成本。本章后面的“活动辅助副本”一节中将介绍有关内容。

您已了解了 AlwaysOn 可用性组为组织带来的一些好处，现在，让我们更深入地了解 AlwaysOn 可用性组概念以及这个新功能的操作方式。涉及的概念包括：

• 可用性副本角色

• 数据同步模式

• 故障转移模式

• 辅助副本中的连接模式

• 可用性组侦听器

可用性副本角色

每个 AlwaysOn 可用性组都包含由两个或更多故障转移伙伴构成的组，这些故障转移伙伴称作“可用性副本”。可用性副本可由一个主要角色或一个辅助角色构成。请注意，最多可以有四个辅助副本；并且在这四个辅助副本中，最多只能将两个辅助副本配置为使用同步提交可用性模式。

与 AlwaysOn 可用性组中可用性副本相关联的“角色”，有点像星球大战系列中两个教义的传奇西斯 (Sith)。在星球大战中，一次只能有两个西斯：一个师傅，一个徒弟。同样，一个可用性组中的 SQL Server 实例，要么是主要副本，要么是辅助副本。在任何时候，一个实例都不可能兼具这两个角色，因为 Windows Server 故障转移群集 (WSFC) 控制着角色交换。

可用性组中的每个 SQL Server 实例都可以承载于 SQL Server 故障转移群集实例 (FCI) 或 SQL Server 2012 的独立实例上。每个实例都驻留在 WSFC 的不同节点上。WSFC 通常用于为大家耳熟能详的 Microsoft 产品提供高可用性和灾难恢复。因此，可用性组使用 WSFC 作为基础机制，为解决方案提供节点间运行状况检测、故障转移协调、主要运行状况检测以及分布式的更改通知。

每个可用性副本都承载着可用性组中的可用性数据库的一个副本。因为在每个可用性副本上承载数据库的多个副本，所以不具备使用共享存储区的先决条件，这与过去部署传统的 SQL Server 故障转移群集时的情况不同。但另一方面，当使用非共享存储区时，组织必须认识到存储需求将随着计划承载的副本数目的增加而增加。

数据同步模式

若要将数据从主要副本移到辅助副本中，可以使用同步提交可用性模式或异步提交可用性模式。想要在这两个选项中进行选择，需要考虑以下事项：

• 当您使用“同步提交模式”时，需要在两个副本上都提交事务，以确保事务的一致性。但是，这意味着延迟时间的增加。因此，此选项可能不适合未共享高速网络或驻留在不同地理位置的伙伴。

• “异步提交模式”无需等待伙伴将日志写入磁盘，即可在伙伴之间提交事务。这将大幅提高应用程序和主要副本之间的性能，因此非常适合用于灾难恢复解决方案。

可用性组故障转移模式

在配置 AlwaysOn 可用性组时，如果将角色从主要副本切换到辅助副本，数据库管理员可以从两种故障转移模式中选择其一。如果您是熟悉数据库镜像的管理员，那么您就会注意到，AlwaysOn 可用性组的故障转移模式与数据库镜像中的模式非常相似。在使用“新建可用性组”向导时，可以使用两种 AlwaysOn 故障转移模式：

• 自动故障转移 此副本使用同步提交可用性模式，并且它支持副本伙伴之间的自动故障转移和手动故障转移。当选择自动故障转移时，最多支持两个故障转移副本伙伴。

• 手动故障转移 此副本使用同步或异步提交可用性模式，并且只支持在副本伙伴之间进行手动故障转移。

辅助副本中的连接模式

如前所述，每个辅助副本都可配置为支持只读访问，以便用于报告或备份之类的其他维护任务。在 AlwaysOn 可用性组的最终配置阶段，数据库管理员需要决定辅助副本的连接模式。连接模式有三种：

• 不允许连接 在辅助角色中，此可用性副本不允许任何连接。

• 只允许读取意向的连接 在辅助角色中，此可用性副本只允许读取意向的连接。

• 允许所有连接 在辅助角色中，此可用性副本允许读取访问的所有连接，包括通过较旧的客户端运行的连接。

可用性组侦听器

可用性组侦听器提供了一种方法，可通过绑定到主要副本的虚拟网络名称连接到某一可用性组内的数据库。应用程序可以在连接字符串中指定与可用性组侦听器相关联的网络名称。在将可用性组从主要副本故障转移到一个辅助副本后，网络名称会将连接定向到新的主要副本。可用性组侦听器的概念类似于使用故障转移群集时的虚拟 SQL Server 名称。但是，对于可用性组侦听器而言，每个可用性组都有一个虚拟网络名称；而对于 SQL Server 故障转移群集而言，一个实例才有一个虚拟网络名称。

在 SQL Server Management Studio 中使用“创建新可用性组”向导时，您可以指定可用性组侦听器的首选项，或者，您可以在创建可用性组后手动创建或修改可用性组侦听器。您也可以使用 Transact-SQL 来创建或修改侦听器。请注意，在图 2-5 中，每个可用性组侦听器都要求有一个 DNS 名称、一个 IP 地址以及一个端口（例如 1433）。一旦创建了可用性组侦听器后，故障转移群集管理器中会自动创建服务器名称和 IP 地址群集资源。这将确保可用性组的灵活性以及与 SQL Server 的紧密集成，因为大多数的配置工作都是在 SQL Server 内完成的。

图 2-5 指定可用性组侦听器属性

请注意，可用性组侦听器和可用性组之间是一对一的映射。这意味着，您可以为每个可用性组都创建一个可用性组侦听器。不过，如果在一个副本内存在多个可用性组，则您可以具有多个可用性组侦听器。例如，如图 2-6 中所示，有两个可用性组：一个可用性组用于 Finance 可用性数据库，另一个可用性组用于 Accounting 可用性组数据库。每个可用性组都具有自己的可用性组侦听器，客户端和应用程序都会连接到该侦听器。

图 2-6 说明一个副本内的两个可用性组侦听器

配置可用性组

在创建新的可用性组时，数据库管理员需要指定可用性组名称，如 AvailablityGroupFinance，然后选择一个或多个数据库作为可用性组中的成员。在下一步骤中，首先指定一个或多个 SQL Server 实例来承载辅助可用性副本，然后指定可用性组侦听器的首选项。最后一步是为辅助副本选择数据同步首选项和连接模式。这些配置可以“新建可用性组”向导中完成，也可以使用 Transact-SQL PowerShell 脚本完成。

先决条件

若要部署 AlwaysOn 可用性组，必须满足以下先决条件：

• 运行 SQL Server 的所有计算机（包括驻留在灾难恢复站点中的服务器）都必须属于同一个 Windows 域。

• 所有 SQL Server 计算机都必须属于同一个 Windows Server 故障转移群集，即使这些服务器分布在多个站点中。

• 所有服务器都必须都属于同一个 Windows Server 故障转移群集。

• 必须在每个服务器上都启用 AlwaysOn 可用性组。

• 所有数据库都必须处于完整恢复模式下。

• 必须在部署之前对所有数据库都进行完整备份。

• 服务器不能承载 Active Directory 域服务角色。

部署示例

图 2-7 说明了在使用“新建可用性组”向导时显示的“指定副本”页。在此示例中，名为 Finance 的可用性组中有三个 SQL Server 实例，它们分别是：SQL01\Instance01、SQL02\Instance01 和 SQL03\Instance01。 SQL01\Instance01 配置为主要副本，而 SQL02\Instance01 和 SQL03\Instance01 配置为辅助副本。 SQL01\Instance01 和 SQL02\Instance01 支持自动故障转移以及同步数据移动，而 SQL-03\Instance01 使用异步提交可用性模式并且仅支持强制故障转移。最后， SQL01\Instance01 不允许与辅助副本的只读连接，而 SQL02\Instance01 和 SQL03\Instance01 允许与辅助副本的读取意向的连接。此外，在此示例中，SQL01\Instance01 和 SQL02\Instance01 驻留在主要数据中心以提供站点的高可用性，而 SQL03\Instance01 则驻留在灾难恢复数据中心，并且在主数据中心变得不可用时可手动进入联机状态。

图 2-7 指定可用性组中的 SQL Server 实例

从图 2-7 以及之前的示例中可以清楚地看出：可以使用多种不同的部署配置来满足任何组织的高可用性和灾难恢复要求。图 2-8 介绍了其他一些可选的部署方案：

• 非共享存储区、本地、区域和地理目标

• 多站点群集，将另一个群集作为灾难恢复 (DR) 目标

• 具有类似 DR 目标的三节点群集

• 针对备份、报告和 DR 的辅助目标

图 2-8 其他可选的 AlwaysOn 部署方案

使用仪表板监视可用性组

在 SQL Server 2012 中提供了一个全新的管理仪表板，管理员可利用这个直观的仪表板来监视可用性组。如图 2-9 中所示，该仪表板可以显示与可用性组中的每个实例和可用性数据库相关联的运行状况和状态。此外，该仪表板还可以显示每个实例的特定副本角色并提供同步状态。如果有问题，或者如果需要与特定事件有关的详细信息，数据库管理员可以单击可用性组状态、服务器实例名称或运行状态超链接，获得进一步的信息。在 SQL Server Management Studio 的对象资源管理器中右键单击“可用性组”文件夹并且选择“显示仪表板”，即可启动该仪表板。

图 2-9 使用新的可用性组仪表板监视可用性组

活动辅助副本

如前所述，许多组织都向 SQL Server 团队表示，他们需要优化现有的硬件投资来提高 IT 效率。具体来说，组织希望他们的被动工作负载生产系统可用于其他某些方面，而不是一直处于空闲状态下。这些组织还想要减轻生产服务器中的报告和维护任务的工作负载，因为这些任务对生产工作负载产生了负面影响。借助 SQL Server 2012 的 AlwaysOn 可用性组功能，组织可以将辅助副本配置为“活动辅助副本”，提供针对与可用性组关联的数据库的只读访问。

辅助副本上的所有只读操作都是由行版本控制进行管理，并且自动映射到快照隔离事务级别，以便消除读取程序/写入程序之间的争用。此外，辅助副本中的数据接近实时。在许多情况下，主数据库和辅助数据库之间的数据滞后时间应该在几秒钟内。请注意，日志同步的延迟会影响数据是否最新。

对于组织而言，活动辅助副本意味着主要副本的性能优化，以及提高 IT 整体效率和硬件利用率。

对辅助副本的只读访问

之前在配置辅助副本的连接模式时，您可以选择“不允许连接”、“只允许读取意向的连接”和“允许所有连接”。“只允许读取意向的连接”和“允许所有连接”选项均提供对辅助副本的只读访问。顾名思义，“不允许连接”选项不允许只读访问。

现在将介绍“只允许读取意向的连接”和“允许所有连接”之间的主要差异。在 SQL Server 本机客户端中，当“应用程序意向连接”属性设置为“只读”时，“只允许读取意向的连接”选项允许连接到辅助副本中的数据库。在使用“允许所有连接”设置时，将允许所有客户端连接，而与“应用程序意向”属性无关。连接字符串中的“应用程序意向”属性是什么？“应用程序意向”属性用于声明连接到服务器时的应用程序工作负载类型。可能的值为“只读”和“读写”。尝试创建或修改辅助副本上的数据的命令将失败。

辅助副本上的备份

参与可用性组的可用性数据库可以在任何副本上执行备份。虽然在主要副本上也支持备份，但日志备份可以在任何辅助副本上进行。请注意，这与所使用的复制提交模式（同步提交或异步提交）无关。在所有副本上完成的日志备份构成单个日志链，如图 2-10 中所示。

图 2-10 在多个辅助副本上备份事务日志构成的单个日志链

因此，事务日志备份并不一定要在同一个副本上执行。当然，这并不表示您可以不用慎重考虑备份的位置。建议您在一个中心位置存储所有备份，因为在出现灾难情况而需要执行还原时，需要使用所有的事务日志备份。因此，如果某个服务器包含有备份，当它出现故障不再可用时，会对还原操作造成不利影响。在出现故障时，使用新的数据库恢复顾问向导，会给还原操作带来很多好处。例如，如果您在不同的辅助副本上执行备份，该向导将生成一个直观的按时间顺序排列的时间线图像，该时间线按照日志序列号 (LSN) 将所有日志文件排列在一起。

AlwaysOn 故障转移群集实例

您已经了解了我们全力打造的全新 AlwaysOn 可用性组功能为高可用性和灾难恢复带来的诸多好处，并且了解了如何创建活动辅助副本。现在我们将介绍针对传统功能的一些重要增强功能，例如利用共享存储区的 SQL Server 故障转移群集。下表列举了其中一些改进，对于希望在自己的 SQL Server 实例上实现高可用性的数据库管理员来说，这些改进很有吸引力。具体来说，本节将论述以下功能：

• 多子网群集 此功能在原有的高可用性和灾难恢复解决方案的基础上增添了新的多子网故障转移群集支持。

• 支持本地磁盘上的 TempDB 故障转移群集的另一个与 TempDB 相关联的存储级增强功能。现在 TempDB 不再必须驻留在共享存储区上，而以前的 SQL Server 版本则必须这样做。现在支持 TempDB 驻留在本地磁盘上，这为组织带来了许多切实利益。例如，通过此功能，可以减轻 SAN 之类的共享存储设备 (SSD) 上的 TempDB I/O 工作负载，并且可以在服务器节点内充分利用快速的本地 SSD 存储优化 TempDB 工作负载，而这种工作负载通常是随机 I/O。

• 灵活的故障转移策略 SQL Server 2012 添加一些故障条件级别的属性，改善了 SQL Server 故障转移群集实例的故障检测功能，从而允许您配置更灵活的故障转移策略。

注意 将 AlwaysOn 故障转移群集实例与可用性组结合使用，可以提供最高级别的 SQL Server 实例和数据库保护。

在 Windows Server 2008 版本中有一些新功能，使群集节点能够通过不同子网进行连接，而无需跨网络搭建延伸的虚拟局域网 (VLAN)。这些节点可以驻留在一个数据中心内的不同子网上，也可以驻留在另一个地理位置中，如灾难恢复站点中。这一概念通常称为“多站点群集”、“多子网群集”或“延伸群集”。遗憾的是，以前的 SQL Server 版本无法利用这个 Windows 故障转移群集功能。如果想要创建多站点或多子网 SQL Server 故障转移群集，仍需要创建延伸的 VLAN，以便为跨站点的故障转移公开单个 IP 地址。对于许多组织而言，这是一个复杂且具有挑战性的任务。现在这一切已不在话下，因为 SQL Server 2012 本身就支持多子网和多站点群集；因此，不再需要实现延伸的 VLAN 技术。

图 2-11 显示了一个跨越两个站点的两个子网之间的 SQL Server 多子网故障转移群集示例。请注意与多子网故障转移群集相关联的各个节点是如何驻留在不同子网上的。节点 1 位于站点 1 中并且驻留在 192.168.115.0/24 子网上，节点 2 位于站点 2 中并且驻留在 192.168.116.0/24 子网上。在从一个子网故障转移到另一个子网时，与 SQL Server 群集的虚拟网络名称相关联的 DNS IP 地址将自动更新。

图 2-11 多子网故障转移群集实例示例

为使客户端和应用程序连接到 SQL Server 故障转移群集，它们需要在 WSFC 中有两个注册到 SQL Server 故障转移群集资源名称的 IP 地址。例如，假设您的服务器名称是 SQLFCI01，IP 地址是 192.168.115.5 和 192.168.116.5。WSFC 会自动控制故障转移，并且根据当前拥有 SQL Server 资源的节点使相应的 IP 地址处于联机状态。此外，如果节点 1 与 192.168.115.0/24 子网相关联并且拥有 SQL Server 故障转移群集，则 IP 地址资源 192.168.115.6 将进入联机状态，如图 2-12 中所示。同样，如果发生故障转移并且节点 2 拥有 SQL Server 资源，则 IP 地址资源 192.168.115.6 将进入脱机状态，而 IP 地址资源 192.168.116.6 将进入联机状态。

图 2-12 与多子网故障转移群集实例关联的多个 IP 地址

因为有多个与 SQL Server 故障转移群集示例虚拟名称相关联的 IP 地址，所以，在故障转移时，联机地址将自动更改。此外，Windows 故障转移群集将在网络名称资源进入联机状态后立即发出 DNS 更新。DNS 中的 IP 地址更改可能由于缓存设置而不会在客户端上生效，因此，建议您将 DNS 中的 HostRecordTTL 配置为 60 秒，尽量减少客户端停机时间。在进行任何 DNS 更改前请向您的 DNS 管理员咨询，因为在调整主机记录的 TTL 时间时可能会增加工作负载。

支持在 Windows Server Core 上部署 SQL Server 2012

Windows Server Core 最初是在 Windows Server 2008 中引入的，并且在 Windows Server 2008 R2 中进行了一些重要的功能增强。对于那些不熟悉 Server Core 的人士来说，它是 Windows Server 2008 和 Windows Server 2008 R2 操作系统的一个安装选项。因为 Server Core 是 Windows 的最小部署，所以它安全得多，这是因为它受到的攻击面会显著减少。Server Core 不包括传统的 Windows 图形界面，因此，需要通过命令提示符或远程管理工具进行管理。

以前版本的 SQL Server 不支持 Server Core 操作系统，但现在这一切都已经改变了。Microsoft SQL Server 2012 首次引入了 Server Core 安装的支持，组织可以在基于 Windows Server 2008 R2 Service Pack 1 或更高版本的 Server Core 上安装 Microsoft SQL Server 2012。

为什么 Server Core 对 SQL Server 如此重要，它对可用性有何积极影响？在 Server Core 上运行 SQL Server 2012 时，操作系统需要的修补操作可显著降低多达 60%。对于执行关键任务的数据库和工作负载而言，这意味着更高的可用性以及更短的计划停机时间。此外，攻击面显著减少，数据库平台的整体安全性得到加强，这还意味着最高的可用性和数据保护。

在 Server Core 刚刚问世时，管理员需要使用和了解命令行语法，才能对其进行管理。但是目前大多数 IT 专业人员都已经习惯使用图形用户界面 (GUI) 来管理和配置 Windows，因此他们很难接受 Server Core。这影响了它的普及，并最终影响了其实现。为了应对这些挑战，Microsoft 创建了 SCONFIG，这是在 Windows Server 2008 R2 中引入的一个现成的实用工具，大大减轻服务器配置工作。若要操作 SCONFIG 选项，只需键入一个或多个数字就可以配置服务器属性，如图 2-13 中所示。

图 2-13 用于在 Server Core 中配置服务器属性的 SCONFIG 实用工具

以下各节阐释了在 Server Core 安装 SQL Server 2012 的先决条件、Server Core 上支持的 SQL Server 功能以及安装选项。

在 Server Core 安装 SQL Server 2012 的先决条件

若要在 Windows Server 2008 R2 Server Core 上安装 SQL Server 2012，必须满足以下操作系统、功能和组件先决条件。

操作系统要求如下：

• Windows Server 2008 R2 SP1 64 位 x64 Data Center Server Core

• Windows Server 2008 R2 SP1 64 位 x64 Enterprise Server Core

• Windows Server 2008 R2 SP1 64 位 x64 Standard Server Core

• Windows Server 2008 R2 SP1 64 位 x64 Web Server Core

下面是功能和组件的列表：

• .NET Framework 2.0 SP2

• .NET Framework 3.5 SP1 Full Profile

• .NET Framework 4 Server Core Profile

• Windows Installer 4.5

• Windows PowerShell 2.0

在满足了上述所有先决条件后，熟悉 Server Core 上支持的 SQL Server 组件就变得十分重要。

Server Core 上支持的 SQL Server 功能

许多 SQL Server 功能在 Server Core 上都是完全支持的。这些功能包括数据库引擎服务、SQL Server 复制、全文搜索、Analysis Services、客户端工具连接和 Integration Services。同样，Sever Core 不支持许多其他功能，包括 Reporting Services、Business Intelligence Development Studio、客户端工具向后兼容性、客户端工具 SDK、SQL Server 联机丛书、分布式重播控制器、SQL 客户端连接 SDK、Master Data Services 和 Data Quality Services。某些功能（例如“管理工具 – 基本”、“管理工具 – 完整”、分布式重播客户端和 Microsoft Sync Framework）仅支持远程使用。因此，这些功能可以安装在非 Server Core 的 Windows 操作系统版本上，然后通过远程方式连接到 Server Core 上运行的 SQL Server 实例。有关支持的功能和不支持的功能的完整列表，请参阅以下链接中的信息：http://msdn.microsoft.com/zh-cn/library/hh231669(SQL.110).aspx。

注意 若要使用 Server Core，您需要提前计划您的 SQL Server 安装。您需要完全了解支持您的关键任务工作负载所需的 SQL Server 功能。

在 Server Core 上安装 SQL Server 的安装选项

在 Server Core 上安装 SQL Server 2012 时不能使用常用的 SQL Server 安装向导。因此，您需要使用命令行安装、使用配置文件或利用 DefaultSetup.ini 方法，自动执行安装过程。有关这些方法的详细信息和示例，请参阅联机丛书：http://technet.microsoft.com/zh-cn/library/ms144259(SQL.110).aspx。

注意 在 Server Core 上安装 SQL Server 2012 时，请确保通过指定 /Q 参数使用完全静默模式，或者通过指定 /QS 参数使用简单静默模式。

其他高可用性和灾难恢复增强功能

本节简要介绍 SQL Server 2012 中提供的其他一些高可用性和灾难恢复增强功能。

支持服务器消息块

最近几年来，许多组织都呈现出一个共同的趋势，那就是将数据库和应用程序合并到更少的服务器上，并且在一个故障转移群集上承载更多的 SQL Server 实例。当使用合并的故障转移群集时，在以前版本的 SQL Server 中，每个 SQL Server 故障转移群集实例都要求有一个单独的驱动器号。但是，即便不考虑帐户预留，也只有 23 个驱动器号可以使用，因此，在一个故障转移群集上支持的 SQL Server 实例的最大数目是 23。23 个实例看似很充裕；但是，现在的服务器功能越来越强大，而且不少服务器所具有的计算和内存资源足以在单个服务器上承载超过 23 个实例，驱动器号限制将会造成巨大的资源浪费。鉴于这种发展趋势，SQL Server 2012 和故障转移群集引入了对服务器消息块 (SMB) 的支持。

注意 您可能会认为，使用装入点可以规避驱动器号的限制。但在以前版本的 SQL Server 中，即便是使用装入点，每个 SQL Server 故障转移群集实例也需要至少一个驱动器号。

SMB 给 SQL Server 2012 带来的好处包括数据库存储整合以及能够在单个 WSFC 中支持超过 23 个群集实例。若要充分利用这些功能，文件服务器必须运行 Windows Server 2008 或更高版本的操作系统。

数据库恢复顾问

数据库恢复顾问是一项新功能，旨在为执行数据库恢复任务的数据库管理员带来更好的还原体验。此工具包括一个全新的时间线功能，它以图形形式显示备份历史记录，如图 2-14 中所示。

图 2-14 数据库恢复顾问的可视化备份和还原时间线

联机操作

SQL Server 2012 还包括了联机操作方面的若干增强功能，可以减少计划维护操作过程中的停机时间。业务线 (LOB) 重新索引和添加具有默认值的列等功能现在已获支持。

滚动升级和修补管理

现在所有的 AlwaysOn 新功能都支持 SQL Server 滚动升级和修补，只需一次手动故障转移，就可以完成所有的升级和修补操作，从而最大程度地减少应用程序的停机时间。这意味着，数据库管理员可以将 Service Pack 或关键修补程序应用于被动节点（如果使用故障转移群集）或辅助副本（如果使用可用性组）。一旦在所有被动节点或辅助副本上都安装完成后，数据库管理员就可以进行手动故障转移，然后将 Service Pack 或关键修补程序应用于 FCI 中的节点或副本。在升级数据库平台时，此滚动策略也适用。

第 3 章
性能和可伸缩性

Microsoft SQL Server 2012 引入了一种称作“列存储”的新索引类型。在 SQL Server 2012 的开发阶段以及产品的社区技术预览 (CTP) 版本中，列存储索引功能最初的项目名称叫 Apollo。 这个新的索引与高级查询处理增强功能相结合，可以为数据仓库工作负载和其他类似的查询提供极其高效的性能。在许多情况下，数据仓库查询性能提升了几十甚至几百倍。

本章旨在帮助读者了解列存储索引，认识到这一新兴技术背后的强大之处，从而使数据库管理员可以利用此技术大大增加数据仓库工作负载的查询性能。本章主要论述以下方面的问题：

• 什么是列存储索引？

• 列存储索引是如何显著增加数据仓库查询速度的？

• 数据库管理员应该在什么情况下生成列存储索引？

• 列存储索引部署是否有任何既定的最佳做法？

让我们了解一下，组织如何借助这个新的内存中列存储索引技术来显著提高数据仓库的性能，以及该技术如何帮助管理不断增加的数据量。

列存储索引概述

由于从各种不同的设备、应用程序和服务上捕获的数据量飞速增长，因此，如今的组织需要存储海量的数据才能成功开展经营活动。随着用户想要捕获的数据越来越多，使用传统工具在可接受的时间内来捕获、管理和处理数据变得越来越具有挑战性。例如，数据库执行查询的能力已经跟不上数据量的增长速度，而且，为了尽量获得可接受的查询性能，优化查询以及设计和维护索引所用的时间也相当长。在许多情况下，从开始执行查询到返回查询结果需要经历相当长的时间，以致组织很难回想起来最初执行查询到底是为了什么。有时候，这个延迟还会导致丧失业务机会。

正当组织为应对这些问题绞尽脑汁时，SQL Server 产品组的查询处理和存储团队急您所急，想您所想，全力开发出了一系列新技术，可以快速准确地读取非常大的数据集，并且快速将数据转换为对组织有用的信息和知识。查询处理团队回顾了在列存储数据表示形式方面的学术研究，并且分析了以前数据仓库查询执行功能的成功经验。此外，他们还与 SQL Server 产品组的 Analysis Services 团队合作，更深入地了解了 Analysis Services 团队在 SQL Server 2008 R2 的名为 PowerPivot 的列存储实现方式上所做的工作。这些研究和分析让查询处理小组基于矢量执行功能开发出了新的列存储索引和查询优化，显著提高了数据仓库的查询性能。

在开发新的列存储索引时，查询处理团队设定了许多目标。他们想要确保使用数据的最终用户能够与所有数据集（无论大小）进行交互并且获得良好的体验，这意味着数据的响应时间必须快速。这些战略目标同样适用于即席查询和报告查询。此外，数据库管理员甚至可能能够减少手动优化查询、摘要表和索引视图的需要，在某些情况下还可能减少手动优化 OLAP 多维数据集的需要。所有这些目标自然会对总拥有成本 (TCO) 产生积极影响，因为硬件成本更低了，完成任务所需的人手更少了。

列存储索引的基础知识和体系结构

在设计、实现或管理列存储索引之前，理解列存储索引的工作方式、数据存储方式以及哪些类型的查询可从中受益，将会让您受益匪浅。

在使用列存储索引时如何存储数据？

对于传统的表（堆）和索引（B 树），SQL Server 以基于行的方式在页中存储数据。此存储模型通常称为“行存储”。使用列存储就像将传统的存储模型转动 90 度，来自单个列的所有值以压缩形式连续存储。列存储索引将每个列存储于一组单独的磁盘页中，而非按传统存储格式在每页中存储多行。下面的示例说明两者的差异。

如表 3-1 中所示，我们使用一个常见的员工数据表，然后评估存储数据的不同方式。此员工表包括典型的数据，例如员工 ID 号、员工姓名以及员工所在的城市和州。

表 3-1 包含员工数据的传统表

EmployeeID

Name

City

State

1

Ross

San Francisco

CA

2

Sherry

New York

NY

3

Gus

Seattle

WA

4

Stan

San Jose

CA

5

Lijon

Sacramento

CA

点击这里查看表为图像

根据选择的索引类型（传统或列存储），数据库管理员可以按行（如表 3-2 中所示）或按列（如表 3-3 中所示）来组织其中的数据。

表 3-2 以传统的“行存储”格式存储的员工数据

行存储

1 Ross San Francisco CA

2 Sherry New York NY

3 Gus Seattle WA

4 Stan San Jose CA

5 Lijon Sacramento CA

点击这里查看表为图像

表 3-3 以新的列存储格式存储的员工数据

列存储

1 2 3 4 5

Ross Sherry Gus Stan Lijon

San Francisco New York Seattle San Jose Sacramento

CA NY WA CA CA

点击这里查看表为图像

正如您所看到的，表 3-3 中列存储格式与表 3-2 中行存储格式之间的主要差别在于，列存储索引对每一列中的数据进行分组和存储，然后联接所有列以便完成整个索引，而传统的索引则是对每一行中的数据进行分组和存储，然后联接所有行以便完成整个索引。

现在，您已经了解了与传统的 B 树索引相比，列存储索引是如何存储数据的，下面将介绍这个新的存储模型和高级查询优化是如何显著加快数据检索速度的。下一节将介绍 SQL Server 列存储索引可用来显著提高查询速度的三种方法。

列存储索引是如何显著提高查询速度的？

新的列存储存储模型之所以能够显著提高数据仓库查询速度，原因是多方面的。首先，与按行组织的数据相比，在列中组织的数据之间的相似性要多得多。因此，数据能够实现的压缩级别要比按行组织的数据高得多。此外，SQL Server 的列存储索引使用 VertiPaq 压缩算法技术，而在 SQL Server 2008 R2 中，仅在 Analysis Server for PowerPivot 中才采用此技术。VertiPaq 压缩远远优于数据库引擎中使用的传统的行和页压缩，使用 VertiPag 实现的压缩率最高可达 15 比 1。数据经过压缩之后，查询需要的 IO 更少，因为从磁盘传输到内存的数据量大大减少了。在处理查询时减少 IO 就相当于更快的性能响应时间。列存储的优势不仅限于此。因为传输到内存的数据更少，所以，处理查询相关工作数据集所需的内存空间也就更少。

其次，当用户使用列存储索引运行查询时，SQL Server 只需要取回查询所需的列的数据，如图 3-1 中所示。在此示例中，在表中有 15 列；但是，因为查询所需的数据驻留在列 7、列 8 和列 9 中，所以将仅检索这些列。

图 3-1 通过仅获取查询所需的列，提高性能并降低 IO

因为在大型事实表中，数据仓库查询通常只涉及 10% 到 15% 的列，所以，只获取所选列意味着可节约组织中大约 85% 到 90% 的 IO，这反过来又提高了处理速度。

批模式处理

最后，使用列存储索引的查询在处理过程中还采用了一种先进的技术，能够进一步加快查询的速度。提到查询处理过程，现在我们就先稍微深入了解一下查询的处理方式。

首先，列中的数据是使用一个新的、高效的矢量技术来成批处理的，这个矢量技术使用列存储索引。数据库管理员应该花点时间查看查询计划，并注意在批处理模式下执行的运算符组。请注意，并非所有的运算符都是在批处理模式下执行的；但是，与数据仓库相关的重要运算符（如“哈希联接”和“哈希聚合”）确实是在批处理模式下执行的。所有算法都经过了大量的优化，可以充分利用现代的硬件体系结构，例如支持更多的内核数目和更大的 RAM，因而提高了并行度。所有这些与列存储索引相关联的改进，造就了比传统的行模式处理更好的批模式处理。

列存储索引的存储及其组织方式

下面我们将介绍与列存储索引关联的存储及其组织方式。首先需要了解的是，与列存储索引关联的新的存储概念，如“段”和“行组”，然后将澄清这些概念彼此之间的关系。

如图 3-2 中所示，列存储索引中的数据被分为多个段。一个段里包含的数据来自于一组行（最多可以是 100 万行）中的一个列。同一组行的多个段构成一个行组。SQL Server 将行组存储为一个单元，而非逐页存储数据。每个段都在内部存储在单独的大型对象 (LOB) 中。因此，当 SQL Server 读取数据时，从磁盘中读取的单元由段组成，并且在磁盘和内存之间是以段为单位进行传输。

图 3-2 列存储索引的数据存储方式

列存储索引支持和 SQL Server 2012

列存储索引和批-查询执行模式都已经深入集成到 SQL Server 2012 中，它们可以同 SQL Server 2012 中的许多数据库引擎功能一起工作。例如，数据库管理员可以对表执行列存储索引，同时仍然能成功使用 AlwaysOn 可用性组 (AG)、AlwaysOn 故障转移群集实例 (FCI)、数据库镜像、日志传送和 SQL Server Management Studio 管理工具。下面是列存储索引支持的常见商业数据类型：

• char 和 varchar

• 所有整数类型（ int 、 bigint、 smallint 和 tinyint）

• real 和 float

• string

• money 和 small money

• 所有日期、时间和 DateTime 类型，但有一个例外（精度大于 2 的 datetimeoffset）

• 精度小于或等于 18 的小数和数字（即，小于或恰好等于 18 位）

• 每个表只能创建一个列存储索引。

列存储索引的限制

尽管列存储索引可以使用 SQL Server 2012 中的大多数数据类型、组件和功能，但列存储索引存在以下限制并且无法在以下情况下使用：

• 您可以对基表启用 PAGE 或 ROW 压缩，但不能对列存储索引启用 PAGE 或 ROW 压缩。

• 表和列不能参与复制拓扑。

• 使用变更数据捕获的表和列不能参与列存储索引。

• 创建索引：不能对以下数据类型创建列存储索引：

• 大于 18 位的小数

• binary 和 varbinary

• BLOB

• CLR

• (n)varchar(max)

• uniqueidentifier

• 精度大于 2 的 datetimeoffset

• 表维护：如果存在列存储索引，则您可以读取表，但不能直接更新表。这是因为列存储索引是为通常以读取操作为主的数据仓库工作负载而设计的。当然，您不必因此而苦恼，在接下来的“列存储索引的设计注意事项和数据加载”部分，您将了解到在使用列存储索引时如何加载新数据的策略。

• 处理查询：您可以使用列存储索引处理所有只读 T-SQL 查询，但因为批处理只能使用某些运算符，所以，您将看到某些查询会比其他查询快得多。

• 包含文件流数据的列不能参与列存储索引。

• 不允许对使用列存储索引的表使用 INSERT、UPDATE、DELETE 和 MERGE 语句。

• 在创建列存储索引时，不支持超过 1024 个列。

• 仅允许非聚集列存储索引。不允许筛选的列存储索引。

• 计算列和稀疏列不能是列存储索引的一部分。

• 不能在索引视图上创建列存储索引。

• 列存储索引的设计注意事项和数据加载。

当使用列存储索引时，某些查询的速度会远远超过其他查询。因此，为了优化查询性能，必须要了解什么情况下适合生成列存储索引，什么情况下不适合生成列存储索引。接下来我们将介绍什么情况下适合生成列存储索引、设计时的注意事项，以及在使用列存储索引时如何加载数据。

适合生成列存储索引的情形

下面的列表描述了数据库管理员在什么情况下应使用列存储索引来优化查询性能：

• 工作负载大部分都是读取操作，特别是数据仓库工作负载。

• 您的工作流允许使用分区（或删除-重新生成索引策略）来处理新数据。这种情况最常发生在定期维护窗口时，例如可以重新生成索引时或者临时表正在切换到现有表的空分区时。

• 大多数查询适合星型联接模式，或者需要扫描和聚合大量数据。

• 数据需要更新并且大多数更新操作是追加新的数据，而且可以使用临时表和分区切换来加载这些数据。

在生成以下类型的表时，您应使用列存储索引：

• 大型事实表

• 大型（数百万行）维度表

不适合生成列存储索引的情形

数据库管理员可能会遇到这样的情况：在表上使用传统的 B 树索引所得到的性能高于使用列存储索引所得到的性能。下表介绍了其中一些情况：

• 表中的数据经常需要更新。

• 分区切换或重新生成索引不符合您的业务工作流要求。

• 需要频繁使用较小的查找查询。但请注意，在这种情况下，使用列存储索引仍然具有自己的优势。因此，您可以实现列存储索引而不会有任何影响，因为查询优化器应该能够确定何时使用传统的 B 树索引来代替列存储索引。此策略假定您已更新统计信息。

• 针对您的工作负载，您测试了列存储索引，但看不到任何好处。

加载新数据

如前文中所述，不能直接更新具有列存储索引的表。但是，有三种方法可以将数据加载到具有列存储索引的表中：

• 禁用列存储索引 此过程包括以下三个步骤：

a. 首先禁用列存储索引。

b. 更新数据。

c. 在更新完成后重新生成索引。

在利用这一策略时，数据库管理员应确保有一个适当的维护窗口。与该维护窗口相关联的时间长短因每个客户的工作负载而异。因此，应在原型环境内进行测试，以便确定所需的时间。

• 利用分区和分区切换 通过将数据分区，数据库管理员能够快速、高效地管理和访问数据的子集，同时又能保持整个数据集合的完整性。使用分区切换，数据库管理员还能够通过将表作为分区分配给现有已分区表、将分区从一个已分区表切换到另一个已分区表，或者重新分配分区以便构成单个表，从而快速、高效地传输数据的子集。分区切换完全支持列存储索引，是用来更新数据的一种切实可行的方法。

若要使用分区加载数据，请执行以下步骤：

d. 请确保您有一个空分区，以便接受新数据。

e. 将数据加载到一个空的临时表中。

f. 将该临时表（包含新加载的数据）切换到空分区中。

要使用分区来更新现有数据，请使用以下步骤：

g. 确定哪个分区包含要修改的数据。

h. 将该分区切换到一个空的临时表中。

i. 在临时表上禁用列存储索引。

j. 更新数据。

k. 在临时表上重新生成列存储索引。

l. 将临时表切换回原始分区（该原始分区在切换到临时表之后，就成为空分区）。

• Union All 数据库管理员可以通过将主要数据存储于具有列存储的事实表中来加载数据。接下来，创建一个辅助表，添加或更新数据。最后，利用 UNION ALL 查询，返回具有列存储索引的大型事实表和较小的可更新表这两个表中的所有数据。通过使用分区切换，或者通过禁用并重新生成列存储索引，定期将数据从辅助表加载到主表中。请注意，使用 UNION ALL 策略的某些查询的执行速度可能不会像所有数据都处于单个表中时那样快。

创建列存储索引

创建列存储索引的过程与创建任何其他传统 SQL Server 索引的过程非常相似。可以使用 SQL Server Management Studio 中的图形用户界面，也可以使用 Transact-SQL。很多人更愿意使用图形用户界面，因为在使用图形界面时可以不用键入所有的列名，而在使用 Transact-SQL 创建索引时就必须键入列名。

在创建列存储索引时，经常会出现几个问题。数据库管理员常常想要了解以下方面的情况：

• 列存储索引中应包括哪些列？

• 是否能够创建聚集的列存储索引？

在创建列存储索引时，数据库管理员通常应包括与表相关联的所有支持列存储索引的列。请注意，并不需要包括所有列。对于第二个问题，我们的回答是“不能”。所有列存储索引都必须是非聚集的；因此，不允许聚集的列存储索引。

下面将分别介绍使用 SQL Server Management Studio 和 Transact-SQL 方法创建列存储索引的步骤。

使用 SQL Server Management Studio 创建列存储索引

下面是使用 SQL Server Management Studio (SSMS) 创建列存储索引的步骤：

1. 在 SQL Server Management Studio 中，使用对象资源管理器连接到 Microsoft SQL Server 数据库引擎实例。

2. 在对象资源管理器中，展开 SQL Server 实例，展开“数据库”、再展开某个数据库，然后展开您要创建列存储索引的表。

3. 展开该表，右键单击“索引”文件夹，选择“新建索引”，然后单击“非聚集列存储索引”。

4. 在“常规”选项卡的“索引名称”框中，键入新索引的名称，然后单击“添加”。

5. 在“选择列”对话框中，选择要参与列存储索引的列，然后单击“确定”。

6. 如果需要，可在“选项”、“存储”和“扩展属性”页上配置有关设置。如果您要保持默认设置，则单击“确定”以创建索引，如图 3-3 中所示。

图 3-3 使用 SSMS 创建非聚集列存储索引

使用 SSMS 创建非聚集列存储索引

使用 Transact-SQL 创建列存储索引

如前所述，除了使用 SQL Server Management Studio 图形用户界面之外，还可以使用 Transact-SQL 来创建列存储索引。下面的示例介绍了使用 Transact-SQL 创建列存储索引的语法：

CREATE [ NONCLUSTERED ] COLUMNSTORE INDEX index_name
ON <object> ( column [ ,…n ] )
[ WITH ( <column_index_option> [ ,…n ] ) ]
[ ON {
{ partition_scheme_name ( column_name ) }
| filegroup_name
| "default"
}
]
[ ; ]
<object>; ::=
{
[database_name.[schema_name ] .| schema_name .]
table_name
{
<column_index_option> ::=
{
DROP_EXISTING = { ON | OFF }
| MAXDOP = max_degree_of_parallelism
}

点击这里查看代码为图像

下面的列表说明了创建非聚集列存储索引的 Transact-SQL 语法的参数：

• NONCLUSTERED 此参数指示该索引是数据的辅助表示形式。

• COLUMNSTORE 此参数指示要创建的索引是列存储索引。

• index_name 此参数用来指定要创建的列存储索引的名称。索引名称在表或视图中必须是唯一的，但在数据库中不必是唯一的。

• column 此参数表示要添加到索引的一个或多个列。请注意，列存储索引最多可以有 1024 列。

• ON partition_scheme_name(column_name) 指定分区方案，用于定义要将已分区索引的分区映射到的文件组。 column_name 指定将对已分区索引进行分区所依据的列。该列必须与 partition_scheme_name 正使用的分区函数的参数（ partition_scheme_name 或 filegroup ）在数据类型、长度和精度上匹配。如果未指定这些项且该表已分区，则索引会使用与基础表相同的分区列放入同一分区方案中。

• ON filegroup_name 指示要创建指定索引的文件组的名称。

• ON “default” 在您要对默认文件组创建指定索引时使用此参数。

• DROP_EXISTING 如果使用参数 ON，则此选项指定应删除预先存在的索引（如果存在此类索引）。在另一方面，如果使用了 OFF，则在索引已经存在时将显示错误。

• MAXDOP = max_degree_of_parallelism 您可以使用 max degree of parallelism 选项来限制要在并行计划执行中使用的处理器数。此设置用于在索引操作期间覆盖 max degree of parallelism 配置选项。值为 1 将取消生成并行计划； 大于1 的值将会限制使用的最多处理器数；0 表示处理器的实际数量。

使用列存储索引

现在，您已经创建了一个新的列存储索引来加快您的查询速度，您将需要了解如何确定列存储索引实际上是否正用来加快您的查询速度。第一步是检查与要触发的查询相关联的执行计划。在图形执行显示计划的结果窗口中，有一个新的列存储索引扫描运算符图标，如图 3-4 中所示。列存储索引扫描运算符图标指示正在使用列存储索引进行索引扫描。

图 3-4 新的列存储索引扫描运算符图标

如果您突出显示该图标，则可以获得附加的列存储指示器和性能占用情况详细信息。例如，在图 3-5 中，物理操作元素指示使用了列存储索引扫描，并且存储元素显示为列存储。

图 3-5 查看列存储索引扫描结果

使用列存储索引提示

最后，如果您相信查询可以受益于列存储索引，并且查询执行计划尚未利用列存储索引，则可以强制查询使用列存储索引。您可以通过使用 WITH (INDEX(<indexname>)) 提示（其中，<indexname> 参数是您要强制使用的列存储索引的名称）来强制查询使用列存储索引。

下面的示例介绍了一个通过索引提示强制使用列存储索引的查询：

SELECT DISTINCT (SalesTerritoryKey)
FROM dbo.FactResellerSales WITH (INDEX (Non-ClusteredColumnStoreIndexSalesTerritory)
GO

点击这里查看代码为图像

下一个示例介绍了另一个通过索引提示来强制使用不同索引（例如传统的聚集 B 树索引）的查询。例如，假定在名为 SalesTerritoryKey 的表上有两个索引，一个名为 ClusteredIndexSalesTerritory 的聚集索引以及一个名为 Non-ClusteredColumnStoreIndexSalesTerritory 的非聚集列存储索引。该提示强制查询使用名为 ClusteredIndexSalesTerritory 的聚集索引，而不使用列存储索引：

SELECT DISTINCT (SalesTerritoryKey)
FROM dbo.FactResellerSales with (index (ClusteredIndexSalesTerritory)
GO

点击这里查看代码为图像

最后一个示例介绍了一个通过索引提示强制忽略列存储索引的查询：

SELECT DISTINCT (SalesTerritoryKey)
FROM dbo.FactResellerSales
Option (ignore_nonclustered_columnstore_index)
GO

点击这里查看代码为图像

列存储索引的注意事项和最佳做法

毋庸置疑，SQL Server 产品组投入巨资打造的列存储索引，可以大大提高数据仓库工作负载的查询处理效率。列存储索引技术问世以来，查询优化、查询执行和存储引擎团队与 SQL Server 性能团队、SQL Server 客户顾问团队 (SQLCAT) 和 Microsoft 技术中心 (MTC) 通力合作，在许多客户环境下对该技术进行了大量的测试。根据测试结果，客户表示查询速度“出奇地快”，结果“超乎想像”。

为了帮助您实现类似的结果，下面是基于初始测试结果总结出的一些列存储索引的最佳做法：

• 在编写查询时，尽可能找到与列存储索引的“最佳结合点”。例如，星型联接查询的速度特别快。

• 应尽可能避免可能会让列存储索引的性能大打折扣的构造，例如 Outer Joins、Unions 和 Union All。

• 尽可能在列存储索引中包含所有列。

• 如果可能，将小数/数字转换为精度小于或等于 18。

• 创建索引需要大量内存；因此，应相应地调整 SQL Server 系统上内存的大小。在估计创建列存储索引所需的内存时，请使用下面的经验公式：

内存要求 (MB) = [(4.2 * 列存储索引中的列数) + 68]*DOP + (字符串列数 * 34)

• 请确保您的查询尽可能利用批处理模式。这非常重要，可以大大加快查询速度。

• 尽可能使用整型，因为它们提供了更紧凑的表示形式以及提早进行筛选的机会。

• 考虑对表进行分区以便于更新。

• 甚至在您的查询不能使用批处理模式时，您仍然可以通过使用列存储索引来减少 I/O，提高性能。

第 4 章
安全性增强功能

对于以前版本的 Microsoft SQL Server，人们普遍认为，它可以提供不同凡响的数据保护、访问控制和遵从性。SQL Server 2008 R2 配备了可供组织利用的多种功能，包括但不限于：用于确保数据安全的透明数据加密 (TDE)、用于实现数据和密钥分离的可扩展密钥管理 (EKM)、用于实现最强身份验证的 Kerberos 身份验证，以及用于满足遵从性要求的 SQL Server Audit、基于策略的管理和变更数据捕获。从安全角度来说，SQL Server 2008 R2 毫无疑问是强健的，并且是数据库平台行业当之无愧的领导者，它的安全漏洞以及维护系统所需的安全修补程序是最少的。SQL Server 2012 让 SQL Server 的受欢迎程度更进一步，因为它提供若干安全增强功能，可帮助组织增强对数据访问的控制，同时维护最高级别的数据保护和遵从性。

SQL Server 2012 中的安全性增强功能

下表显示了其中几项改进，对于寻求获得数据库平台的最高安全性和最大控制的组织来说，这些改进很有吸引力：

• 安全可管理性改进

• 组的默认架构

• 用户定义的服务器角色

• 审核增强功能

• 在所有 SKU 上都支持了审核

• 改进了弹性

• 用户定义的审核事件

• 记录筛选

• T-SQL 堆栈信息

• 数据库身份验证增强功能：包含数据库的身份验证

• 密码更改

• 哈希算法

• 证书密钥长度

• 服务主密钥和数据库主密钥加密从 3DES 更改为 AES

• 其他安全性增强功能

• 与 SharePoint 和 Active Directory 紧密集成

• 设置增强功能

• 新权限

本章从安全可管理性改进开始，介绍 SQL Server 2012 中引入的上述这些新的安全性增强功能。

安全可管理性改进

为了提高安全可管理性，SQL Server 2012 中引入了两个不大但非常重要的更改。第一个改进是组的默认架构，第二个改进是用户定义的服务器角色。

注意 在 Microsoft Connect 网站的 SQL Server 社区上，组的默认架构是呼声最高的安全功能请求。

组的默认架构

在以前版本的 SQL Server 中，可以定义 SQL Server 用户的默认架构。这个操作增强了安全性并简化了管理。默认架构是解析它所引用的对象名称时搜索的第一个架构。当帐户的默认架构不存在时，SQL Server 假定 dbo 是默认架构。但是这种方法存在着一个不容忽视的问题，就是无法定义 Windows 组的默认架构。如您所料，这造成了管理方面的麻烦。如果 SQL Server 将某个用户作为 Windows 组的成员进行了身份验证，则默认架构并不与该用户关联。如果用户创建了表之类的对象，将生成新的架构并且该架构的默认名称与用户相同。对数据库管理员而言，这无疑是管理方面的噩梦。试想一下，如果有 500 个用户与某一 Windows 组相关联，并且该 Windows 组内的所有用户都创建了对象，则数据库管理员将需要管理 500 个不同的架构。

幸运的是，在 SQL Server 2012 中，与组架构相关联的安全性管理不仅得到了简化，而且现在可以针对 Windows 组创建默认架构。通过向 Windows 组分配默认架构，组织可以简化数据库架构的管理工作。同样重要的是，当用户更改组时，不再会发生将架构委派给错误的用户的情况了。在另一方面，如果使用了不正确的架构，则新的组默认架构功能将会防止查询错误的发生。最后，还可以避免不必要的隐式架构创建。

在讨论架构时，有一个问题常常会被提起：如果用户附属于多个 Windows 组，将会发生什么情况？如果没有为用户帐户定义默认架构，SQL Server 将检查 sys.principal 表，并将具有最低主体 ID 的组选择为默认架构。

注意 在 SQL Server 2012 中，可通过使用 CREATE USER 或 ALTER USER 的 DEFAULT_SCHEMA 选项定义组的默认架构。如果未对组定义默认架构，SQLServer 将假定 dbo 是默认架构。

下面的 Transact-SQL 脚本说明了如何为新的 Windows 组（本地组）创建默认架构：

-- Create User based on Local Group [SQL01\CDBUsers]
CREATE USER [SQL01\CDBUsers]
GO
--Allocate Database Role Membership
ALTER ROLE DB_DATAREADER ADD MEMBER [SQL01\CDBUsers]
ALTER ROLE DB_DATAWRITER ADD MEMBER [SQL01\CDBUsers];
GO
--Create Default Schema for Group
CREATE SCHEMA Users AUTHORIZATION [SQL01\CDBUsers];
GO
-- Set the default schema for Group
ALTER USER [SQL01\CDBUsers] WITH DEFAULT_SCHEMA = Users
GO
--Create Table with Group and Default Schema
CREATE TABLE Users.t1(c1 int)
GO
--Insert Value
INSERT INTO Users.t1 VALUES (1)

点击这里查看代码为图像

该示例创建一个名为 [SQL01\CDBUsers] 的本地组，分配适当的数据库角色成员资格，为该组创建然后分配默认架构。最后一部分将使用该组的默认架构创建一个表，然后向该表插入一条记录。

用户定义的服务器角色

为了能够实现与组织的系统的遵从性，基于角色的安全性以及职责的划分是组织必须遵守的策略。这些策略的主要目标是只允许授权用户对系统的访问，以便减少安全威胁和操作错误，同时提高用户及其权限的可管理性。这些策略通常通过以下操作实现：创建一个角色，向该角色应用权限，然后向角色分配成员，而不是简单地将相同级别的权限应用于要求访问或管理权限的每个用户或管理员。

在以前版本的 SQL Server 中，用户定义的角色确保了基于角色的安全性，从而为实现职责的分离提供了可能。然而，用户定义的角色所带来的职责分离只是在数据库级别上，而不是在服务器级别上。这是因为在服务器级别，管理员具有对固定角色的访问权限。顾名思义，与用户定义的角色不同，服务器角色是固定的，并且数据库管理员无法从细化的角度来自定义安全对象。这通常导致数据库管理员向成员提供过高的访问权限，如 sysadmin 角色，因为他们找不到可以贴切满足业务和安全性要求的固定角色。在 SQL Server 2012 中，服务器级别上也引入了用户定义的角色，这样，在管理服务器时职责可以划分地更清晰，从而增加了灵活性、可管理性和遵从性。

创建和管理服务器角色

可以使用 SQL Server Management Studio (SSMS) 创建服务器角色：在对象资源管理器中展开“安全”文件夹，然后右键单击“服务器角色”并且选择“新建服务器角色”。或者，也可以使用以下 Transact-SQL 语句创建和管理服务器角色：CREATE SERVER ROLE、ALTER SERVER ROLE 和 DROP SERVER ROLE。

使用 SQL Server Management Studio 创建服务器角色

下面的示例演示如何使用 SSMS 创建服务器角色：

1. 在 SQL Server Management Studio 中，使用对象资源管理器连接到 Microsoft SQL Server 数据库引擎实例。

2. 在对象资源管理器中，展开 SQL Server 的实例，然后展开“安全”文件夹。

3. 右键单击“服务器角色”文件夹，然后选择“新建服务器角色”。

4. 在“新建服务器角色”向导的“常规”页中，执行下列操作：

a. 指定新服务器角色的名称。

b. 选择新服务器角色的所有者。

c. 选择适当的安全对象，因为它们属于这个新服务器角色。

d. 在选择安全对象时，通过选中以下权限之一的相应复选框，应用显式权限：授予、具有授予权限或拒绝。（请参见图 4-1）。

5. 在“成员”页上，将要添加的个人或组的登录名添加到一个或多个服务器角色上。

图 4-1 向新服务器角色应用适合可用性组的安全对象

6. 因为用户定义的服务器角色可以是另一个服务器角色的成员，因此在最后一步，在“成员身份”页上，指定新服务器角色所属的适当的服务器角色。

使用 Transact-SQL 创建服务器角色

也可以使用 Transact-SQL 创建服务器角色并应用适当的权限、成员和服务器角色成员身份。以下 Transact-SQL 语句创建一个名为 DBAControlServer 的新服务器角色，添加 Windows Finance 组成员身份，并允许该组创建数据库和可用性组。但是，此组无法更改登录名或服务器审核。

USE [master]
CREATE SERVER ROLE [DBAControlServer] AUTHORIZATION [sysadmin]
ALTER SERVER ROLE [DBAControlServer] ADD
MEMBER [PROTOTYPE\Finance]
GRANT CONTROL SERVER TO [DBAControlServer]
GO
GRANT CREATE ANY DATABASE TO [DBAControlServer]
GRANT CREATE AVAILABILITY GROUP TO [DBAControlServer]
DENY ALTER ANY LOGIN TO [DBAControlServer]
DENY ALTER ANY SERVER AUDIT TO [DBAControlServer]
GO

点击这里查看代码为图像

审核增强功能

随着越来越多的组织受到某种形式的法规遵从性的约束，负责安全性的 SQL Server 产品组决定进一步增强与服务器和数据库关联的现有审核功能。获得增强的领域包括：

• 在所有 SKU 上都支持了审核

• 改进了弹性

• 用户定义的审核事件

• 记录筛选

• T-SQL 堆栈信息

在所有 SKU 上都支持了审核

在 SQL Server 2008 和 SQL Server 2008 R2 中提供的服务器审核规范和数据库审核规范对象是用于实现组织的审核和遵从性需要的常见功能，受到这些组织的欢迎。但是这些功能仅在 SQL Server 的高级 SKU 中提供，客户对此也颇有抱怨。因此，使用 SQL Server Standard Edition 的客户不得不继续使用 SQL 跟踪来捕获审核信息。如您所料，这会带来许多挑战，因为与服务器和数据库审核规范相比，SQL 跟踪审核功能有一些限制。有时，这可能会对性能产生负面影响，而且它会造成组织没有一个全盘的审核解决方案来实现业务目标 — 具体来说，是与通过从跟踪和安全日志收集审核数据相关的目标。现在，SQL 跟踪即将退出历史的舞台，因为在所有的 SQL Server 2012 SKU 上都将提供基本的审核功能。

改进了弹性

使用以前版本的 SQL Server 的组织可能会面临一个问题，那就是在出现故障时可能会丢失审核数据。例如，如果在将审核日志写入网络共享区时网络突然变得不可用，审核信息捕获过程就会停止，从而造成审核信息的缺失。这会在取证调查过程中对组织产生负面影响。此外，如果设置配置为在发生故障时关闭服务器 (ON_FAILURE = SHUTDOWN)，则可能会发生 SQL Server 系统范围的中断。在问题得以解决前，这不仅影响审核数据，还会影响系统可用性。

在 SQL Server 2012 中，负责安全性的产品组引入了针对审核日志失败的新方案，从而改进了与审核日志失败相关联的弹性，彻底解决了上述问题。这些增强功能包括：

• 在审核日志故障时关闭服务器 这是在以前版本的 SQL Server 中提供的一个常见功能。如果数据无法写入审核日志中，则运行 SQL Server 的系统将自动关闭。如果组织希望实现最高形式的审核和安全遵从性，通常就会使用此功能。请注意，发出关闭请求的登录名必须具有“关闭”权限；否则，此功能将失败并且将引发错误消息。

• 在审核日志失败时: 继续 这个新选项允许 SQL Server 在数据无法写入审核日志时继续操作。在故障期间，系统将继续尝试将事件写入审核日志中；但需要注意的是，在故障期间将不保留审核记录。仅在以下情况下才使用此选项：在审核故障过程中确保 SQL Server 正常运行更为重要，并且未违反公司政策。

• 在审核日志失败时: 失败操作 在选中此选项后，如果 SQL Server 无法将审核事件写入审核日志，它会令事务失败。但是，未受审核管控的事务将继续处理。例如，如果您有两个表（如 Customer 和 Sales），并且您仅审核 Customer 表，因为它包含敏感数据。与 Customer 表相关联的事务将会出现失败；但是，因为没有对 Sales 表启用审核，所以在日志失败期间销售数据将继续起作用。

还有其他一些提高弹性的审核增强功能。这些增强功能超出了上面讨论的与处理审核日志失败相关联的改进。这些审核改进包括：

• 在使用某一文件作为审核目标时，引入了一个新的选项“最大文件数”（或 Max_Files）。在以前版本的 SQL Server 中，并没有明确限定要保留的日志文件数，而这个新的选项限制了不循环使用审核文件的情况下可使用的审核文件数量的上限。

• 对于以前版本的 SQL Server，想要确定查询是通过存储过程还是应用程序发出的，并不是件容易的事情。审核日志现在提供附加的 Transact-SQL 堆栈帧信息；因此，审核人员可以区分所使用的方法。

• 新的 sp_audit_write (Transact-SQL) 过程允许应用程序将自定义信息写入审核日志，因为 SQL Server 审核规范现在支持用户定义的审核组。对于常见的请求，可以捕获其他一些信息，例如，在许多情况下与某个公共登录名相关联的应用程序用户。

• 为了更好地跟踪用户定义的审核事件， sys.server_file_audits 、sys.server_audits 和 sys.fn_get_audit_file 中额外增加了一些列。SQL Server 2012 现在可以筛选掉不需要的审核事件。有关详细信息，请参阅 CREATE SERVER AUDIT 和 ALTER SERVER AUDIT 中的 WHERE 子句。

• 可以审核与包含数据库相关联的用户。

使用 SSMS 创建新的审核

以下步骤说明了在使用 SQL Server Management Studio 创建审核时一些新的审核功能，如审核日志失败和审核文件的最大文件数选项。

1. 在 SQL Server Management Studio 中，使用对象资源管理器连接到 Microsoft SQL Server 数据库引擎实例。

2. 在对象资源管理器中，展开 SQL Server 的实例，然后展开“安全”文件夹。

3. 右键单击“审核”文件夹，然后选择“新建审核”。

4. 在“创建审核”向导的“常规”页上，指定新审核的名称。然后以毫秒为单位指定队列延迟，并选择适当的审核日志失败选项。最后，选择审核目标选项之一。

5. 如果您选择“文件”作为审核日志失败选项，则指定下列附加项：文件路径、审核文件最大限制、最大文件大小或启用保留磁盘空间（如果您想要在磁盘上预留出容纳审核文件大小的空间）。

6. 或者，使用“审核属性筛选器”页可以将谓词（Where 子句）添加到服务器审核。

7. 图 4-2 中所示，单击“确定”完成新审核的创建。

图 4-2 使用 SSMS 创建新的 SQL Server Audit

如图中所示，在创建新审核时使用了“操作失败”选项，这意味着如果 SQL Server Audit 无法写入审核日志，该操作将失败。此外，在达到最大文件数（例如 10）时，任何生成附加审核事件的操作都将失败并报告错误。

使用下面的 Transact-SQL 可以实现与上面的示例相同的结果：

USE [master]

GO
CREATE SERVER AUDIT [Audit-SQL01]
TO FILE
(  FILEPATH = N‘D:\Audits‘
,MAXSIZE = 10 GB
,MAX_FILES = 100
,RESERVE_DISK_SPACE = OFF
)
WITH
(  QUEUE_DELAY = 1000
,ON_FAILURE = FAIL_OPERATION
)
GO

点击这里查看代码为图像

用户定义的审核事件

新的用户定义的审核事件允许应用程序将自定义事件写入审核日志，为存储审核信息提供了更高的灵活性。下面以一个具体的 Transact-SQL 示例说明用户定义的审核事件：

CREATE DATABASE app1
GO
USE app1
GO
CREATE SCHEMA app
GO
CREATE TABLE app.accounts
(name nvarchar(128), passwordHash varbinary(128))
INSERT INTO app.accounts (name, passwordHash) values (N‘jackr’, 0x1234)
INSERT INTO app.accounts (name, passwordHash) values (N‘rob’, 0x12345)
CREATE PROCEDURE app.sp_establishId
(@name nvarchar(128),
@passwordHash varbinary(128))
AS
BEGIN
DECLARE @hashMatches bit
DECLARE @hash varbinary(128)
DECLARE @additionalInfo nvarchar(512)

SELECT @hash = passwordHash FROM app.accounts WHERE name = @name;
IF (@hash = @passwordHash)
BEGIN
SET @hashMatches = 1;
END
ELSE
BEGIN
SET @hashMatches = 0;
END
SELECT @additionalInfo = NTech webuser=‘ + @name;
EXEC sys.sp_audit_write 1, @hashMatches, @additionalInfo
RETURN @hashMatches
END
-- configure audit of logins and user defined events
DECLARE @authOK bit
EXEC @authOK = app.sp_establishId N‘jackr’, 0x1234
SELECT @authOK
DECLARE @authOK bit
EXEC @authOK = app.sp_establishId N‘rob’, 0x1234
SELECT @authOK
SELECT * from sys.fn_get_audit_file(‘c:\auditlogs\*’, NULL, NULL)
// cleanup
use master
go
drop database app1
go

点击这里查看代码为图像

在此示例代码中，有一些帐户表，这些帐户表存储中间层用户名、密码和一个名为 sp_establishId 的存储过程，该存储过程用来验证密码。在中间层身份验证过程中，该中间层将取某个用户名和密码并且对密码执行哈希操作。然后，它将调用 sp_establishId 来验证密码，以便对用户进行身份验证。在 sp_establishId 结束时，将触发一个审核事件，并且记录用户名以及密码是否匹配。通过检查这些登录事件以及同一会话上随后的事件，审核人员将能够确定代表中间层用户执行的事件，即使中间层应用程序服务器或 Web 服务器可能已使用某一服务帐户对 SQL Server 进行了身份验证。在创建该过程后，脚本将通过以不同值调用 sp_establishId 来显示成功与失败的案例，对审核进行演示。对于收集用户定义的审核组并且记录到 c:\auditlogs 中的文件的审核，最后的 Select 语句会将由这些调用导致的审核记录返回到sp_establishId。

记录筛选

请注意，SQL Server 审核是在 SQL Server 扩展事件（扩展事件）的基础上建立的。对于那些不熟悉此功能的用户而言，扩展事件就是针对服务器系统的一个常规事件处理系统。扩展事件基础结构支持 SQL Server 中数据的关联，并且在某些情况下，还支持操作系统和数据库应用程序中数据的关联。扩展事件为 SQL Server Audit 提供了一个可实现更快性能和更高吞吐量的框架。SQL Server 2012 中引入了扩展事件筛选功能；因此，可以将不需要的事件剔除出去，不允许它们写入审核日志。例如，假设您有一个应用程序，该应用程序使用某个应用程序帐户来访问一个表。如果该表是由该应用程序帐户访问的，您可能不想审核这种类型的活动；但是，如果某个用户从该应用程序之外访问同一个表，您就想要审核此事件。在此类情况下，您可以设置一个筛选器，将通过该应用程序帐户访问该表的活动从审核中排除出去。

下面的示例将创建一个数据库、一个架构和两个表。DataSchema.SensitiveData 表包含保密数据，因此，必须在审核中记录对该表的访问。DataSchema.GeneralData 表不包含保密数据。数据库审核规范将审核对 DataSchema 架构中所有对象的访问。在服务器审核时使用一个 WHERE 子句，该子句将服务器审核限制为仅审核 SensitiveData 表。该服务器审核假定审核文件夹位于 C:\SQLAudit。

CREATE DATABASE TestDB;
GO
USE TestDB;
GO
CREATE SCHEMA DataSchema;
GO
CREATE TABLE DataSchema.GeneralData (ID int PRIMARY KEY, DataField varchar(50) NOT NULL);
GO CREATE TABLE DataSchema.SensitiveData (ID int PRIMARY KEY, DataField varchar(50) NOT NULL);
GO
-- Create the server audit in the master database USE master;
GO
CREATE SERVER AUDIT AuditDataAccess TO FILE ( FILEPATH =‘C:\SQLAudit\’ ) WHERE object_name = ‘SensitiveData’ ;
GO
ALTER SERVER AUDIT AuditDataAccess WITH (STATE = ON);
GO
-- Create the database audit specification in the TestDB database USE TestDB;
GO
CREATE DATABASE AUDIT SPECIFICATION [FilterForSensitiveData]
FOR SERVER AUDIT [AuditDataAccess]
ADD (SELECT ON SCHEMA::[DataSchema]
BY [public]) WITH (STATE = ON);
GO
-- Trigger the audit event by selecting from tables
SELECT ID, DataField FROM DataSchema.GeneralData;
SELECT ID, DataField FROM DataSchema.SensitiveData;
GO
-- Check the audit for the filtered content
SELECT * FROM fn_get_audit_file
(‘C:\SQLAudit\AuditDataAccess_*.sqlaudit’,default,default);
GO

点击这里查看代码为图像

数据库身份验证增强功能

在使用以前版本的 SQL Server 时，用户需要在数据库引擎内登录才能在数据库中进行身份验证。该登录名可以是 Windows 用户帐户、Windows 组帐户或 SQL Server 帐户。有时，这种相互依赖的关系会导致出现身份验证问题 — 特别是需要移植数据库时。例如，如果数据库从一个 SQL Server 实例（源）迁移或故障转移到另一个 SQL Server 实例（目标），则数据库管理员必须确保源 SQL Server 实例上的所有登录名在目标 SQL Server 实例上都存在。如果登录名在目标实例上不存在，则用户、组或应用程序将无法在数据库中进行身份验证，从而导致整个系统无法使用。对于使用数据库镜像的组织而言，在故障转移期间经常会遇到这一问题。

通过引入包含数据库身份验证，SQL Server 2012 解决了身份验证和登录名之间的依赖关系问题，从而增强了用户数据库的遵从性、授权和可移植性。包含数据库身份验证允许用户直接在用户数据库进行身份验证，无需依赖数据库引擎中的登录名。此功能可增强用户数据库在服务器之间的可移植性，因为包含数据库不依赖于任何外部因素。

那么，在 SQL Server 数据库引擎中没有登录名的情况下，如何对用户数据库进行身份验证呢？当使用包含数据库身份验证时，与登录名相关联的用户信息（如用户名和密码）直接存储于用户数据库中，而不是存储于 master 数据库中。不用担心这种身份验证的安全性，因为经过身份验证的用户不能执行数据库实例级别的操作，只能在用户数据库内执行数据操作语言 (DML) 操作。包含数据库身份验证的另一个好处是，它可以避免在数据库实例中创建孤立或不使用的登录名，而这些登录名的管理正是以前版本的 SQL Server 中许多数据库管理员都会遇到的难题。

注意 包含数据库身份验证允许在没有登录名的情况下，针对具有密码的 SQL 用户和没有登录名的 Windows 身份验证进行身份验证。在实现 AlwaysOn 可用性组时，这个功能真的很棒。

启用包含数据库

包含数据库身份验证是服务器范围的属性并且很容易启用。可以在 SQL Server Management Studio 的“高级服务器属性”页或使用 Transact-SQL 启用或禁用此功能。

使用 SQL Server Management Studio 启用包含数据库身份验证

请按照以下步骤使用 SQL Server Management Studio 启用包含数据库身份验证：

1. 在对象资源管理器中，右键单击某一 SQL Server实例，然后单击“属性”。

2. 选择“高级”页，在“包含”部分中，将“启用包含数据库”设置为 True ，然后单击“确定”。

使用 Transact-SQL 启用包含数据库身份验证

下面的 Transact-SQL 示例说明如何使用 sp_configure 选项为某一 SQL Server 实例启用包含数据库身份验证：

sp_configure ‘show advanced options’ 1,
GO
sp_configure ‘contained database authentication’, 1;
GO
RECONFIGURE;
GO

点击这里查看代码为图像

在使用 Transact-SQL 时，如果 “Contained Database Authentication” 选项设置为 (1) 将启用该选项，并且它允许创建包含数据库或包含数据库附加到数据库引擎。另一方面，如果该选项设置为 (0)，将不支持包含数据库并且无法创建包含数据库或将其附加到数据库引擎。

创建用户

如前所述，包含数据库是用来解除用户和数据库与 SQL Server 数据库引擎之间关联的好方法；因此，组织可以在 SQL Server 实例之间移动数据库，从而实现数据库的可移植性。请注意，包含数据库有一些特殊的注意事项。例如，在连接到包含数据库时，如果用户在 master 数据库中没有登录名，则连接字符串必须包括该包含数据库的名称来作为初始目录。拥有密码的包含数据库用户始终需要使用初始目录参数。

创建拥有密码的包含数据库用户

下面的示例创建一个拥有密码的包含数据库用户。该示例只能在包含数据库中执行：

USE AdventureWorks2012;
GO
CREATE USER SherryS
WITH PASSWORD=‘3e4w3cREs$mE_uk’
, DEFAULT_LANGUAGE=[English]
, DEFAULT_SCHEMA=[dbo]
GO

点击这里查看代码为图像

为域登录名创建包含数据库用户

下面的示例为 Prototype 域中名为 Kyanna 的登录名创建一个包含数据库用户。该示例只能在包含数据库中执行。

USE AdventureWorks2012;
GO
CREATE USER [Prototype\Kyanna] ;
GO

点击这里查看代码为图像

在许多情况下，您可能要将已经存在于数据库引擎中的数据库用户从 SQL Server身份验证登录名更改为拥有密码的包含数据库用户。下面的 Transact-SQL 示例中介绍的 sp_migrate_user_to_contained 过程可以实现此功能：

sp_migrate_user_to_contained
@username = N‘<User Name>’,
@rename = N‘keep_name’,
@disablelogin = N‘do_not_disable_login’ ;
Go

点击这里查看代码为图像

注意 在迁移用户时，切勿从 SQL Server 实例中禁用或删除所有管理员登录名。

与包含数据库身份验证有关的安全问题

尽管包含数据库身份验证是实现数据库可移植性的好方法，但数据库管理员必须了解包含数据库有一些需要审慎管理的安全威胁。首先，如果用户具有 ALTER ANY USER 权限，则无需管理员首肯即可在其数据库内授予和创建包含数据库用户。其次，如果用户通过包含数据库身份验证获取了对某一数据库的访问权限，则在数据库引擎内的其他数据库启用了来宾帐户的情况下，该用户将能够访问这些数据库。如果您创建重复的登录名，则可能会遇到拒绝服务攻击。例如，如果创建了一个具有密码的包含数据库用户，所使用的名称与某一 SQL Server 登录名相同，而且在该 SQL Server 登录名进行连接时将包含数据库指定为初始目录，则该 SQL Server 登录名将无法连接。最后，尽可能利用 Windows 身份验证是很有好处的，因为 Windows 身份验证可以利用 Kerberos 身份验证，并且 Windows 密码策略不但是一流的，而且非常强健。

其他安全增强功能

正如您所看到的，SQL Server 2012 在安全性方面有了极大的提升。以下各节概述其他一些安全增强功能，这些增强功能不在本章的讨论范畴之内。

密码更改

越来越多的组织在使用加密保护数据时要求最高形式的安全性。在 SQL Server 2012 中，负责安全性的产品组极大增强了 SQL Server 密码系统；因此，组织在实现遵从性时可通过最高的信任级别来部署 SQL Server。主要的密码增强功能包括：

• 高级加密标准 (AES) AES 已经替代 DES 成为业界标准的加密规范。SQL Server 2012 使用 AES 加密算法来保护服务主密钥 (SMK) 和数据库主密钥 (DMK)。

• 证书密钥长度 创建证书时，从外部源导入的私钥的最大长度从 3456 位扩展到 4096 位。

• 哈希算法 在密码系统中，SHA-2 是由 National Security Agency (NSA) 开发的一组密码哈希函数。在 SQL Server 2012 中，HASHBYTES 函数现在支持 SHA2_256 和 SHA2_512 算法。

• 二进制支持 在使用 Transact-SQL CREATE CERTIFICATE 过程时，您可以从字节创建证书。FROM BINARY 选项允许您指定 ASN 编码的证书的二进制描述。

与 SharePoint 和 Active Directory 紧密集成

SharePoint 和 SQL Server 是两种紧密关联的技术，为组织提供更高的业务生产率、商业智能和报表功能。我们引入了新的 SharePoint 和 Active Directory 安全模块，可以更好地确保在 SharePoint 中共享和发布的最终用户报表的安全。增强的安全模型提供行级和列级控制，使组织能够更好地实现以下目标：

• 强制实施密码策略

• 使用角色和代理帐户

• 提供安全性得到增强的元数据访问

• 使用执行上下文增强安全功能

设置增强功能

为了进一步增强安装期间 SQL Server 数据库引擎设置过程的安全性和角色分离，在以下三个方面进行了修改。

• sysadmin 固定服务器角色中不再自动添加 BUILTIN\administrators 和 Local System (NT AUTHORITY\SYSTEM)。但是，本地管理员在单用户模式下仍可以访问数据库引擎。

• 对于 Windows 7 或 Windows Server 2008 R2 上安装的 SQL Server，现在支持托管服务帐户和虚拟帐户。

• 在每服务 SID 下运行服务的保护现在扩展到所有操作系统。

新权限

新的权限可用于管理对数据库内元素的授权以及确保其安全。这些新的权限包括：

• 新增了针对 SEARCH PROPERTY LIST 的 GRANT、REVOKE 和 DENY 权限。

• 新增了针对 CREATE SERVER ROLE 和 ALTER ANY SERVER ROLE 的 GRANT、REVOKE 和 DENY 权限。

第 5 章
可编程性和超越关系增强功能

Microsoft SQL Server 2012 中提供了大量的增强功能，旨在改善可编程性和超越关系范例。对于不熟悉超越关系概念的读者，它指的是超越 SQL Server 中的传统表范例的数据和服务。SQL Server 2012 中的一些超越关系增强功能使您能够更好地构建用于管理所有数据的应用程序，其中包括对现有技术功能（如全文搜索、空间数据和 FILESTREAM）的改进。SQL Server 2012 还引入了全新的功能，如 FileTable 和统计语义搜索。

在简要介绍这些增强功能之前，本章将先回顾一下超越关系的难点、SQL Server 2012 针对超越关系功能的一些目标，以及 SQL Server 2012 的数据和服务生态系统（也 SQL Server 中也称为超越关系范例）。

使用超越关系范例的难点

构建和维护用于处理关系数据和非关系数据的应用程序，是组织目前面临的一个极其复杂的任务，其原因则各不相同。首先，将结构化数据和非结构化数据整合在一起就是个难题，因为这两类数据完全不同。其次，结构化数据通常位于关系数据库中，而非结构化数据通常存储在服务器上的文件夹或共享区中。在此情况下，使这些数据相互关联或相互融合的方法并不多。这就给组织带来了管理方面的问题。例如，数据库管理员将需要管理两种不同的存储空间：用于存储结构化数据的关系数据库以及承载非结构化数据的文件共享区。此外，每种策略需要不同的方法来实现高可用性和灾难恢复，没有一种简单的方法能够让结构化和非结构化的数据保持同步。最后，希望通过一次搜索就能跨结构化格式和非结构化格式获得相关的数据，难度实在太大了。

SQL Server 2012 超越关系目标

上一部分讨论的难点促使 SQL Server 开发团队确定了几个目标，目的是在 SQL Server 2012 中增强超越关系策略和功能。这些目标包括：减少管理完全不同的数据的成本；简化使用所有数据类型的应用程序的开发过程；对所有数据提供管理和编程服务（无论是结构化数据还是非结构化数据）；最后，提供针对所有数据的丰富的搜索体验，进而使组织能够充分挖掘业务洞察力，并在所存储的各类数据之间建立有意义的关系。

从行业发展趋势来看，在 SQL Server 2012 开发超越关系范例还有更多的原因。组织中占总量 80% 的数据不是结构化数据，它们不存储在数据库中、无人管理也无法扩展。SQL Server 可以给组织提供一种方法来管理非结构化数据，同时提供丰富的应用体验，并使组织有机会从数据中获得有价值的见解。此外，此解决方案还可以扩展，以支持数亿份文档。

在介绍 SQL Server 2012 中新增的超越关系功能之前，我们先来了解 SQL Server 2012 的非结构化数据和服务生态系统。

丰富的非结构化数据和服务生态系统

图 5-1 概述了 SQL Server 2012 中的非结构化数据和服务生态系统，包括 Microsoft 在过去若干个 SQL Server 版本中所做的改进。超越关系功能的焦点随着 SQL Server 2008 的发布而趋向成熟。过去，您不得不使用二进制大对象 (BLOB)（如 varbinary max 列）在数据库内的表中存储非结构化数据。此方法提供了集成；但组织将文档直接存储在 Windows 文件系统中时通常将获得良好的流速度，而此解决方案则缺乏这一特性。

为了解决这些问题，SQL Server 2008 中引入了 FILESTREAM。借助 FILESTREAM，基于 SQL Server 的应用程序可以将非结构化数据（如文档和图像）存储在文件系统中。应用程序可以利用丰富的流式 API 和文件系统的性能，同时可保持非结构化数据与对应结构化数据之间的事务一致性。但是，对于一些需要 Windows 32 目录层次结构文件系统才能运行的 Windows 应用程序而言，FILESTREAM 并不适用，因为您需要向 FileOpen 命令提供事务上下文，而这只能通过 FileStream API 才能实现。所以，这些应用程序还是不能利用 FILESTREAM 功能。

图 5-1 SQL Server 的数据和服务生态系统

SQL Server 2008 中引入的另一个用于解决非结构化数据的新功能是远程 BLOB 存储区 (RBS)。借助于 RBS 标准化 API 集，可以在独立于供应商的 API 中存储二进制大型对象 (BLOB)，如 Office 文档或视频。RBS 提供一个独立于供应商的 API，可以存储文档所在的数据库远程 BLOB 存储区的 BLOB ID 并管理链接一致性。文件和文档的实际大小和位置存储在数据库中，而不是按其结构存储。RBS 使数据库管理员能够以松散耦合的方式将关系数据与 RBS 数据相关联。RBS 没有与全文搜索相集成，也没有在两个存储区之间提供完全的事务性集成，但它的确使数据库管理员能够以标准化方式构建应用程序，同时允许存储区来回传递数据。

在 SQL Server 2012 中，通过融入 FileTable、FILESTREAM、一些全文搜索功能以及针对非结构化数据进行语义搜索的功能，超越关系范例已得到了改进。

超越关系示例

Microsoft Outlook 与 Microsoft Exchange 就是常见的超越关系数据库和应用程序的一个范例。应用程序同时存储结构化数据和非结构化数据，它们提供与语义搜索类似的传统搜索功能，也就是在应用程序中的所有元素范围内查找相关文档。例如，收到的每封电子邮件（包括日期和优先级）都存储在结构化数据库中，而邮件的实际内容（包括如图片和 Microsoft PowerPoint 演示文稿等附件）则被视为非结构化数据。通过使用收件箱搜索工具，您可以借助于特定的关键字，在您的各邮件中实现结构化和非结构化的搜索功能。此外，还可以通过工具实现语义搜索，查找会话中的相关邮件或特定发件人发送的相关邮件。再者，这也是一个说明结合使用超越关系功能和语义搜索的好范例。

现在，让我们将注意力转到 SQL Server 2012 的上下文，了解一下数据库引擎中的超越关系和语义搜索方面的增强功能。

FILESTREAM 增强功能

如前面所述，借助 FILESTREAM，基于 SQL Server 的应用程序可以将非结构化数据（如文档和图像）存储在文件系统中。对于 SQL Server 2008 R2 中的 FILESTREAM，每个 FILESTREAM 文件组只支持一个存储容器。这会限制存储容量扩展和 I/O 扩展。

SQL Server 2012 改进了 FILESTREAM，通过添加多存储容器支持，实现了最大程度的扩展功能。此外，还有其他一些与 FILESTREAM 关联的新功能，如下表所述：

• 支持多个存储容器和文件组：

• 数据定义语言 (DDL) 更改为 Create/Alter Database 语句

• 可以设置容器的 max_size

• 支持数据库控制台命令 (DBCC) Shrinkfile Emptyfile

• 缩放的灵活性

• 通过添加额外的存储驱动器扩展存储

• 使用多个磁盘进行 I/O 扩展

根据客户的测试，使用多个磁盘后，FILESTREAM 的 I/O 可扩展性和性能得到了改善。图 5-2 显示了经过改进的 SQL Server 2012 与 SQL Server 2008 R2 的比较结果。图中显示了使用多个容器（靠近顶部的呈上升趋势的线）与使用单个容器（靠近底部的相对平坦的线）相比，稳定性和吞吐量方面的提升。图中还显示了一个复杂的应用程序级解决办法的曲线（显示多个波峰和波谷的不规则线条），该解决方法使用两个单独的表在两个容器间分配数据。与这种复杂解决方法相比，使用多个容器（前面提到的呈上升趋势的线）同样具有性能上的优势。该复杂解决方法的线条中显示的波谷是由应用程序代码的复杂性和一些测试异常情况所导致的。您可以忽略这些波谷。

图 5-2 表示 FILESTREAM 性能改进的图表

当通过多个容器读取 FILESTREAM 数据时，也可以看出性能得到了改进。在一些情况下，读取 1 MB 文件时，读取时的吞吐量性能提高了五倍。

FileTable

在数据库引擎中，FileTable 是在数据库内创建的一个新的用户表。FileTable 具有固定架构，并包含 FILESTREAM 和文件属性。用户可定义索引、约束和触发器；但不能更改或删除列和系统定义的约束。但请注意，数据库管理员 (DBA) 可以临时禁用约束，以方便进行大容量加载和调试。表中的每一行表示一个文件或一个目录，并由系统定义的约束维护树完整性。这是因为需要实施 Windows 语义，以确保解决方案以符合 NTFS 预期的方式工作。

总之，FileTable 提供了一个利用 FILESTREAM 功能的专用表。组织现在可以在 SQL Server 中用特殊的表来存储文件和文档，并可从 Windows 应用程序访问它们，就像它们存储在文件系统中一样，而不需要对 Windows 应用程序进行任何更改；同时提供服务器消息块 (SMB) 共享视图和完全的 Win32 应用程序兼容性。

FileTable 对组织而言是一种出色的方法，可为组织使用 SQL Server 存储当前在文件服务器上以文件方式存在的非结构化数据扫清障碍。

FileTable 先决条件

若要利用 FileTable 功能，需要满足以下先决条件。必须在 SQL Server 数据库引擎实例级别启用 FILESTREAM，必须在数据库级别启用非事务性访问，并且必须在数据库级别为 FileTable 指定一个目录。下列任务阐明如何确保成功地配置这些先决条件。

在 SQL Server 实例上启用 FILESTREAM

如前面所述，要利用 FileTable，第一个步骤是在 SQL Server 实例上启用 FILESTREAM。首先，使用 SQL Server 配置管理器执行以下步骤：

1. 依次单击“开始”、“所有程序”、“Microsoft SQL Server 2012”，然后单击“SQL Server 配置管理器”。

2. 在左窗格中，突出显示“SQL Server 服务”。

3. 现在，在“SQL Server 配置管理器”管理单元中，右键单击要在其中启用 FILESTREAM 的 SQL Server 实例，并单击“属性”。

4. 在“FILESTREAM”选项卡上，针对 Transact-SQL 访问启用 FILESTREAM。

5. 接着，单击“针对文件 I/O 访问启用 FILESTREAM”，以便您可以从 Windows 中读写 FILESTREAM 数据。此外，在“Windows 共享名”框中键入 Windows 共享的名称。

6. 如果远程客户端需要访问此共享中的 FILESTREAM 数据，请单击“允许远程客户端访问 FILESTREAM 数据”。

7. 单击“应用”，然后单击“确定”以关闭 SQL Server 的“属性”框。

下一步，在 SQL Server Management Studio 中执行以下步骤：

8. 在 SQL Server Management Studio 中，单击“新建查询”以显示查询编辑器。

9. 在查询编辑器中，键入以下 Transact-SQL 代码：

EXEC sp_configure filestream_access_level, 2
RECONFIGURE

点击这里查看代码为图像

10. 单击“执行”。

11. 重新启动 SQL Server 服务。

在数据库级别启用目录名称和非事务性访问

在 SQL Server Management Studio 中执行以下步骤，以便在数据库级别启用非事务性访问：

12. 在对象资源管理器中，连接到您计划用来创建 FileTable 的 SQL Server 实例。

13. 展开“数据库”文件夹。然后，右键单击您要在其中启用“非事务性访问”数据库选项的数据库，并选择“属性”。对于此示例，所使用的数据库名为 FileTableExampleDB。

14. 在“数据库属性”对话框中，选择“选项”页。

15. 在“FILESTREAM 目录名称”文本框中指定目录名称，如 FileTableExampleDir。

16. 在“FILESTREAM 非事务访问”部分中，指定“完全”或“只读”选项。

17. 单击“确定”以关闭“数据库属性”对话框。

除了使用 SQL Server Management Studio (SSMS) 之外，还可以使用以下 Transact-SQL 语句在数据库级别启用目录名称和非事务性访问：

USE [master]
GO
ALTER DATABASE [FileTableExampleDB] SET FILESTREAM( NON_TRANSACTED_ACCESS = FULL, DIRECTORY_NAME = N‘FileTableExampleDir’ ) WITH NO_WAIT
GO

点击这里查看代码为图像

配置 FILESTREAM 文件组和数据库文件并指定 FileTable 目录

如果尚未配置 FILESTREAM 文件组和数据库文件，则可以选择执行此步骤。在这个 Transact-SQL 示例中，所使用的 FILESTREAM 名为 FileTableExampleDBFileStreamFG ，用于 FILESTREAM 数据文件类型的数据库文件名为 FileTableExample_FilestreamFile （位于 c:\temp 文件夹中）：

USE [master]
GO
ALTER DATABASE [FileTableExampleDB]
ADD FILEGROUP [FileTableExampleDBFilestreamFG] CONTAINS FILESTREAM
GO
ALTER DATABASE [FileTableExampleDB]
ADD FILE ( NAME = N‘FileTableExampleDB_FilestreamFile’,
FILENAME = N‘C:\Temp\FileTableExampleDB_FilestreamFile’ ) TO FILEGROUP
[FileTableExampleDBFilestreamFG]
GO
USE [FileTableExampleDB]
GO
IF NOT EXISTS (SELECT name FROM sys.filegroups WHERE is_default=1
AND name = N‘FileTableExampleDBFilestreamFG’)
ALTER DATABASE [FileTableExampleDB]
MODIFY FILEGROUP [FileTableExampleDBFilestreamFG] DEFAULT
GO
USE [FileTableExampleDB]
GO
ALTER DATABASE [FileTableExampleDB]REMOVE FILE [FIleTableExampleDBFilestreamFile]
GO

点击这里查看代码为图像

创建 FileTable

现在这些先决条件都已满足，可以创建 FileTable 了：

1. 在对象资源管理器中，选择要在其中创建 FileTable 的数据库。

2. 展开所选数据库下的对象，然后右键单击“表”文件夹，选择“新建 FileTable”。

3. 此选项将打开一个新的脚本窗口，其中包含一个 Transact-SQL 脚本模板，您可以自定义和运行此模板以创建 FileTable。

4. 使用“查询”菜单上的“指定模板参数的值”选项可轻松地自定义脚本。

或者，也可以使用此 Transact-SQL 语句生成一个名为 FileTable01 的 FileTable：

Use FileTableExampleDB
GO
CREATE TABLE FileTable01 AS FILETABLE
GO

点击这里查看代码为图像

将文档和文件复制到 FileTable

下一步是在 Windows 资源管理器中将文档和文件复制到新创建的 FileTable。可以用传统的剪切和粘贴操作、通过将文件拖到文件夹或使用 Transact-SQL 来完成此步骤。在图 5-3 所示的示例中，是将两个绘图文件和两个 Microsoft Word 文档复制到 FileTable。

图 5-3 显示 FileTable 中包含的文档的 SMB 共享

在 SSMS 中通过 FileTable 查看文档

最后一步是对您在先前步骤中创建的 FileTable 执行 Select *查询。如图 5-4 所示，结果窗口显示了复制到 SMB 共享的四个文档。

图 5-4 在 SSMS 中查看 FileTable 中的文档

管理 FileTable

管理和保护 FileTable 与存储在 SQL Server 数据库引擎中的传统表类似。FileTable 数据支持备份和还原操作以及 SQL Server 2012 AlwaysOn 可用性组，以同时实现高可用性和灾难恢复。

全文搜索

我们花费大量的时间改进了 SQL Server 2012 中的全文搜索功能。改进后的全文搜索提高了性能和规模并提供了新功能，包括新的语义相似性搜索功能。从性能和规模的角度看，SQL Server 2012 中的全文搜索现在可以扩展到超过 1 亿份文档；一些测试案例中已达到 3.5 亿份文档。另一项重大改进可以在传统的全文查询性能上看到。查询速度要比以前版本的 SQL Server 快约七至十倍。事实上，针对大型文档集（如 3.5 亿份文档）的查询响应时间最长也不超过三秒，这一点令人印象非常深刻。还有一些提升规模的体系结构改进，其中包括改善的内部实现、改进的查询计划以及防止查询阻止索引更新。

与全文搜索关联的新功能分为三个领域：

• 属性搜索 在以前版本的 SQL Server 中，执行搜索时，搜索的是整篇文档，而无法对标题或其他属性进行关键字搜索。通过 SQL Server 2012 中创建全文索引的功能，用户现在可以进行属性范围的搜索。通过创建搜索属性列表，然后选择一个或多个您希望囊括在可搜索范围内的属性，可以将作者姓名或作品标题等属性变得能够搜索。但请注意，有些属性仅在特定类型的文档中才可供搜索，如 varbinary、varbinary (max) 或图像二进制数据列。

• 可自定义 Near 借助于自定义邻近运算符（也叫做可自定义 Near），用户可以指定两个搜索字词之间的距离有多近才能被视为成功的匹配项。例如，您可能要查找字词 “cognition”和“psychology”之间的距离在三个字词以内的文档。此外，还可以指示关键字必须出现的顺序。例如，您可以指定“Ross”必须出现在“Mistry”之前。以下是使用可自定义 Near 的其他示例。

第一个示例可用于指定关键字之间的距离。参数 5 指定关键字必须相隔五个标记，才能被视为成功的匹配项：

select * from FullTextTable
where contains(*, ‘near((test, Space), 5,false)’)

点击这里查看代码为图像

接着，如果您的初始搜索未成功，则您可能希望将最大距离参数从 5 更改为其他数字（如 7 ），来减少关键字之间的距离。以下说明如何进行此项更改：

select * from FullTextTable
where contains(*, ‘near((test, Space), 7,false)’)

点击这里查看代码为图像

在下面的示例中，不仅关键字之间的距离很重要，而且字词的出现顺序也很重要。为了同时满足这两个要求，需要将最终匹配顺序参数从 false 更改为 true：

select * from FullTextTable
where contains(*, ‘near((test, Space), 5,true)’)

点击这里查看代码为图像

• 新的断字符 在 SQL Server 2012 中，全文搜索和语义搜索普遍适用的断字符和词干分析器已全面更新。在完成升级后，请重新填充现有的全文索引，以确保在索引目录与查询结果之间保持一致。

统计语义搜索

统计语义搜索通过从语义方面深入了解文本内容，扩展了全文搜索功能。尽管全文搜索可让组织查询文档中的特定词，但统计语义搜索使用统计数据来提取相关的关键短语，以标识文档的含义和文档之间的相似性。这一改进是通过深入了解非结构化文档（存储于数据库引擎上的一个或多个数据库中）并通过使用三个 Transact-SQL 行集函数以提取结果来实现的。

现在可以包括自动标记提取、相关内容发现以及相似内容中的层次结构导航。例如，您可以查询关键短语索引来建立一个组织或文档集的分类索引。同样，您可能需要查询文档相似性索引来标识匹配某一职位描述的简历。

必须将文档存储在 SQL Server 数据库中，组织才能够使用语义搜索对文档编制索引并返回相关结果。而且还必须启用 Microsoft SQL Server 2012 中的 FileTable 和 FILESTREAM 功能。

配置语义搜索

若要利用 SQL Server 中的全文语义搜索功能，数据库管理员必须确保安装了“全文和语义提取搜索”功能。如果您想不起来在初始安装过程中是否安装了此功能，请使用以下 Transact-SQL 语句来确定是否已安装了“全文和语义提取搜索”功能：

Select SERVERPROPERTY(‘IsFullTextInstalled’);
GO

点击这里查看代码为图像

如果返回值为1，则表示安装了“全文和语义提取搜索”功能。如果返回值为0，则表示未安装该功能。如果未安装该功能，您可以运行安装程序并将功能添加到 SQL Server 的现有实例中。在“功能选择”页上选择“全文和语义提取搜索”选项，如图 5-5 所示。

图 5-5 安装“全文和语义提取搜索”功能

下一步是安装语义语言统计数据库，这是一个外部依赖项，当安装“全文和语义提取搜索”功能时不会配置该依赖项。很可能在您刚刚安装了“全文和语义提取搜索”功能时，此数据库不存在。为了确定是否安装了该依赖项，可以使用以下 Transact-SQL 语句进行检查：

SELECT * FROM sys.fulltext_semantic_language_statistics_database;
GO

点击这里查看代码为图像

以下步骤概述了安装语义语言统计数据库的过程：

1. 插入 SQL Server 2012 介质，并找到 SemanticLanguageDatabase.msi。该文件有两个版本：32 位版本和 64 位版本。请根据所使用的 SQL Server 版本选择其一。

注意 也可以直接从 MSDN 下载 SemanticLanguageDatabase.msi。

2. 双击 SemanticLanguageDatabase.msi 以启动安装。

3. 在“许可协议”页上，阅读并接受许可协议中的条款，然后单击“下一步”。

4. 在“功能选择”页，配置安装路径，然后单击“下一步”。

5. 单击“安装”以开始安装。

6. 安装完成后，单击“完成”。

7. 下一步，将语义语言数据库数据和日志文件附加到您安装了“全文和语义提取搜索”功能的 SQL Server 实例。此数据库名为 semeticsdb，位于在第 4 步指定的文件夹中。默认位置是 c:\Program Files\Microsoft Semantic Language Database。

8. 最后一步是注册语义语言统计数据库。通过利用 sp_fulltext_semantic_register_language_statistics_db 存储过程并提供您在上一步中附加的数据库的名称，可注册该数据库。以下是您可以使用的 Transact-SQL 语句的示例：

EXEC sp_fulltext_semantic_register_language_statistics_db @dbname = N’semanticsdb’;
GO

点击这里查看代码为图像

9. 现在，您就可以开始利用统计语义搜索功能了。

语义搜索示例

典型的语义搜索用例方案包括：在文档中查找关键短语、查找类似的文档或查找相关的文档。让我们来看一看几个示例。

在文档中查找关键短语

此查询引用的是 semantickeyphrasetable (Transact-SQL) 函数。在以下示例中，查询将在示例文档中查找并检索关键短语。系统将基于每个关键短语的统计意义向该短语分配一个分数。此分数确定报告每个关键短语的顺序。

SET @Title = ‘Sample Document.docx’
SELECT @DocID = DocumentID
FROM Documents
WHERE DocumentTitle = @Title
SELECT @Title AS Title, keyphrase, score
FROM SEMANTICKEYPHRASETABLE(Documents, *, @DocID)
ORDER BY score DESC

点击这里查看代码为图像

查找相似或相关文档

下面显示的查询引用的是 semanticsimilaritytable (Transact-SQL) 函数，它负责查找和检索与示例文档相似或相关的文档。结果将基于它们与示例文档的相似性进行打分，然后按排名顺序显示。

SET @Title = ‘Sample Document.docx’
SELECT @DocID = DocumentID
FROM Documents
WHERE DocumentTitle = @Title
SELECT @Title AS SourceTitle, DocumentTitle AS MatchedTitle, DocumentID, score
FROM SEMANTICSIMILARITYTABLE(Documents, *, @DocID)
INNER JOIN Documents ON DocumentID = matched_document_key
ORDER BY score DESC

点击这里查看代码为图像

查找使文档相似或相关的关键短语

以下查询获取使两个示例文档彼此相似或相关的关键短语。该查询按照相应的权重对每个关键短语打分，并以降序方式显示结果。此查询调用 semanticsimilaritydetailstable (Transact-SQL) 函数。

SET @SourceTitle = ‘first.docx’
SET @MatchedTitle = ‘second.docx’
SELECT @SourceDocID = DocumentID FROM Documents WHERE DocumentTitle = @SourceTitle
SELECT @MatchedDocID = DocumentID FROM Documents WHERE DocumentTitle = @MatchedTitle
SELECT @SourceTitle AS SourceTitle, @MatchedTitle AS MatchedTitle, keyphrase, score FROM semanticsimilaritydetailstable(Documents, DocumentContent, @SourceDocID, DocumentContent, @MatchedDocID)
ORDER BY score DESC

点击这里查看代码为图像

空间增强功能

空间数据通常指与地球相关的特征和边界的地理位置，包括但不限于大陆块、海洋以及天然或人工构造的特征。空间数据以可映射的光栅或矢量数据格式存储为坐标和拓扑。

SQL Server 2008 支持 geometry 和 geography 数据类型，以便组织可以存储空间矢量数据。这些 geometry 和 geography 数据类型支持可用来创建、比较、分析和检索空间数据的方法和属性。SQL Server 2012 中继续增强了对于空间（尤其是在空间类型和性能方面）的支持。

在讨论增强功能之前，有必要首先了解一下业界常用的空间数据方案的类型以及以前版本的 SQL Server 支持的空间数据矢量类型。

空间数据方案

许多组织并不太了解如何利用空间数据来提高其竞争优势。因此，本部分概述企业会遇到的典型空间数据方案。这些方案包括房地产开发和分析、客户群管理和拓展、环境相关的数据影响分析和规划、社区金融和经济分析、政府规划和发展分析、市场细分和分析以及科研设计和分析。

SQL Server 中支持的空间数据特征

表 5-1 显示了 SQL Server 2008 中支持的矢量数据和空间类型。其中包括点、多点、线条、多线条、多边形、多个多边形以及这些形状的集合。其中的每种矢量数据类型都符合 ISO 19125，也符合开放 SQL 的开放地理空间联盟 (Open Geospatial Consortium) 的简单特征。

表 5-1 SQL Server 中支持的空间数据特征

空间数据特征

空间数据特征的可视化表示形式

可能的使用情形

POINT

可用于绘制树、杆、消防栓、值

MULTIPOINT

可用于绘制树、杆、消防栓、值

LINESTRING

可用于绘制公路、河流、铁路、管道

MULTILINESTRING

可用于绘制公路、河流、铁路、管道

POLYGON

可用于绘制地籍、公园、行政边界

MULTIPOLYGON

可用于绘制地籍、公园、行政边界

COLLECTION

可用于绘制图形和标记的所有空间数据特征的集合

点击这里查看表为图像

另一方面，在 SQL Server 2008 中，支持将光栅数据（如卫星图像和数字航空照片）作为非结构化数据。图像在 SQL Server 中可以存储为 BLOB。遗憾的是，不能从这种数据直接获取语义。

空间类型改进

随着 SQL Server 2012 的推出，我们引入了新的空间类型特征。具体来说，就是 geometry 和 geography 数据类型的若干新的子类型，它们支持圆弧线段（如圆形线、复合曲线和曲线多边形）。所有方法都支持圆弧，包括在椭圆体上支持圆弧。表 5-2 说明了 SQL Server 2012 中的新空间数据特征。

注意 SQL Server 2012 是第一个支持球面圆弧的商用数据库系统。

表 5-2 SQL Server 2012 中新的空间数据特征

圆形线

复合曲线

曲线多边形

点击这里查看表为图像

下面将对上表中的元素加以说明：

• 圆形线 圆形数据支持包括圆形线。圆形线由至少三个点来定义。第一个点和第三个点分别表示指示线的开始和结束，而第二个坐标（出现在第一个点和第三个点之间）表示线的弧。圆形线的第三个点可用于链接另一条圆形线，这样第一条圆形线的第三个坐标就转换为所链接的圆形线的第一个点。如果链接的圆形线所具有的点是奇数，则它们可能有效。以下是一个示例：

DECLARE @g GEOGRAPHY;
SET @g = GEOGRAPHY::STGeomFromText(‘
CIRCULARSTRING(0 -23.43778, 0 0, 0 23.43778)
‘,4326);
DECLARE @g GEOGRAPHY;
SET @g = GEOGRAPHY::STGeomFromText(‘
COMPOUNDCURVE(
CIRCULARSTRING(0 -23.43778, 0 0, 0 23.43778),
CIRCULARSTRING(0 23.43778, -45 23.43778, -90 23.43778),
CIRCULARSTRING(-90 23.43778, -90 0, -90 -23.43778),
CIRCULARSTRING(-90 -23.43778, -45 -23.43778, 0 -23.43778))
‘,4326);

点击这里查看代码为图像

• 复合曲线 复合曲线是圆形线的集合或圆形线与直线的组合。集合中每条线的终点必须是下一条线的起点。以下是圆形线与直线组成的复合曲线的一个示例。请注意，直线不包含关键字：

DECLARE @g GEOGRAPHY;
SET @g = GEOGRAPHY::STGeomFromText(‘
COMPOUNDCURVE(
(0 -23.43778, 0 23.43778), --Linear Segment*
CIRCULARSTRING(0 23.43778, -45 23.43778, -90 23.43778),
(-90 23.43778, -90 -23.43778), --Linear Segment*
CIRCULARSTRING(-90 -23.43778, -45 -23.43778, 0 -23.43778))
‘,4326);

点击这里查看代码为图像

• 曲线多边形 曲线多边形由至少一个表示闭合形状的环组成，并且可以在形状中包括表示内环的孔。与普通多边形不同，曲线多边形的环可以包括圆形线、复合曲线或同时包含这两种。在给定的环中，集合中每条线的终点必须是下一条线的起点。下例提供了清晰的说明：

DECLARE @g GEOGRAPHY;
SET @g = GEOGRAPHY::STGeomFromText(‘
CURVEPOLYGON(
COMPOUNDCURVE(
(0 -23.43778, 0 23.43778),
CIRCULARSTRING(0 23.43778, -45 23.43778, -90 23.43778),
(-90 23.43778, -90 -23.43778),
CIRCULARSTRING(-90 -23.43778, -45 -23.43778, 0 -23.43778)
)
)
‘,4326);

点击这里查看代码为图像

其他空间改进

本章讨论的是空间增强功能，并且简要介绍一些重要的特征。不过，在 SQL Server 2012 中，空间方面的其他改进非常多，如果要全部了解的话可能需要好几个小时。如果您有兴趣了解更多内容，可以阅读一本长达 30 页的白皮书，标题为“ SQL Server 2012 中的新空间特征”。此白皮书详细介绍了所有新的空间改进功能。对于其中一些空间方面的改进，您应考虑阅读更多内容，包括：

• 空间索引改进

• 自动网格空间索引

• 新的空间索引提示

• 空间索引压缩

• 针对点数据改进的“创建空间索引”时间

• 空间类型改进

• 新的圆弧特征

• 适用于所有类型的新的和更新的方法和聚合

• 改进的精度

• 专门针对 Geography 类型的修改

• 性能改进

• 新的 nearest-neighbor 查询计划

• 其他性能改进，包括针对点运算符优化的关系、STBuffer 优化、新的空间帮助器存储过程、与空间类型相关的一般引擎改进以及对客户端库所进行的更改。

扩展事件

SQL Server 扩展事件是一个用于服务器系统的常规事件处理系统。SQL Server 2012 引入了以下新的扩展事件，以进一步支持 SQL Server 中数据的关联；在某些情况下，还支持操作系统和数据库应用程序中数据的关联：

• page_allocated 这些字段包括 worker_address、 number_pages 、 page_size 、 page_location 、 allocator_type、 page_allocator_type 和 pool_id。

• page_freed 这些字段包括 worker_address、 number_pages 、 page_size、 page_location 、 allocator_type、 page_allocator_type 和 pool_id。

• allocation_failure 这些字段包括 worker_address、 failure_type 、 allocation_failure_type、 resource_size 、 pool_id 和 factor。

与前面列表中包含的项不同，以下扩展事件已修改为可在 SQL Server 2012 中提供更好的功能：

• resource_monitor_ring_buffer_record：

• 删除的字段包括 single_pages_kb 和 multiple_pages_kb。

• 添加的字段包括 target_kb 和 pages_kb。

• memory_node_oom_ring_buffer_recorded：

• 删除的字段包括 single_pages_kb 和 multiple_pages_kb 。

• 添加的字段包括 target_kb 和 pages_kb 。

第 6 章
Integration Services

自从 Microsoft SQL Server 2005 第一次推出 Integration Services 以来，该产品在每个后续版本中都陆续得到增强。然而，这些更改与 SQL Server 2012 Integration Services 中引入的增强功能、性能改进以及新功能的数目相比，就显得微不足道了。此产品的全面修改影响了 Integration Services 从开发、部署到管理的每一个环节。

开发人员体验

当您创建新的 Integration Services 项目时，您看到的第一个变化是：Business Intelligence Development Studio (BIDS) 现在变成了一个叫做 SQL Server Data Tools (SSDT) 的 Microsoft Visual Studio 2010 shell。与前一 BIDS 版本相比，新版本的用户界面在 Visual Studio 环境方面只引入了一些细微的更改。但是，在 SQL Server Integration Services (SSIS) 界面上却发生了翻天覆地的变化。如果您不熟悉 Integration Services，则这些界面上的变化可帮助您了解包开发流程；如果您比较熟悉 Integration Services，则这些变化可以帮助您更轻松地开发包。如果您是 Integration Services 的资深专家，您还会注意到任务和数据流组件的外观已得到了改进，并具有圆边和新图标。

“添加新项目”对话框

若要开始在 SSDT 中使用 Integration Services，您可以创建一个新项目，其步骤与您在早期 Integration Services 版本中所用的步骤相同。从“文件”菜单上，指向“新建”，然后选择“项目”。将显示“添加新项目”对话框。在“已安装的模板”列表中，您可以选择要使用的商业智能模板的类型，然后仅查看与您的选择相关的模板，如图 6-1 所示。当您选择模板时，模板的说明将显示在对话框的右侧。

图 6-1 显示已安装的模板的“新建项目”对话框

Integration Services 项目可以使用两个模板：

• Integration Services 项目 使用此模板，您可以从空包开始开发，然后向包中添加任务，并将这些任务安排到工作流中。Integration Services 的以前版本中提供了此模板类型。

• Integration Services 导入项目向导 您可以使用此向导从 Integration Services 目录或项目部署文件中导入项目。（您可以在本章的“部署模型”部分中了解有关项目部署文件的更多信息。）当您希望将现有项目用作新项目的起点或需要对现有项目进行更改时，此选项很有用。

注意 Integration Services 以前版本中的连接项目模板已不再可用。

常规界面更改

创建新包后，包设计器界面有一些变化，如图 6-2 中所示：

• SSIS 工具箱 现在您可以使用 SSIS 工具箱向包中添加任务和数据流组件，而不使用您在 Integration Services 的较早版本中使用的 Visual Studio 工具箱。您可以在本章的“SSIS工具箱”部分中了解有关此新工具箱的更多信息。

• 参数 包设计器包括一个新的选项卡，用于打开包的“参数”窗口。通过参数，您可以指定包、容器和任务属性或变量的运行时值，本章的“参数”部分将详细介绍这些信息。

• “变量”按钮 这个新按钮位于包设计器的工具栏上，您可以通过此按钮快速访问“变量”窗口。您仍然可以从 SSIS 菜单或通过右键单击包设计器并选择“变量”命令来打开此窗口。

• “SSIS 工具箱”按钮 此按钮也是包设计器界面中的新增按钮，您可以使用它来打开 SSIS 工具箱（如果未显示的话）。另外，您也可以从 SSIS 菜单或通过右键单击包设计器并选择“SSIS 工具箱”命令来打开 SSIS 工具箱。

• 入门 这个新窗口显示在“解决方案资源管理器”窗口下方，通过该窗口可以访问有关如何使用 Integration Services 的视频和示例。此窗口包含“始终在新项目中显示”复选框，如果您不想在创建新项目之后看到此窗口，可以清除此复选框。您可以在下一部分“‘入门’窗口”中了解有关使用此窗口的更多信息。

• 缩放控件 控制流和数据流设计图面现在都包括一个缩放控件，它位于工作区的右下角。您最大可以放大到正常视图的 500%；最小可缩小到正常视图的 10%。缩放控件中还包括一个按钮，您可以通过该按钮来调整设计图面的视图大小以适合窗口。

图 6-2 包设计器界面的变化

“入门”窗口

正如上一部分所述，“入门”窗口是 Integration Services 的最新版本中新增的窗口。其目的是向开发新手提供资源。当您创建新的项目时，该窗口会自动显示，除非您在窗口的底部清除相应的复选框。您必须使用位于窗口右上角的“关闭”按钮才能从视图中删除此框。如果以后您想访问此窗口，可以在 SSIS 菜单上选择“入门”，或右键单击设计图面并选择“入门”。

在“入门”窗口中，您可以找到若干指向视频和 Integration Services 示例的链接。若要使用此窗口中的这些链接，您必须连接到 Internet。默认情况下，该窗口显示下列主题：

• 设计和优化企业中 SSIS 包的性能 通过此链接可访问由 SQL Server 客户咨询团队 (SQLCAT) 创建的一系列视频，这些视频说明如何监视包性能以及在包开发期间用于改善性能的技术。

• 参数化 SSIS 中的执行 SQL 任务 此链接将打开一个简短视频的页面，介绍如何在 Integration Services 中处理参数化的 SQL 语句。

• SQL Server Integration Services 产品示例 您可以使用此链接访问 Codeplex（Microsoft 的开源项目托管网站）上提供的产品示例。您可以下载并研究包示例，了解如何处理各种控制流任务或数据流组件。

注意 尽管这些链接指向的视频和示例是针对以前版本的 Integration Services 开发的，但原理仍适用于最新版本。当在 SSDT 中打开示例项目时，系统将提示您转换该项目。

您可以自定义“入门”窗口的内容，方法是将您自己的链接添加到位于 Program Files (x86)\Microsoft SQL Server\110\DTS\Binn 文件夹下的 SampleSites.xml 文件中。

SSIS 工具箱

包设计器的另一个新窗口是“SSIS 工具箱”。SSIS 工具箱不仅在整体界面上得到了改进，而且其中还增加了在工具箱中整理项的功能。

界面改进

在打开 SSIS 工具箱后，您的第一印象应该是大多数菜单项都更新了图标。此外，SSIS 工具箱包含当前所选项的说明，您能够看到该项的作用，而不需要先将其添加到设计图面。您可以继续使用拖放操作将项放到设计图面上，也可以双击该项。但是，现在双击的效果是将项添加到当前选定的容器中，这对于开发流程而言是一个颇受欢迎的节省时间的操作。如果未选择容器，则直接将该项添加到设计图面。

项安排

在 SSIS 工具箱的顶部，您将看到两个新类别：“收藏夹”和“公共”，如图 6-3 所示。默认情况下，所有类别都填充了项，但您随时可以将项移到另一个类别。为此，右键单击该项并选择“移动到收藏夹”或“移动到公共”。如果您正在处理控制流项，则您还有一个“移动到其他任务”选择；但如果您正在处理数据流项，则可以选择“移动到其他来源”、“移动到其他转换”或“移动到其他目标”。您不会看到将某个项移到它所在的类别的选项，也无法使用拖放操作来手动移动项。如果您决定重新开始并将项返回其原始位置，请选择“还原工具箱默认值”。

图 6-3 控制流和数据流的 SSIS 工具箱

共享连接管理器

如果您仔细查看“解决方案资源管理器”窗口，您会发现缺少了“数据源”和“数据源视图”文件夹，它们已被一个新文件和一个新文件夹所取代。新文件为 Project.params，用于设置包参数并将在本章的“包参数”部分中讨论。“连接管理器”文件夹是您要在多个包之间共享的连接管理器的新容器。

注意 如果您创建一个缓存连接管理器，则 Integration Services 将使用与父包相同的缓存来与子包共享内存中缓存。此功能对于优化跨多个包对同一个源进行的重复查找而言非常有用。

若要创建共享的连接管理器，请按照以下步骤操作：

1. 右键单击“连接管理器”文件夹，然后选择“新建连接管理器”。

2. 在“添加 SSIS 连接管理器”对话框中，选择所需的连接管理器类型，然后单击“添加”按钮。

3. 在编辑器中为所选连接管理器类型提供所需的信息，然后单击“确定”，直到关闭所有对话框。

在“解决方案资源管理器”窗口的“连接管理器”文件夹内，将显示一个扩展名为 CONMGR 的文件。此外，在同一项目所包含的每个包中，该文件还出现在包设计器的“连接管理器”任务栏中。它会显示（项目）前缀，以便与包连接区别开来。如果您选择与一个包关联的连接管理器并更改其属性，更改将影响所有其他包中的这一连接管理器。

如果您改变了主意，不想使用共享的连接管理器，您可以将其转换为包连接。为此，请在“连接管理器”任务栏中右键单击此连接管理器，并选择“转换为包连接”。此转换会从解决方案资源管理器的“连接管理器”文件夹中以及从所有其他包中删除相应的 CONMGR 文件。只有您执行转换的包才包含此连接。同样，您可以通过在解决方案资源管理器中右键单击连接管理器并选择“转换为项目连接”，将包连接转换为共享的连接管理器。

脚本引擎

SSIS 中的脚本引擎是对 Visual Studio Tools for Applications (VSTA) 3.0 的升级，且包括对 Microsoft .NET Framework 4.0 的支持。当您编辑控制流中的脚本任务或数据流中的脚本组件时，VSTA 集成开发环境 (IDE) 继续在单独的窗口中打开，但现在它使用 Visual Studio 2010 shell。针对脚本引擎的一项重大改进是对数据流中的脚本组件使用 VSTA 调试功能。

注意 调试控制流中的脚本任务时，如果您是在 64 位计算机上进行调试，则必须将 Run64BitRunTime 项目属性设置为 False 。

表达式指示器

在 Integration Services 中使用表达式使开发人员能够创建灵活的包。在运行时，行为可以根据表达式的当前计算值而发生变化。例如，在连接管理器中使用表达式的一个常见原因是要动态地更改连接字符串，以适应将包从一个环境移到另一个环境（如从开发到生产）的情形。然而，Integration Services 的早期版本并没有提供一个简单的方法来确定连接管理器是否依赖于某个表达式。在最新版本中，连接管理器图标旁边会显示一个额外图标，作为连接管理器使用表达式的视觉提示，如图 6-4 中所示。

图 6-4 连接管理器使用表达式的视觉提示

对于其他包对象也会显示这种类型的表达式指示器。如果将一个表达式添加到变量或任务，表达式指示器将显示在该对象上。

撤消和重做

这是一个新增的但是又非常贴心的小功能，让您在 SSDT 中开发包时可执行“撤消”和“重做”操作。您现在可以在控制流或数据流设计器图面中执行编辑操作，并可以使用“撤消”以撤消更改，或使用“重做”以还原您刚刚撤消的更改。在“变量”窗口以及“事件处理程序”和“参数”选项卡上也可以使用此功能。还可以使用“撤消”和“重做”来处理项目参数。

若要使用“撤消”和“重做”，请单击标准工具栏上的对应按钮。也可以分别使用 Ctrl+Z 和 Ctrl+Y。还可以通过“编辑”菜单访问这些命令。

注意 “撤消”和“重做”操作不适用于您对 SSIS 工具箱所做的更改，也不适用于共享的连接管理器。

按名称对包排序

当您向项目添加多个包时，您可能会发现在解决方案资源管理器中以字母顺序查看包的列表会很有用。在 Integration Services 的以前版本中，对包重新排序的唯一方法是先关闭项目，然后重新打开它。现在，您可以通过右键单击“SSIS 包”文件夹，然后选择“按名称排序”，轻松地对包列表进行排序，而不需要关闭项目。

状态指示器

执行包后，控制流和数据流中的每个项的状态将显示在包设计器中。在 Integration Services 的以前版本中，整个项填充绿色表示成功，填充红色表示失败。然而，对于色盲用户，这种使用颜色的办法将无法起到评估包执行结果的作用。因此，用户界面现在会在每个项的右上角显示图标以指示成功或失败，如图 6-5 所示。

图 6-5 项状态指示器显示在右上角

控制流

除了对包设计器界面的一般增强功能之外，还有三个值得注意的针对控制流的更新。“表达式任务”是一个新项，可用于在包工作流中轻松地计算表达式。此外，“执行包任务”已进行了一些更改，以使配置父包与子包之间关系的过程变得更简单。另一新项是“变更数据捕获任务”，我们将在本章的“变更数据捕获支持”部分加以讨论。

表达式任务

开发人员在 Integration Services 中体验到的功能增强同时也作用于控制流和数据流，但是还有一个只影响控制流的新功能。“表达式任务”是一个新增的项，当控制流选项卡处于活动状态时，SSIS 工具箱中会显示该项。此任务的目的是可以更方便地将动态值分配给变量。

现在，您可以将“表达式任务”添加到工作流，并使用 SQL Server Integration Services 表达式语言，而不必使用“脚本任务”在运行时构造变量值。在您编辑任务时，将打开“表达式生成器”。您首先应该引用变量，并加入等号 (=) 作为赋值运算符。然后，提供一个有效的表达式，该表达式的计算值应该是适合所选变量的正确数据类型。图 6-6 显示了一个在表达式任务中给变量赋值的示例。

图 6-6 表达式任务中的变量赋值

注意 表达式生成器界面通常与其他任务和数据流组件一起使用。在图 6-6 中，您可注意到对话框左侧的列表中同时包含变量和参数。此外，系统变量现在可以从一个单独的文件夹访问，而不是与用户变量一起列出。

执行包任务

“执行包任务”已更新为包括一个新属性 ReferenceType ，该属性出现在“执行包任务编辑器”的“包”页中。使用此属性可以指定要执行的包的位置。如果您选择“外部引用”，您可以配置指向子包的路径，就像在早期版本的 Integration Services 中一样。如果您转而选择“项目引用”，则可以从下拉列表中选择子包。

此外，执行包任务编辑器具有一个新的参数绑定页面，如图 6-7 所示。使用此页可以将子包中的参数映射到父包中的参数值或变量值。

图 6-7 父包和子包之间的参数绑定

数据流

数据流也有一些重大更新。它具有一些新项（如源和目标助手以及 DQS 清理转换），并有一些改进的项（如合并和合并联接转换）。此外，还有几个新的数据流组件，它们是在 Microsoft 与 Attunity 之间建立了伙伴关系之后获得的，以供在访问开放式数据库连接 (ODBC) 连接和处理变更数据捕获日志时使用。我们将在本章的“变更数据捕获支持”部分中介绍变更数据捕获组件。用户界面也进行了一些更改，以简化操作过程并帮助您在设计数据流时更快地完成工作。

源和目标

现在，我们来了解一下数据流的更改。首先要了解的是源和目标。

源和目标助手

源助手和目标助手是当使用数据流设计器时，默认情况下，在 SSIS 工具箱中的“收藏夹”文件夹中提供的两个新项。这些助手可帮助您轻松地创建源或目标及其相应的连接管理器。

若要在数据流任务中创建 SQL Server 源，请执行以下步骤：

1. 通过使用拖放操作或在 SSIS 工具箱中双击源助手，将该项添加到数据流设计图面，此时将打开“源助手 - 添加新源”对话框，如下所示：

注意 清除“只显示已安装的源类型”复选框，可以显示需要安装以下客户端提供程序才能提供的其他源类型： DB2、SAP BI、Sybase 或 Teradata。

2. 在“选择连接管理器”列表中，选择现有的连接管理器，或者选择“新建”以创建新的连接管理器，然后单击“确定”。

3. 如果您选择了创建新连接管理器的选项，请在“连接管理器”对话框中指定源数据的服务器名、身份验证方法以及数据库，然后单击“确定”。

数据流设计图面上将显示新的数据源，而连接管理器会显示在“连接管理器”任务栏中。接下来，您需要编辑数据源以配置数据访问模式、列和错误输出。

ODBC 源和目标

ODBC 源和 ODBC 目标组件（如图 6-8 中所示）是此版本的 Integration Services 中新增的组件，它们基于 Attunity 向 Microsoft 授予许可的技术。这些组件的配置类似于 OLE DB 源和目标的配置。ODBC 源支持“表名”和“SQL 命令”作为数据访问模式，而 ODBC 目标的数据访问模式是“表名 — 批处理”和“表名 - 逐行”。

图 6-8 ODBC 源和 ODBC 目标的数据流组件

平面文件源

您可以使用平面文件源从 CSV 或 TXT 文件提取数据。但是在以前，某些数据格式必须在提取过程中执行其他步骤，才能受到源的支持。例如，对于可变列数的文件，您无法轻松地使用平面文件源提取该文件中的数据。另一个问题是无法使用一个指定为限定符的字符来作为字符串内的文本值。Integration Services 的当前版本解决了这两个问题。

• 可变列 具有可变列数的文件布局也叫做右边未对齐的分隔文件。虽然 Integration Services 支持右边未对齐的格式，但当一个或多个最右边的列没有值并且在文件中省略了空列的列分隔符时，将导致出现问题。当平面文件包含混合粒度的数据（如标题和详细的事务记录）时，通常会出现这种情况。以前，虽然每行中都存在行分隔符，但 Integration Services 忽略行分隔符，并包括下一行的数据，直到它处理了每一预期列的数据。现在，平面文件源可正确地识别行分隔符并将缺少的列处理为 NULL 值。

注意 如果您期望右边未对齐格式的数据对于每个缺失列都包含一个列分隔符，则可以通过将平面文件连接管理器的 AlwaysCheckForRowDelimiters 属性更改为 False 来禁用新的处理行为。

• 嵌入的限定符 在以前版本的 Integration Services 中，平面文件源的另一个挑战是在限定符中封装的字符串内使用限定符。例如，假设有一个包含企业名称的平面文件。如果单引号不仅用作文本限定符，而且作为一个文本值出现在字符串内，则常见的做法是使用另一个单引号作为转义符，如下所示。

ID,BusinessName
404, ‘Margie’‘s Travel’
406, ‘Kickstand Sellers’

点击这里查看代码为图像

在此示例的第一个数据行中，以前版本的 Integration Services 无法将 BusinessName 字符串中的第二个撇号解释为转义符，而是将其处理为列的结尾文本限定符。因此，在处理该平面文件时会返回一个错误，因为行中的下一个字符不是列分隔符。现在，新版本的 Integration Services 中已解决了此问题，平面文件源不需要额外的配置。

转换

接下来，我们将着重讨论转换。

透视转换

在以前版本的 Integration Services 中，透视转换用户界面是一个通用的转换编辑器，并不能直观地将输入行转换为针对每行的一组列。新的自定义界面（如图 6-9 所示）提供了明确命名的字段，并包括描述如何将每个字段用作透视操作的输入或输出的文字说明。

图 6-9 用于将一组行转换为针对单个行的一组列的透视转换编辑器

行计数转换

在以前版本中，还有另一个转换具有通用的编辑器，那就是行计数转换。此转换的唯一目的是使用通过转换传递的行数来更新一个变量。通过新的编辑器，可以轻松地更改此转换中需要配置的一个属性，如图 6-10 所示。

图 6-10 在变量中存储当前行计数的行计数转换编辑器

合并和合并联接转换

通过合并转换和合并联接转换，您可以收集来自两个输入的数据，并生成单一的合并结果输出。在 Integration Services 的早期版本中，当数据从每个输入以不同的速度到达时，这些转换可能导致 Integration Services 占用过量的内存。Integration Services 的当前版本可更好地适应这种情况，它针对这两种变化引入了一种机制，以更好地管理这种情况下的内存压力。这种内存管理机制自动运行，不需要对转换进行额外的配置。

注意 如果您开发要在数据流中使用的自定义数据流组件，并且这些组件接受多个输入，可以使用Microsoft.SqlServer.Dts.Pipeline命名空间中的新方法，向您的自定义组件提供类似的内存压力管理。您可以通过阅读“开发具有多个输入的数据流组件”(http://msdn.microsoft.com/zh-CN/library/ff877983(v=sql.110).aspx)，了解有关实现这些方法的详细信息。

DQS 清理转换

DQS 清理转换是一个与 Data Quality Services (DQS) 结合使用的新数据流组件，其目的是帮助您通过使用针对适用的知识领域建立的规则来提高数据的质量。您可以创建规则来测试数据的文本字段中是否有常见拼写错误，或确保列长度符合标准的规范。

若要配置转换，应选择一个数据质量字段架构（其中包含要应用的规则），然后选择数据流中要评估的输入列。此外，还可以配置错误处理。但是，在可以使用 DQS 清理转换之前，必须先在服务器上安装和配置 DQS，然后创建一个知识库，以存储用来检测数据异常和纠正无效数据的信息（这部分内容在专门的一章来讨论）。在第 7 章“Data Quality Services”中，我们不仅解释 DQS 的工作原理和如何开始使用 DQS，还介绍如何使用 DQS 清理转换。

列引用

数据流的管道体系结构要求：对于数据流任务中的每个数据流组件，其输入列与输出列之间必须具有精确的映射。数据流开发过程中典型的工作流是以一个或多个源开始，然后持续添加新组件，直到管道完成。当您将每个后续组件插入管道时，包设计器配置新组件的输入列，以与前一组件中的关联输出列的数据类型属性和其他属性相匹配。列和相关属性数据的这一集合也称为元数据。

如果您稍后打破组件之间的路径以向管道中添加另一个转换，则管道的某些部分中的元数据可能更改，因为已添加的组件可以添加列、删除列或更改列属性（例如，转换数据类型）。在 Integration Services 的以前版本中，每当元数据变得无效时，就会在数据流设计器中显示错误。当打开下游组件时，将显示“还原无效列引用”编辑器来帮助您更正列映射，但在此编辑器中执行的步骤并不都是很直观的。此外，由于每个数据流组件都依赖于对元数据的访问，因此，如果没有首先将组件附加到管道中的现有组件，则往往无法对其进行编辑。

没有列引用的组件

现在，通过 Integration Services 可以更轻松地处理断开连接的组件。如果您尝试编辑未连接到前一组件的转换或目标，则会显示警告消息框：“此组件没有可用的输入列。是否要继续编辑此组件的可用属性？”

在您单击“是”后，将显示该组件的编辑器，您可以根据需要配置此组件。然而，缺少输入列意味着您无法使用基本编辑器全面地配置组件。如果该组件具有高级编辑器，您可以手动添加输入列，然后完成组件配置。但通常，使用界面建立元数据比手动创建元数据要更容易。

解决引用编辑器

在当前版本的 Integration Services 中，您还能够更轻松地管理管道元数据（当您需要在现有的数据流组件中添加或删除组件时）。数据流设计器在包含未映射列的任何路径旁边都显示一个错误指示器。如果您右键单击组件之间的路径，则可以选择“解决引用”以打开一个新的编辑器，此时您可以使用图形界面将输出列映射到输入列（如图 6-11 所示）。

图 6-11 用于将输出列映射到输入列的“解决引用”编辑器

在“解决引用”编辑器中，您可以拖动“未映射的输出列”列表中的某列，将其添加到“映射的列”区域的“源”列表中。同样，您可以将“未映射的输入列”区域中的列拖到“目标”列表中，以便在输出列与输入列之间建立关联。另一个选项是只需在要映射的列的名称中进行键入或粘贴操作。

提示 当您在编辑器中四个组的任意一个组中具有很长的列列表时，您可以在列表下方的筛选器框中键入字符串，以便只查看与您指定的条件匹配的那些列。例如，如果您的输入列基于从 AdventureWorks2008R2 数据库的 Sales.SalesOrderDetail 表中提取的数据，则可以在筛选器框中键入 unit，以只查看 UnitPrice 和 UnitPriceDiscount 列。

还可以通过单击每个映射右侧的“删除行”按钮手动删除映射。完成映射过程后，可以通过选中编辑器底部的“删除未映射的输入列”复选框，快速删除任何剩余的未映射输入列。通过消除未映射的输入列，可以减少包执行期间组件的内存要求。

可折叠的分组

由于数据流包含的组件过多，根据您的屏幕大小和分辨率，有时可能无法在包设计器中一次看到全部组件。现在，您可以将数据流组件整合到组中并展开或折叠组。数据流中的组在概念上类似于控制流中的序列容器，但是您无法使用组来配置其中的所有组件的常用属性，也无法使用它来为事务设置边界或为变量设置作用域。

若要创建组，请按以下步骤操作：

1. 在数据流设计图面上，使用鼠标在您要组合为一个组的组件周围绘制一个框。如果您愿意，您可以在按住 Ctrl 键的同时单击每个组件。

2. 右键单击所选组件之一，然后选择“组”。包含组件的组将显示在包设计器中，如下所示：

3. 单击“组”标签右上角的箭头可折叠组。

数据查看器

Integration Services 中现在可用的唯一数据查看器是网格视图。直方图、散点图和图表视图已被删除。

若要使用数据查看器，请按照以下步骤操作：

1. 右键单击路径，然后选择“启用数据查看器”。将自动包括管道中的所有列。

2. 如果您转而要显示列的一个子集，则右键单击数据流设计图面上新的“数据查看器”图标（放大镜），然后选择“编辑”。

3. 在“数据流路径编辑器”中，在左边的列表中选择“数据查看器”。

4. 根据需要，将“已显示的列”列表中的列移到“未使用的列”列表（如下所示），并单击“确定”。

变更数据捕获支持

变更数据捕获 (CDC) 是在 SQL Server 2008 数据库引擎中引入的一项功能。当您配置数据库以进行变更数据捕获时，对于您在对应的变更数据捕获表中正在跟踪的表，数据库引擎将存储有关对这些表执行插入、更新和删除操作的信息。在单独的表中跟踪变更的一个目的是执行提取、转换和加载 (ETL) 操作时不对源表产生负面影响。

在 Integration Services 的以前两个版本中，需要通过多个步骤来开发所需的包，以便从变更数据捕获表中检索数据并将结果加载到目标中。为了扩展 Integration Services 的数据集成能力，Microsoft 与 Attunity（一家实时数据集成软件提供商）通力合作，在 SQL Server 2012 中增加了 SQL Server 的变更数据捕获支持。因此，控制流和数据流中提供了新的变更数据捕获组件以供使用，简化了针对变更数据捕获进行包开发的过程。

注意 Integration Services 中的变更数据捕获支持仅在 Enterprise Edition、Developer Edition 和 Enterprise Edition 中提供。若要了解有关数据库引擎中变更数据捕获功能的信息，请参阅“变更数据捕获基础知识”(http://msdn.microsoft.com/zh-CN/library/cc645937(SQL.110).aspx)。

CDC 控制流

若要使用 Integration Services 管理变更数据处理，必须开发两种类型的包：用于一次性执行的初始加载包和按计划持续执行的滴送包。您将在每个包中使用相同的组件，但以不同的方式配置控制流。在每个包类型中，您都加入一个具有字符串数据类型的包变量，供 CDC 组件用来反映当前的处理状态。

如图 6-12 所示，您使用 CDC 控制任务来开始控制流，以便标记初始加载的开始，或在滴送包执行过程中建立要处理的日志序列号 (LSN) 范围。然后，添加一个包含 CDC 组件的数据流任务，以执行初始加载或已更改数据的处理。（我们稍后将在此部分中介绍要在此数据流任务中使用的组件）。然后，您使用另一个 CDC 控制任务来完成控制流，以标记初始加载的结束或成功处理了滴送包的 LSN 范围。

图 6-12 处理变更数据捕获的滴送控制流

图 6-13 显示了滴送包开始时的 CDC 控制任务配置。您使用 ADO.NET 连接管理器来定义针对哪个变更数据捕获启用到 SQL Server 数据库的连接。还指定 CDC 控制操作和 CDC 状态变量的名称。（可选）可以使用一个表来持久保留 CDC 状态。如果您不使用一个表来持久保留状态，则必须在包中包括逻辑，以便在变更数据处理完成时将状态写入持久存储区中，并在开始下一次执行变更数据处理之前读取此状态。

图 6-13 检索要处理的变更数据当前 LSN 范围的 CDC 控制任务编辑器

CDC 数据流

若要处理已更改的数据，应使用 CDC 源和 CDC 拆分器来开始数据流任务，如图 6-14 所示。CDC 源根据由 CDC 控制任务定义的规范来提取更改的数据，接着，CDC 拆分器计算每一行以确定已更改的数据是插入、更新还是删除操作的结果。然后，您将数据流组件添加到 CDC 拆分器的每个输出以进行下游处理。

图 6-14 处理已更改数据的 CDC 数据流任务

CDC 源

在 CDC 源编辑器中（如图 6-15 所示），您可以指定数据库的 ADO.NET 连接管理器，并选择表和相应的捕获实例。必须在 SQL Server 中为变更数据捕获同时配置数据库和表。还可以选择处理模式，以控制是处理所有变更数据，还是只处理净变更。对于在包含 CDC 源的数据流任务之前执行的 CDC 控制任务，CDC 状态变量必须与您在此任务中定义的变量相匹配。最后，您可以选中“包括重新处理指示器列”复选框（可选），以标识重新处理的行，从而单独处理错误条件。

图 6-15 从支持 CDC 的表中提取变更数据的 CDC 源编辑器

CDC 拆分器

CDC 拆分器使用 _$operation 列的值来确定与每个传入行关联的变更类型，并将行分配给适用的输出：InsertOutput、UpdateOutput 或 DeleteOutput。您不用配置此转换，而是添加下游数据流组件，以单独管理每个输出的处理。

灵活的包设计

在包的初始开发阶段，您可能会发现，在属性和表达式中处理硬编码的值以确保逻辑是正确的，这一点是最容易实现的。然而，为了获得最大的灵活性，应使用变量。在这一部分中，我们将了解一下关于变量和表达式的增强功能，这两项是灵活包设计的基石。

变量

对于开发人员来说，向包中添加变量时面临的一个常见问题是作用域分配。如果无意中在控制流设计器中选择了一项任务，然后在“变量”窗口中添加一个新变量，则将在该任务的作用域内创建此变量并且不能更改。在这些情况下，您需要删除变量、在设计图面上清除任务选择，然后再次在包作用域内添加此变量。

现在，Integration Services 在创建新变量时，会默认为包设置作用域。若要更改变量的作用域，请按照以下步骤操作：

1. 在“变量”窗口中，选择要更改的变量，然后单击“变量”工具栏中的“移动变量”按钮（左边第二个按钮），如下所示：

2. 在“选择新的作用域”对话框中，选择具有作用域（包、事件处理程序、容器或任务，如下所示）的可执行文件，并单击“确定”：

表达式

此版本中的表达式增强功能解决了表达式大小限制的问题，并在 SQL Server Integration Services 表达式语言中引入了新函数。

表达式结果长度

在 Integration Services 的当前版本之前，如果表达式结果的数据类型为 DT_WSTR 或 DT_STR，则超过 4000 个字符限制的任何字符都将被截断。此外，如果表达式包含一个计算的中间步骤，而该计算的结果超过了此 4000 个字符的限制，则中间结果同样将被截断。此限制现在已消除。

新函数

SQL Server Integration Services 表达式语言现在有了四个新函数：

• LEFT 现在可以更轻松地返回字符串的最左端部分，而不使用 SUBSTRING 函数：

LEFT(character_expression,number)

点击这里查看代码为图像

• REPLACENULL 可以使用此函数将第一个参数中的 NULL 值替换为第二个表达式中指定的表达式：

REPLACENULL(expression, expression)

点击这里查看代码为图像

• TOKEN 通过此函数，您可以使用分隔符将字符串分隔为多个标记，然后指定要返回的部分，以返回子字符串：

TOKEN(character_expression, delimiter_string, occurrence)

点击这里查看代码为图像

• TOKENCOUNT 此函数使用分隔符将字符串分隔为标记，然后返回在字符串内找到的标记计数：

TOKENCOUNT(character_expression, delimiter_string)

点击这里查看代码为图像

部署模型

本章到目前为止，我们探讨了 SSDT 中的包开发过程的重大更改。Integration Services 的另一重大变化是部署模型的概念。

支持的部署模型

Integration Services 的最新版本支持两种部署模型：

• 包部署模型 包部署模型是在 Integration Services 的以前版本中使用的部署模型，其中部署单位是存储为 DTSX 文件的单个包。在 SQL Server 数据库实例中，包可以部署到文件系统或 MSDB 数据库。虽然可以将包部署为组且包之间可能存在相关性，但 Integration Services 中没有统一的对象来标识使用包模型部署的一组相关包。若要在运行时修改包任务的属性，例如在不同的环境（如开发或生产）中运行包时，您应使用文件系统上保存为 DTSCONFIG 文件的配置。当您希望在运行时手动或通过使用配置来覆盖包属性值时，可以使用 DTExec 或 DTExecUI 实用程序在 Integration Services 服务器上执行包，同时在命令行或图形界面中提供参数。

• 项目部署模型 在此部署模型中，部署单位是项目，项目存储为 ISPAC 文件，是包和参数的集合。项目将部署到 Integration Services 目录，我们将在本章的一个单独部分加以介绍。在运行时，将使用参数（如稍后“参数”部分所述）而不是配置，将值分配给包属性。在执行包之前，您在目录中创建一个执行对象，然后（可选）向执行对象分配参数值或环境引用。当准备就绪后，使用 SQL Server Management Studio 图形界面，通过执行存储过程或运行托管代码来启动执行对象。

除了刚才描述的特性之外，包部署模型与项目部署模型之间还存在其他差异。表 6-1 比较了这些差异。

表 6-1 部署模型比较

特征

包部署模型

项目部署模型

部署单位

包

项目

部署位置

文件系统或 MSDB 数据

Integration Services 目录

运行时属性值分配

配置

参数

在属性值中使用的特定于环境的值

配置

环境变量

包验证

执行的前一步，使用的是：

• DTExec

• 托管代码

独立于执行，使用的是：

• SQL Server Management Studio 界面

• 存储过程

• 托管代码

包执行

DTExec

DTExecUI

SQL Server Management Studio 界面

存储过程

托管代码

日志记录

配置日志提供程序或

实现自定义日志记录

不需要任何配置

计划

SQL Server 代理作业

SQL Server 代理作业

CLR 集成

非必需

必需

点击这里查看表为图像

当您在 SSDT 中创建新项目时，默认情况下会将项目建立为一个项目部署模型。您可以使用“项目”菜单上的“转换为包部署模型”命令（或在解决方案资源管理器中右键单击项目，从上下文菜单中选择此命令），以切换到包部署模型。仅当您的项目与包部署模型兼容时，才会发生转换。例如，它不能使用项目部署模型专用的功能（如参数）。转换后，解决方案资源管理器在项目名称后显示一个附加标签，指示该项目现已配置为包部署模型，如图 6-16 所示。请注意，项目中现在已经没有“参数”文件夹，而有一个“数据源”文件夹。

图 6-16 包部署模型

提示 您也可以反向执行上述转换过程，方法是在解决方案资源管理器中使用“项目”菜单或项目的上下文菜单，将包部署模型项目转换为项目部署模型。

项目部署模型的功能

在这一部分中，我们简要介绍项目部署模型的功能，以帮助您了解如何组合使用这些功能来管理已部署的项目。在本章中后面，我们将详细解释其中的每项功能，并提供指向在线提供的其他信息的链接。

虽然您可以继续使用包部署模型（如果您愿意），但使用新的项目部署模型的主要优点是可以跨多个环境改善包管理。例如，包通常是在一台服务器上开发，在单独的服务器上测试，最终在生产服务器上实现。借助包部署模型，您可以使用各种技术在运行时为正确的环境提供连接字符串，每个字符串都要求您至少创建一个配置文件，并（可选）保留 SQL Server 表或环境变量。虽然这种方法很灵活，但它也会令人困惑且容易出错。项目部署模型同样也是将运行时值与包分开，但它使用 Integration Services 目录中的对象集合来存储这些值，并定义包与这些对象集合（称为参数、环境和环境变量）之间的关系。

• 目录 目录是一个专用的数据库，用于存储包和在包运行时访问的相关配置信息。通过使用该目录的存储过程和视图，或使用 SQL Server Management Studio 中的图形界面，您可以管理包配置和执行。

• 参数 如表 6-1 所示，项目部署模型依赖于参数在包执行期间更改任务属性。可以在项目作用域或包作用域内创建参数。当您在项目作用域内创建参数时，您将针对此项目包含的所有包应用一组常用的参数值。然后，可以在表达式或任务中使用参数，这与使用变量很类似。

• 环境 每个环境都是一个在运行时与包关联的变量的容器。您可以针对单个包创建多个环境，但包在执行过程中只可使用一个环境中的变量。例如，您可以创建用于开发、测试和生产的环境，然后使用其中一个适用的环境来执行包。

• 环境变量 环境变量包含一个文本值，Integration Services 在包执行期间将该值分配给一个参数。在部署项目后，您可以将参数与环境变量相关联。环境变量的值在包执行期间解析。

项目部署工作流

项目部署工作流不仅包括在 SSDT 中将设计时对象转换为在 Integration Services 目录中存储的数据库对象的过程，而且包括从目录中检索数据库对象以更新包设计或使用现有包作为新包模板的过程。若要将项目添加到目录或从目录中检索项目，您可以使用文件扩展名为 ISPAC 的项目部署文件。在项目部署工作流中需要用到 ISPAC 文件的四个阶段是：生成、部署、导入和转换。在本部分中，我们将了解每一个阶段。

生成

当您使用项目部署模型开发包时，您将使用 SSDT 开发一个或多个包作为 Integration Services 项目的一部分。在准备部署到目录（目录用作包和相关对象的集中存储库）时，您可以在 SSDT 中生成 Integration Services 项目，以生成一个 ISPAC 文件。该 ISPAC 文件是一个项目部署文件，其中包含项目信息、Integration Services 项目中的所有包以及参数。

在执行生成之前，可能需要执行两个其他任务：

• 确定入口点包 如果项目中的一个包需要触发（直接或间接）项目中其他包的执行，则应将该包标志为入口点包。为此，您可以在解决方案资源管理器中右键单击包，然后选择“入口点包”。当某个包包含多个项目时，管理员使用此标志确定要启动的包。

• 创建项目和包参数 您需要使用项目级别或包级别的参数在运行时提供要在任务或表达式中使用的值，您将在本章后面的“参数”部分中了解有关如何执行此步骤的详细信息。在 SSDT 中，您指定要用作默认值的参数值。还可以将参数标记为必需的，这样，必须为该变量指定一个值，然后才能执行包。

在 SSDT 中进行开发的过程中，您通常会在 SSDT 内执行一项任务或整个包，以便在部署项目之前测试结果。SSDT 创建一个 ISPAC 文件来保留执行包所需的信息，并将其存储在 Integration Services 项目的 bin 文件夹中。当您完成开发并要准备 ISPAC 文件以进行部署时，请使用“生成”菜单或按 F5。

部署

部署过程使用 ISPAC 文件在目录中为项目、包和参数创建数据库对象，如图 6-17 所示。为此，您可以使用 Integration Services 部署向导，它将提示您为了完成部署所要部署的项目以及要创建或更新的项目。您也可以提供文本值，或指定环境变量作为当前项目版本的默认参数值。您在向导中提供的这些参数值将存储在目录中作为项目的服务器默认值，它们将覆盖包中存储的默认参数值。

图 6-17 将 ISPAC 文件部署到目录

您可以通过在解决方案资源管理器中右键单击该项目并选择“部署”，从 SSDT 中启动向导。但是，如果您有一个 ISPAC 文件保存到文件系统，则可以双击该文件以启动向导。

导入

当您要更新已部署的包或要将其用作新包的基础时，可以从目录或 ISPAC 文件中将项目导入到 SSDT 中，如图 6-18 所示。若要导入项目，应使用 Integration Services 导入项目向导，当您在 SSDT 中创建新项目时，此向导将出现在模板列表中。

图 6-18 从目录或 ISPAC 文件导入项目

转换

如果您有旧式包和配置文件，则可以将它们转换到最新版本的 Integration Services，如图 6-19 所示。Integration Services 项目转换向导现在同时可用于 SSDT 和 SQL Server Management Studio 中。另一个选择是使用 SQL Server 安装中心的“工具”页上提供的 Integration Services 包升级向导。

图 6-19 将现有的 DTSX 文件和配置转换为 ISPAC 文件

注意 可以使用“转换向导”迁移使用 SQL Server 2005 Integration Services 和更高版本创建的包。如果您使用 SQL Server Management Studio，将不修改原始的 DTSX 文件，而是将它们仅用作一个源，以生成包含已升级的包的 ISPAC 文件。

在 SSDT 中打开包项目，然后在解决方案资源管理器中右键单击该项目，并选择“转换为项目部署模型”。此向导会升级项目的 DTPROJ 文件和包的 DTSX 文件。

在 SQL Server Management Studio 中，向导的行为有一些不同。在这种情况下，请在对象资源管理器中右键单击 Integration Services 目录的“项目”节点，然后选择“导入包”。该向导会提示您输入目标位置，并为新项目和已升级的包生成一个 ISPAC 文件。

无论使用哪种方法来转换包，当升级包时都需要执行一些共同的步骤：

• 更新执行包任务 如果包项目中的包包含一个“执行包”任务，向导会将指向 DTSX 文件的外部引用更改为一个项目引用，指向同一个项目内包含的包。子包必须位于要转换的同一个包项目中，并且必须在向导中选择进行转换。

• 创建参数 如果包项目中的包使用配置，您可以选择将配置转换为参数。您可以添加属于其他项目的配置，以便将它们包含在转换过程中。此外，您可以选择从升级的包中删除配置。向导使用配置来提示您确定要转换为参数的属性，它还要求您指定每个参数的项目作用域或包作用域。

• 配置参数 通过转换向导，可以为每个参数指定服务器值以及在运行时是否需要此参数。

参数

正如前一部分所述，参数用于替换旧式包中的配置，但仅限您使用项目部署模型时。配置的目的是提供一种方法来更改运行时包中的值，无需打开包即可直接进行更改。您可以建立项目级别参数以便跨多个包将值分配给一个或多个属性；如果您需要将值分配给单个包内的属性时，可以使用包级别参数。

项目参数

项目参数在同一项目中的所有包中共享其值。若要在 SSDT 中创建项目参数，请按以下步骤执行：

1. 在解决方案资源管理器中，双击 Project.params。

2. 单击 Project.params 窗口工具栏上的“添加参数”按钮。

3. 在“名称”文本框中键入参数的名称，选择数据类型并指定参数的值，如下所示。您在此处提供的参数值称为设计默认值。

注意 此参数值是一个设计时值，可在部署到目录期间或之后覆盖。可以使用工具栏上的“将参数添加到配置”按钮（左边第三个按钮），将选定的参数添加到 Visual Studio 项目配置，这对于在各种条件下测试包执行很有用。

4. 保存该文件。

（可选）您可以为每个参数配置以下属性：

• 敏感 默认情况下，此属性设置为 False 。如果您将其更改为 True ，当将项目部署到目录时，将对参数值加密。如果任何人试图在 SQL Server Management Studio 中或通过访问 Transact-SQL 视图查看参数值，则参数值将显示为 NULL。当您使用参数设置连接字符串属性以及参数值包含特定凭据时，此设置至关重要。

• 必需 默认情况下，此属性也设置为 False 。当值为 True 时，您必须在部署期间或之后配置参数值，然后才能执行包。当必需属性为 True 并且要将包部署到目录时，Integration Services 引擎将忽略您在此屏幕上指定的参数默认值。

• 说明 此属性是可选的，但通过它可以向负责管理已部署到目录的包的管理员提供文档。

包参数

包参数仅适用于创建它们的包，不能与其他包共享。这个选项卡位于包设计器的中央，您可以通过它访问包的“参数”窗口。用于处理包参数的界面与项目参数界面完全相同。

参数用法

在创建项目或包参数后，您就可以在包中实现参数，这与实现变量非常类似。也就是说，任何可以在表达式中使用变量的地方，例如任务、数据流组件或连接管理器，都可以使用参数。

例如，您可以在表达式中引用参数，如图 6-20 所示。注意，此参数将出现在表达式生成器的左上窗格的“变量和参数”列表中。您可以将参数拖到“表达式”文本框中，单独使用它或将其用作更复杂表达式的一部分。当单击“计算表达式”按钮时，您可以看到基于参数的设计默认值的表达式结果。

图 6-20 表达式中的参数用法

注意 此表达式使用的项目参数有一个前缀 $Project 。若要创建使用包参数的表达式，参数前缀应为 $Package 。

还可以通过右键单击任务，然后在上下文菜单上选择“参数化”，直接设置任务属性。“参数化”对话框如图 6-21 所示。您选择属性，然后选择是创建新参数，还是使用现有参数。如果您创建新参数，则在“参数”窗口中为您访问的每个属性指定值。此外，您必须指定是在包作用域内还是在项目作用域内创建此参数。

图 6-21 “参数化”任务对话框

部署后的参数值

您在 SSDT 中为每个参数设置的设计默认值通常只是提供一个值，以方便在 SSDT 环境中进行测试。通过在使用部署向导时指定服务器默认值，或在为部署的项目创建执行对象时配置执行值，可以在部署过程中替换这些值。

图 6-22 说明了创建每种类型的参数值的阶段。如果参数有没有执行值，Integration Services 引擎在执行包时将使用服务器默认值。同样，如果没有服务器默认值，包执行将使用设计默认值。但是，如果参数被标记为必需的，则必须提供服务器默认值或执行值。

图 6-22 不同阶段的参数值

注意 如果 Integration Services 引擎无法解析参数值，则包将失败。为此，建议您按照本章的“验证”部分所述的方法验证项目和包。

服务器默认值

服务器默认值可以是文本值或环境变量引用（本章后面解释），而后者也是文本值。若要在 SQL Server Management Studio 中配置服务器默认值，请在对象资源管理器的 Integration Services 节点中右键单击项目或包，选择“配置”，并更改参数的“值”属性，如图 6-23 所示。即使您在 SSDT 中对设计默认值进行更改并重新部署项目，此服务器默认值仍然存在。

图 6-23 服务器默认值配置

执行参数值

执行参数值仅适用于包的特定执行并覆盖所有其他值。您必须使用 catalog.set_execution_parameter_value 存储过程显式设置执行参数值。SQL Server Management Studio 中并没有提供用于设置执行参数值的界面。

set_execution_parameter_value [ @execution_id = execution_id
, [ @object_type = ] object_type
, [ @parameter_name = ] parameter_name
, [ @parameter_value = ] parameter_value

点击这里查看代码为图像

若要使用此存储过程，您必须提供下列参数：

• execution_id 您必须获取执行实例的 execution_id 。可以使用 catalog.executions 视图查找适用的 execution_id 。

• object_type 对象类型指定您是要设置项目参数还是包参数。对于项目参数，使用值20；对于包参数，则使用值 30。

• parameter_name 参数的名称必须与目录中存储的参数匹配。

• parameter_value 您在此处提供要用作执行参数值的值。

Integration Services 目录

Integration Services 目录是一个新功能，支持对包和相关的配置信息进行集中存储和管理。每个 SQL Server 实例只能承载一个目录。当您使用项目部署模型部署项目时，项目及其组件将添加到目录中，（可选）并放入您在部署向导中指定的文件夹中。每个文件夹（如果您选择不使用文件夹，则为根级别）将其内容组织成两个组：项目和环境，如图 6-24 所示。

图 6-24 目录数据库对象

目录创建

在服务器上安装 Integration Services 并不会自动创建目录。为此，请按照以下步骤操作：

1. 在 SQL Server Management Studio 中，连接到 SQL Server 实例，在对象资源管理器中右键单击 Integration Services 目录文件夹并选择“创建目录”。

2. 在“创建目录”对话框中，（可选）选中“在 SQL Server 启动时启用 Integration Services 存储过程自动执行”复选框。当服务重新启动并调整服务停止时正在执行的包的状态时，此存储过程将执行清理操作。

3. 注意，不能从 SSISDB 中更改目录数据库名称（如下图所示），因此，最后一步是提供一个强密码，然后单击“确定”。密码将创建一个数据库主密钥，Integration Services 使用它来加密存储在目录中的敏感数据。

创建目录后，您将看到它显示为两个 SSISDB 数据库，分别出现在对象资源管理器中的两个位置：一个在数据库节点下，另一个 Integration Services 节点下。在“数据库”节点中，您可以像其他任何数据库一样与目录交互，例如使用界面浏览数据库对象。在 Integration Services 节点下，可以对目录执行管理任务。

注意 在大多数情况下，可以使用多个选项来对目录执行管理任务。您可以使用图形界面（打开所选目录对象的相应对话框），或者使用 Transact-SQL 视图和存储过程，来查看和修改对象属性。有关 Transact-SQL API 的详细信息，请参阅 http://msdn.microsoft.com/zh-CN/library/ff878003(v=SQL.110).aspx。还可以使用 Windows PowerShell，通过使用 SSIS 目录托管对象模型来执行管理任务。有关此 API 的详细信息，请参阅 http://msdn.microsoft.com/zh-CN/library/microsoft.sqlserver.management.integrationservices(v=sql.110).aspx。

目录属性

目录有几个可配置的属性。若要访问这些属性，请在 Integration Services 节点下右键单击 SSISDB，然后选择“属性”。“目录属性”对话框（如图 6-25 所示）显示几个属性。

图 6-25 “目录属性”对话框

加密

注意，在图 6-25 中，默认加密算法是 AES_256。如果您将 SSISDB 数据库放入单用户模式下，则可以选择其他可用的加密算法之一：

• DES

• TRIPLE_DES

• TRIPLE_DES_3KEY

• DESX

• AES_128

• AES_192

Integration Services 使用加密来保护敏感的参数值。当任何人使用 SQL Server Management Studio 界面或 Transact-SQL API 来查询目录时，参数值只显示 NULL 值。

操作

操作包括诸如包执行、项目部署和项目验证等活动。Integration Services 在目录中以表格式存储有关这些操作的信息。可以使用 Transact-SQL API 来监视操作，也可以在对象资源管理器中右键单击 Integration Services 节点上的 SSISDB 数据库，并选择“活动操作”。“活动操作”对话框显示操作的标识符、类型、名称、开始时间以及调用方。您可以选择某项操作，并单击“停止”按钮来结束操作。

应定期从这些表中清除较早的数据，以避免目录增长得过大。通过配置目录属性，您可以通过指定数据的保留天数来控制 SQL Server 代理作业清除陈旧数据的频率。如果您愿意，可以禁用此作业。

项目版本控制

每次您将同名的项目重新部署到相同的文件夹时，项目的以前版本将保留在目录中，直到保留的版本数达到十个。如果需要，您可以通过执行以下步骤还原以前的版本：

1. 在对象资源管理器中，找到 SSISDB 节点下的项目。

2. 右键单击该项目，然后选择“版本”。

3. 在此处所示的“项目版本”对话框中选择要还原的版本，然后单击“还原到所选版本”按钮：

4. 单击“是”以确认，然后单击“确定”以关闭信息性消息框。注意，所选版本现在标记为当前版本，而其他版本仍保留为可还原的选项。

您可以通过更新相应的目录属性来修改要保留的版本的最大数目。如果您增加此数目使之高于默认值“十”，则应持续监视目录数据库的大小，以确保它不会增长得过大。为了管理目录的大小，还可以决定是否定期使用 SQL Server 代理作业删除较旧的版本。

环境对象

在将项目部署到目录后，您可以创建环境，以便结合使用参数来更改执行时的参数值。环境是环境变量的集合。每个环境变量都包含一个要分配给一个参数的值。若要将环境连接到项目，应使用环境引用。图 6-26 说明了参数、环境、环境变量和环境引用之间的关系。

图 6-26 目录中的环境对象

环境

您可以使用的一个约定是为您要用于包执行的每个服务器创建一个环境。例如，您可能具有一个用于开发的环境、一个用于测试的环境和一个用于生产的环境。若要使用 SQL Server Management Studio 界面创建新环境，请按照以下步骤操作：

1. 在对象资源管理器中，展开 SSISDB 节点，找到与包含您的项目的“项目”文件夹对应的“环境”文件夹。

2. 右键单击“环境”文件夹，然后选择“创建环境”。

3. 在“创建环境”对话框中，为环境键入名称，（可选）并键入说明，然后单击“确定”。

环境变量

对于每个环境，您可以创建一个环境变量集合。您为环境变量配置的属性与为参数配置的属性是相同的，当您考虑在运行时使用环境变量替换参数值时，这一点很好理解。若要创建环境变量，请按照以下步骤操作：

1. 在对象资源管理器中，找到 SSISDB 节点下的环境。

2. 右键单击环境，并选择“属性”以打开“环境属性”对话框。

3. 单击“变量”以显示现有环境变量的列表（如果有），如下所示：

4. 在一个空行中，在“名称”文本框中键入环境变量的名称，在“类型”列中选择数据类型，键入说明（可选），在“值”列中键入环境变量的值；并且，如果您想要对目录中的值加密，则选中“敏感”复选框。继续在此页上添加环境变量，完成时单击“确定”。

5. 通过向您打算用于此相同项目的其他环境添加同一组环境变量，重复此过程。

环境引用

若要将环境变量连接到参数，应创建环境引用。有两种类型的环境引用：相对和绝对。当您创建相对环境引用时，环境文件夹的父文件夹也必须是项目文件夹的父文件夹。如果您稍后将包移到另一个文件夹，但没有同时移动环境，则包执行将失败。另一种方法是使用绝对引用，这可以保持环境和项目之间的关系，而不要求它们有相同的父文件夹。

环境引用是项目的属性。若要创建环境引用，请按照以下步骤操作：

1. 在对象资源管理器中，找到 SSISDB 节点下的项目。

2. 右键单击项目，并选择“配置”以打开“配置<项目>”对话框。

3. 单击“引用”以显示现有环境引用的列表（如果有）。

4. 在“浏览环境”对话框中，单击“添加”并选择一个环境。对相对环境引用使用本地文件夹节点，或对绝对环境引用使用 SSISDB 节点。

5. 单击“确定”两次以创建引用。重复步骤 4 和 5，为所有其他适用的环境添加引用。

6. 在“配置<项目>”对话框中，单击“参数”切换到参数页。

7. 单击“值”文本框右侧的省略号按钮以显示“设置参数值”对话框，选择“使用环境变量”选项，并在下拉列表中选择适用的变量，如下所示：

8. 单击两次“确定”。

您可以为一个项目创建多个引用，但在包执行期间只有一个环境处于活动状态。此时，Integration Services 将基于与当前执行实例相关联的环境计算环境变量，如下一部分所述。

管理

完成开发和部署过程后，就应开始熟悉使服务器上的操作保持运行的管理任务了。

验证

在执行包之前，可以使用验证来验证项目和包可能运行成功，尤其是您已配置参数使用环境变量时。验证过程可确保对于必需的参数存在服务器默认值，环境引用有效，参数的数据类型在项目和包配置与它们相应的环境变量之间是一致的，此处仅举几个关于验证检查的示例。

若要执行验证，请右键单击目录中的项目或包，单击“验证”，选择要包括在验证中的环境：所有、无或特定的环境。验证将以异步方式发生，因此，当处理验证时，“验证”对话框将关闭。您可以打开“Integration Services 面板”报告来检查验证的结果。其他选项是在对象资源管理器中右键单击 SSISDB 节点并选择“活动操作”；或者使用 Transact-SQL API 来监视正在执行的包。

包执行

在将项目部署到目录并（可选）配置参数和环境引用之后，您就可以准备执行包了。这一步要求您创建一个称为执行的 SQL Server 对象。 执行是包与其相应参数值的唯一组合，而无论值是服务器默认值还是环境引用。若要配置并启动执行实例，请执行以下步骤：

1. 在对象资源管理器中，找到 SSISDB 节点下的入口点包。

2. 右键单击项目，并选择“执行”以打开“执行包”对话框，如此处所示：

3. 您在此有两个选择。您可以单击值右侧的省略号按钮并为参数指定文本执行值；也可以选中对话框底部的“环境”复选框，并在相应的下拉列表中选择环境。

您可以通过更新“连接管理器”选项卡上的属性，并通过在“高级”选项卡上覆盖属性值和配置日志记录，以继续配置执行实例。有关此对话框中提供的选项的详细信息，请参阅 http://msdn.microsoft.com/zh-CN/library/hh231080(v=SQL.110).aspx。

当您单击“确定”以关闭“执行包”对话框时，将开始包执行。因为包执行以异步方式发生，所以在执行过程中“对话框”不需要保持打开状态。您可以使用“Integration Services 面板” 报告来监视执行状态，或右键单击 SSISDB 节点并选择“活动操作”。另一个选项是使用 Transact-SQL API 监视正在执行的包。

更多时候，您将通过创建一个用于启动执行的 Transact-SQL 脚本来安排包执行，并将脚本保存到一个文件中，然后可以使用 SQL Server 代理作业来安排执行此文件。您使用操作系统 (CmdExec) 步骤类型来添加作业步骤，然后配置此步骤来使用 sqlcmd.exe 实用程序，并将包执行脚本作为参数传递给此实用程序。您使用 SQL Server 代理服务帐户或代理帐户来运行此作业。无论您使用哪种帐户，它都必须具有创建和启动执行的权限。

工具日志记录和故障排除

既然 Integration Services 在服务器上集中处理包存储和包执行，并有权访问操作所生成的信息，那么在 SQL Server Management Studio 中就支持基于服务器的日志记录并提供了操作报告，以帮助您监视服务器上的活动和解决出现的问题。

包执行日志

在旧式 Integration Services 包中，您可以使用两个选项在包执行期间获得日志。一个选项是配置每个包内的日志提供程序，并将日志提供程序与包内的可执行文件关联。另一个选项是使用执行 SQL 语句或脚本组件的组合，以实现一个自定义日志记录解决方案。无论采用哪种方法，在旧式包中启用日志记录所需的步骤都是很乏味的。

如果没有所需的配置，Integration Services 会将包执行数据存储在 [catalog].[executions] 表中。此表中最重要的列包括包执行的开始时间和结束时间以及状态。但是，日志记录机制还捕获与 Integration Services 环境有关的信息，如物理内存、页面文件大小和可用的 CPU。其他表提供针对执行过程中使用的参数值、包内每个可执行文件的持续时间以及在包执行期间生成的消息的访问权限。您可以轻松地编写即席查询以了解包日志，或使用 Reporting Services 建立自己的自定义报告以持续监视日志文件。

注意  若要了解在其中存储包执行日志数据的各个表的全面演练信息，请参阅
http://sqlblog.com/blogs/jamie_thomson/archive/2011/07/16/ssis-logging-in-denali.aspx上由 Jamie Thomson 撰写的博客文章“Denali 中的 SSIS 日志记录”。

数据分流

数据分流在概念上类似于数据查看器，不同点在于它在包执行过程中于 SSDT 外部捕获位于管道中指定点的数据。如果包已部署到 SSIS，则可以使用 T-SQL 存储过程 catalog.add_data_tap 在执行过程中分流到数据流。从数据流中捕获的数据存储在一个 CSV 文件中，在包执行完成后可以查看这些数据。无需更改您的包即可使用此功能。

报告

在从包执行日志表中生成自定义报告之前，查看 SQL Server Management Studio for Integration Services 中现在提供的内置报告。这些报告提供的信息涉及过去 24 小时内的包执行结果（如图 6-27 所示）、性能以及来自包执行失败的错误消息。通过每个报告中的超链接，您可以从摘要信息钻取到详细信息，以帮助您诊断包执行的问题。

图 6-27 Integration Services 操作面板

若要查看报告，请在对象资源管理器中右键单击 SSISDB 节点，依次指向 “报告” 和 “标准报告” ，然后从以下报告列表中进行选择：

• 所有执行

• 所有验证

• 所有操作

• 连接

安全性

包和相关的对象安全地存储在使用加密的目录中。只有新的 SQL Server 数据库角色 ssis_admin 的成员或现有 sysadmin 角色的成员才对目录中的所有对象具有权限。这些角色的成员可以执行诸如创建目录、在目录中创建文件夹和执行存储过程等此类操作。

管理角色的成员将管理权限委派给需要管理特定文件夹的用户。如果您不想向这些用户授予访问更高特权角色的权限，则委托很有用。若要向用户授予文件夹级别的访问权限，请向用户授予 MANAGE_OBJECT_PERMISSIONS 权限。

对于一般权限管理，请针对文件夹（或任何其他安全对象）打开“属性”对话框，然后转到“权限”页。在该页上，您可以按名称选择适当的安全主体，然后根据需要设置显式“授予”或“拒绝”权限。可以使用此方法来保护文件夹、项目、环境和操作。

包文件格式

虽然存储为 DTSX 文件的旧式包的格式设置为 XML，但它们的结构与您可能用来比较包的差异比较工具和源代码管理系统不兼容。在 Integration Services 的当前版本中，包文件格式非常适合打印，属性格式化为特性而不是元素。（适合打印是用语法约定对代码进行的改进，以更便于查看。）此外，属性将按字母顺序列出，配置了默认值的属性已被淘汰。总体来说，这些更改不仅可帮助您更轻松地查找文件中的信息，而且您可以更轻松地使用自动化工具来比较包，并更可靠地合并没有冲突更改的包。

对包文件格式的另一个重大更改是使用 refid 属性以及一个文本值（表示指向被引用对象的路径）来替代无意义的数值沿袭标识符。例如，在名为 Package 的包中有一个称为 Data Flow Task 的数据流任务，其中一个聚合转换的第一个输入列的 refid 如下所示：

Package\Data Flow Task\Aggregate.Inputs[Aggregate Input 1].Columns[LineTotal]

点击这里查看代码为图像

最后，批注不再存储为二进制流。而是以明文形式出现在 XML 文件中。对文件中批注的访问权限越高，就越可能以编程方式从包中提取批注以用于记载目的。

第 7 章
Data Quality Services

数据的质量是很多数据项目（无论是一般业务操作还是商业智能）能否成功的关键因素。当用户输入错误、传输或者业务流程过程中数据损坏，或者是数据源存在冲突的数据标准时，错误数据就会渗透到业务应用程序中。Microsoft SQL Server 2012 的 Data Quality Services (DQS) 功能是一组通过计算机辅助过程和人工过程帮助您测量和管理数据质量的技术。如果您的组织可以获得高质量的数据，您的业务流程可以更高效地运行，管理层可以依赖此类数据更好地进行业务决策。通过集中的数据质量管理，您还可以减少人工审查和更正数据的时间。

Data Quality Services体系结构

在本节中，我们将介绍 DQS 的两个主要组件：数据质量服务器和数据质量客户端。DQS 体系结构还包含内置到其他 SQL Server 2012 功能的组件。例如，Integration Services 提供 DQS 清理转换，用于将数据清理规则应用到数据流管道。此外，Master Data Services 支持 DQS 匹配，使您可以在添加主数据时前消除重复数据。我们将在本章的“集成”一节中详细介绍这些组件。所有 DQS 组件可共存于同一服务器上，也可以安装在单独的服务器上。

数据质量服务器

数据质量服务器是管理知识存储和执行知识相关过程的体系结构的核心组件。它由存储在本地 SQL Server 2012 实例中的一个 DQS 引擎和多个数据库组成。这些数据库包含知识库、用于管理数据质量服务器及其内容的存储过程，以及与清理、匹配和数据探查活动有关的数据。

安装数据质量服务器涉及多个步骤。首先使用 SQL Server 安装程序，在“功能选择”页上至少选择“数据库引擎”和“Data Quality Services”。然后，从“开始”菜单打开 Microsoft SQL Server 2012 程序组中的 Data Quality Services 文件夹，启动数据质量服务器安装程序继续执行安装。此时将打开一个命令窗口，并显示一条提示，让您输入数据库主密钥密码。您必须提供一个强密码，它至少包含 8 个字符，其中至少有一个大写字母、一个小写字母和一个特殊字符。

提供有效的密码之后，数据质量服务器的安装将持续几分钟。除了在服务器上创建并注册程序集外，安装过程将在 SQL Server 2012 的本地实例上创建以下数据库：

• DQS_MAIN 顾名思义，这是数据质量服务器的主数据库。它包含已发布的知识库以及支持 DQS 引擎的存储过程。安装之后，此数据库还包含一个名为“DQS 数据”的示例知识库，您可以使用它清理国家/地区数据或与美国地理位置有关的数据。

• DQS_PROJECTS 此数据库仅供数据质量服务器内部使用，以存储与管理知识库和数据质量项目有关的数据。

• DQS_STAGING_DATA 您可以使用此数据库来临时存储 DQS 操作的源数据。DQS 也可以使用此数据库存储已处理的数据，以后再导出这些数据。

在用户可以将客户端组件与数据质量服务器一起使用之前，具有 sysadmin 权限的用户必须为每个用户创建一个 SQL Server 登录名，并使用在安装数据质量服务器时创建的以下数据库角色之一将每个用户映射到 DQS_MAIN 数据库：

• dqs_administrator 分配给此角色的用户具有其他角色具有的所有权限以及完全管理权限，但是无权添加新用户。具体来说，此角色的成员可以停止任何活动或停止活动内的过程，还可以使用数据质量客户端执行任何配置任务。

• dqs_kb_editor 此角色的成员可以执行除管理之外的任何 DQS 活动。用户必须是此角色的成员才能创建或编辑知识库。

• dqs_kb_operator 此角色是最受限制的数据库角色，只允许这种角色成员编辑和执行数据质量项目以及查看活动监视数据。

重要提示 在远程客户端可以连接到数据质量服务器之前，您必须使用 SQL Server 配置管理器为承载 DQS 数据库的 SQL Server 实例启用 TCP/IP 协议。

数据质量客户端

数据质量客户端是您作为独立应用程序安装的数据质量服务器的主用户界面。业务用户可以使用此应用程序以交互方式处理数据质量项目，如清理或数据探查。数据专员使用数据质量客户端来创建或维护知识库，DQS 管理员则使用它来配置和管理数据质量服务器。

要安装此应用程序，请使用 SQL Server 安装程序并在“功能选择”页上选择“数据质量客户端”。它需要 Microsoft .NET Framework 4.0，该组件可以根据需要自动安装。

注意 如果您计划从 Microsoft Excel 中导入数据，必须在数据质量客户端计算机上安装 Excel。DQS 支持 32 位和 64 位版本的 Excel 2003；但是它只支持 32 版本的 Excel 2007 或 2010，除非将工作簿保存为 XLS 或 CSV 文件。

如果您已具有一个 DQS 数据库角色或对承载数据质量服务器的 SQL Server 实例具有 sysadmin 权限，可以打开数据质量客户端，它位于“开始”菜单的 Microsoft SQL Server 2012 程序组的 Data Quality Services 文件夹中。然后，您必须标识数据质量服务器以建立客户端-服务器连接。如果您单击“选项”按钮，则可以看到有一个加密连接的复选框。

打开数据质量客户端后，通过主屏幕可以执行以下三种类型的任务：

• 知识库管理 使用数据质量客户端的此区域可以创建新知识库、编辑现有知识库、使用知识发现以通过其他值增强知识库，或创建知识库的匹配策略。

• 数据质量项目 在此区域中，可以创建和运行数据质量项目来执行数据清理或数据匹配任务。

• 管理 在此区域中，可以查看知识库管理活动、数据质量项目和 Integration Services 包中使用的 DQS 清理转换的状态。此外，通过此区域，还可以访问数据质量服务器、日志记录和引用数据服务的配置属性。

知识库管理

在 DQS 中，需要创建知识库来存储有关数据的信息，包括要用于验证和更正数据的有效值、无效值以及规则。您可以从示例数据生成知识库，或手动创建一个知识库。可以将一个知识库重复用于多个数据质量项目并使用清理和匹配项目的输出逐渐增强该库。可以指定数据专员来维护知识库。您或数据专员使用数据质量客户端的“知识库管理”区域可以执行三种活动：域管理、知识发现和匹配策略。

域管理

在创建知识库后，您通过域管理活动管理其内容和规则。知识库是域的一个逻辑集合，其中每个域与一个字段对应。您可以为客户和产品创建单独的知识库，也可以将这些主题区域组合为单个知识库。创建域后，需要定义受信任的值、无效值和错误数据的示例。除此之外，还要管理域的属性和规则。

为了防止多个用户同时使用同一知识库可能带来的冲突，DQS 在您开始新活动时会锁定知识库。要解除活动锁定，您必须发布或放弃您的更改结果。

注意 如果您有多个用户负责知识管理，请记住一次只有一个用户可以执行单个知识库的域管理活动。因此，您可能考虑为每个责任区使用单独的知识库。

“DQS 数据”知识库

在创建您自己的知识库之前，您可以浏览自动安装的知识库“DQS 数据”，以熟悉数据质量客户端界面和基本知识库概念。通过浏览“DQS 数据”，您可以了解知识库可包含哪些信息类型。

若要开始使用，请打开数据质量客户端并单击主页上的“打开知识库”按钮。“DQS 数据”是“打开知识库”页上的唯一知识库。当您在现有知识库列表中选择“DQS 数据”时，可以看到与此知识库相关的域的集合，如图 7-1 中所示。

图 7-1  “DQS 数据”知识库详细信息

选择窗口右下角的“域管理”活动，然后单击“下一步”以浏览此知识库中的域。在“域管理”页上的“域”列表中选择一个域，例如“Country/Region”，并访问单独的选项卡来查看或更改与该域相关的知识。例如，您可以单击“域值”选项卡，查看在使用 DQS 执行数据清理时如何更正表示特定国家/地区的值，如图 7-2 中所示。

图 7-2  “国家/地区”域的域值

默认情况下，“DQS 数据”知识库只包含域值。您可以添加其他知识，以使此数据对您自己的数据质量项目更有用。例如，您可以添加域规则来定义识别有效数据的条件，或创建基于字词的关系来定义如何更正在字符串值中找到的字词。有关其他知识类别的详细信息，请参阅本章的“新建知识库”一节。

提示 完成知识库的审查后，单击“取消”按钮和“是”以确认您不想保存您的工作。

新建知识库

在数据质量客户端的主页上，单击“新建知识库”按钮以开始创建一个新知识库。至少要提供知识库的名称，还可以选择添加说明。然后，您必须指定是要创建空知识库还是从现有知识库（如“DQS 数据”）创建您的知识库。另一个选项是通过从 DQS 文件导入知识来创建知识库，该文件是使用导出选项从任何现有知识库创建的。

创建知识库后，您选择“域管理”活动并单击“下一步”，以便在知识库中添加一个或多个域。若要添加新域，可以使用“域管理”页上工具栏中的相应按钮手动创建域或从现有知识库导入域，还可以从数据质量项目的输出创建域。

域 手动创建域时，首先定义域的下列属性（如图 7-3 中所示）：

• 域名 提供的域名在知识库中必须是唯一的，最多包含 256 个字符。

• 说明 可以添加说明以提供有关域内容的详细信息（可选）。说明的最大长度为 2048 个字符。

• 数据类型 此处的选项有：“字符串”、“日期”、“整数”或“小数”。

• 使用前导值 选择此选项时，清理或匹配数据质量项目的输出将在一组同义词中使用前导值。否则，输出将是输入值或其更正值。

• 将字符串规范化 仅当选择“字符串”作为数据类型时，才显示此选项。在知识发现、数据清理和匹配活动的数据处理阶段中，您使用此选项删除域值中的特殊字符。当要消除重复数据时，规范化可能有助于提高匹配的准确度，因为有时会遇到仅标点符号不同其他完全匹配的字符串。

• 将输出格式设置为 输出数据质量项目的结果时，如果将此设置从“无”更改为某个可用格式选项（这取决于域的数据类型），您可以将格式应用到域值。例如，您可以为“日期”数据类型选择 Mon-yyyy，为“小数”数据类型选择 #,##0.00，为“整数”数据类型选择 #,##0 或为“字符串”数据类型选择“大写”。

• 语言 此选项仅适用于“字符串”数据类型。使用它可以指定在启用拼写检查器时要应用的语言。

• 启用拼写检查器 可以使用此选项来允许 DQS 对“字符串”数据类型的域值执行拼写检查。当您进入“域管理”活动的“域值”或“基于字词的关系”选项卡、“知识发现”活动的“管理域值”步骤，或者“清理”活动的“管理和查看结果”步骤时，拼写检查器用红色下划线标记可疑的语法、拼写和句子结构错误。

• 禁用语法错误算法 在数据清理期间将每个值添加到域之前，DQS 可以检查字符串值的语法错误。

图 7-3  “创建域”对话框中的域属性

域值 创建域后，可以通过设置域值向域添加知识。域值表示当前域的数据源中可能存在的可能值范围，包括正确和不正确的值。如果在知识库中包括不正确的域值，您可以建立在清理活动期间更正这些值的规则。

您使用“域值”选项卡上的按钮来手动添加新域值、从 Excel 中导入新的有效值，或从清理数据质量项目导入类型为“正确”或“错误”的新字符串值。

提示 要从 Excel 中导入数据，您可以使用以下任意文件类型：XLS、XLSX 或 CSV。DQS 尝试添加在文件中找到的每个值，但前提是该值在域中不存在。DQS 将第一列中的值作为域值导入，将其他列中的值作为同义词导入，将第一列中的值设置为前导值。如果值违反域规则、数据类型与域的数据类型不匹配或值为 Null，DQS 将不导入值。

当添加或导入值时，您可以为每个域值将“类型”调整为以下设置之一：

• 正确 对于您知道是域的成员且没有语法错误的域值，使用此设置。

• 错误 对于您知道是域的成员但有不正确的值（如拼写错误或缩写形式不正确）的域值，您分配“错误”作为类型值。例如，在 Product 域中，您添加域值 Mtn 500 Silver 52 ，其类型为“错误”，更正值为Mountain-500 Silver, 52。通过向域添加已知的错误条件，使 DQS 可以自动识别和修复已知错误，而您则把重点放在数据处理过程中发现的新错误，这样可以加快数据清理过程。但是，您可以标记域值为“错误”值而不提供更正值。

• 无效 域值不是域的成员且没有相关的更正值时，指定它为“无效”。例如，值“美国”在“产品”域中无效。

在发布对知识库的域更改并稍后返回“域值”选项卡时，您可以查看域值列表中正确值和不正确的值之间的关系，如产品 Adjustable Race 的图 7-4 中所示。还要注意用户界面中的下划线用于标识“Adj Race”的潜在拼写错误。

图 7-4  具有“错误”状态和更正值的域值

如果有多个正确的域值对应于单个实体，您可以选择它们并单击“域值”工具栏中的“将所选域值设为同义词”按钮，将这域值整理为一组同义词。此外，您可以通过右键单击一个同义词并选择上下文菜单中的“设为前导”，指定该同义词作为前导值。DQS 在清理活动中遇到任何其他同义词时，它使用前导值替换非前导同义词值。图 7-5 显示在发布域更改后前导值 Road-750 Black, 52 的一个同义词示例。

图 7-5  指定了前导值的同义词值

数据质量客户端跟踪当前会话期间您对域值进行的更改。为了检查您的工作，单击“显示/隐藏域值更改历史记录面板”按钮，单击“域值”工具栏中的最后一个按钮可访问该按钮。

基于字词的关系 您用于向域添加知识的另一个选项是“基于字词的关系”，它便于在域值中查找和更正常见的词。如果不想在“域值”选项卡上设置域值变体的同义词，您可以指定字符串值的列表并在“基于字词的关系”选项卡上指定相应的“更正为”值。例如，在 product 域中，您可能有包含缩写 Mtn 的各种产品，如Mtn-500 Silver, 40和 Mtn End Caps 。要使 DQS 将域值字符串内所有Mtn实例自动更正为Mountain，您可以通过指定“值/更正为”对来创建基于字词的关系，如图 7-6 中所示。

图 7-6 基于字词的关系，其中一个值与一个更正值配对

引用数据 您可以订阅引用数据服务 (RDS)，DQS 使用它来清理、标准化和增强您的数据。您必须如本章“配置”一节中所述配置 RDS 提供程序，之后才能在“引用数据”选项卡上为知识库设置属性。

在“配置”区域中配置 DataMarket 帐户密钥后，您单击“引用数据”选项卡上的“浏览”按钮，选择一个具有当前订阅的引用数据服务提供程序。在“联机引用数据服务提供程序目录”页上，您将域映射为 RDS 架构列。字母 M显 示在 RDS 架构中的必需列旁边，您必须在映射中包含这些列。

接下来，您为 RDS 配置以下设置（如图 7-7 中所示）：

• 自动更正阈值 指定置信度分数的阈值。在数据清理期间，DQS 自动更正分数高于此阈值的记录。

• 建议的候选项 指定要从引用数据服务检索的建议值的候选项数。

• 最低置信度 指定建议的置信度分数阈值。在数据清理期间，DQS 忽略分数低于此阈值的建议。

图 7-7  引用数据服务提供程序设置

域规则 使用域规则设置确定域值是否有效的条件。但是，请注意域规则不用于更正数据。

单击“域规则”选项卡上的“添加新的域规则”按钮后，您提供规则名称和可选的说明。然后，您在“生成规则”窗格中定义规则的条件。例如，如果域值有最大长度，您可以在规则下拉列表中选择“长度小于或等于”，然后键入条件值以创建一个规则，如图 7-8 中所示。

图 7-8  验证域值长度的域规则

您可以通过向该规则添加多个条件并指定条件是否有“与”或“或”逻辑来创建复合规则。生成规则时，您可以使用“对测试数据运行所选域规则”按钮。您必须手动输入一个或多个值作为此过程的测试数据，然后单击“针对所有字词测试域规则”按钮。您将看到图标显示，以指示值是正确、错误还是无效的。完成生成规则后，单击“应用所有规则”按钮以根据新规则更新域值的状态。

注意 您可以通过清除相应的“活动”复选框来暂时禁用规则。

复合域 有时您的数据源中的复杂字符串包含多个字词，每个字词具有不同的规则或不同的数据类型，因此需要单独的域。但是，您仍需要将字段作为一个整体来验证。例如，对于产品名称 Mountain-500 Black, 40，您可能要单独验证型号Mountain-500、颜色 Black 和尺寸40来确认产品名称的有效性。要解决这个问题，您可以创建一个复合域。

在创建复合域之前，您在知识库中必须至少有两个域。开始执行“域管理”活动，然后单击工具栏上的“创建复合域”按钮。键入复合域的名称，如果愿意还可以提供说明，然后选择要包含在复合域中的域。

注意 将一个域添加到复合域后，不能再将其添加到第二个复合域。

复合域属性 您始终可以在“复合域属性”选项卡上更改、添加或删除复合域中的域，还可以在此选项卡的“高级”部分中选择以下分析方法之一：

• 引用数据 如果您将复合域映射到 RDS，可以指定 DQS 使用 RDS 来分析复合域中的每个域。

• 按顺序 希望 DQS 分析字段值的顺序与复合域中所列的域顺序相同时，您使用此设置。

• 分隔符 您的字段包含分隔符时，您可以指示 DQS 基于您指定的分隔符（如制表符、逗号或空格）来分析值。将分隔符用于分析时，系统为您提供使用知识库分析的选项。通过知识库分析，DQS 识别字符串中已知值的域，然后使用域知识来确定如何将未知值添加到其他域。例如，假定数据源中的一个字段包含字符串Mountain-500 Brown, 40。如果 DQS 识别Mountain-500为“型号”域中的值，40为“大小”域中的值，但是它不识别“颜色”域中的Brown，则会将Brown添加到“颜色”域。

引用数据 您使用此选项卡指定一个 RDS 提供程序并将复合域中的单个域映射为提供程序 RDS 架构的单独字段。例如，您可能有要验证地址详细信息的公司信息。您将合并域“地址”、“城市”、“省/市/自治区”和“邮编”来创建要映射到 RDS 架构的复合域，然后创建一个清理项目以将 RDS 规则应用于您的数据。

复合域规则 您使用“复合域规则”选项卡来定义跨域规则，以验证、更正和标准化复合域的域值。跨域规则使用可用于域规则的类似条件，但是这种类型的规则对于复合域中的所有域（而非单个域）必须为 true。每个规则包含一个If子句和Then子句，每个子句包含一个或多个条件并适用于单独的域。例如，您可以创建一个规则：当 Model 值以Mountain-开头时，如果Size值不是S、M或L，则记录无效，如图 7-9 中所示。对于域规则，您可以创建包含多个条件的规则，可以在定义最终确定前测试规则。

图 7-9  验证复合域中相应“大小”值的跨域规则

注意 如果创建使用明确条件的Then子句，DQS 不会将规则同时应用到域值及其同义词。明确条件是“值等于”、“值不等于”、“值处于”或“值不处于”。此外，如果您将“值不等于”条件用于Then子句，则 DQS 不仅使用此规则验证数据，还会更正数据。

值关系 完成知识发现活动后，您可以在复合域中查看每个值组合的出现次数，如图 7-10 中所示。

图 7-10  复合域的值关系

链接域 可以使用链接域来处理常规域不支持的情况。例如，如果您为一个数据源创建了数据质量项目，该数据源具有使用相同域值的两个字段，必须设置两个域来完成字段到域的映射。如果不想维护具有相同值的两个域，您可以创建一个链接域来继承另一个域的属性、值和规则。

创建链接域的一种方法是：打开包含源域的知识库，右键单击该域，然后选择“创建链接域”。创建链接域的另一种方法是在要求您映射字段的活动过程中创建。首先将第一个字段映射到域，然后尝试将第二个字段映射到同一个域。数据质量客户端将提示您创建一个链接域，此时您提供域名称和说明。

创建链接域后，您可以使用“域管理”活动来完成一些任务，如通过访问某个域来添加域值或设置域规则。将在另一个域中自动进行更改。但是，您只能在原始域中更改域属性。

结束“域管理”活动

DQS 在您开始执行“域管理”活动时锁定知识库，以防止其他用户执行有冲突的更改。如果您在单个会话中无法完成所需的所有更改，请单击“关闭”按钮保存您的工作并使知识库处于锁定状态。工作完成后，单击“完成”按钮。数据质量客户端显示一个提示，要求您确认要执行的操作。单击“发布”以使您的更改永久化、解锁数据库，使知识库可用于其他用户。否则，单击“否”来保存您的工作、使数据库保持锁定，退出“域管理”活动。

知识发现

作为手动将知识添加到您的知识库的替代方法，您可以使用“知识发现”活动来部分自动执行这一过程。您可以根据需要多次执行此活动，将域值从一个或多个数据源添加到知识库。

首先，您在数据质量客户端的“域管理”区域中打开知识库并选择“知识发现”活动。然后，您完成以下三个步骤：“映射”、“发现”和“管理域值”。

映射

在“映射”步骤中，您标识希望 DQS 分析的源数据。此数据必须在数据质量服务器上提供，它可以位于 SQL Server 表或视图中，或位于 Excel 文件中。但是，不要求它来自您要使用 DQS 清理或消除重复的同一源。

此步骤的目的是将源数据中的列映射到知识库中的域或复合域，如图 7-11 中所示。您此时可以根据需要选择创建新的域或复合域。完成所有列的映射后，单击“下一步”按钮以继续执行“发现”步骤。

图 7-11  针对“知识发现”活动将源列映射到域

发现

在“发现”步骤中，您使用“开始”按钮开始执行知识发现过程。随着该过程的执行，“发现”步骤显示以下三个处理阶段的当前状态（如图 7-12 中所示）：

• 预处理记录 在此阶段中，DQS 加载源中的记录并为其编制索引以准备探查数据。此阶段的状态显示为预处理的记录数与源中的总记录数对比信息。此外，DQS 更新除“在域中有效”列之外的所有数据探查统计信息。这些统计信息显示在“事件探查器”选项卡上，包括源中的总记录数、每个字段的域值总数以及每个字段的唯一值数。DQS 还比较源中的值和域中的值，以确定哪些值只在源中存在并被标识为新值。

• 运行域规则 DQS 使用每个域的域规则来更新事件探查器中的“在域中有效”列并将状态显示为完成百分比。

• 运行发现 DQS 分析要添加到“管理域值”步骤中的数据并标识语法错误。执行此阶段时，当前状态显示为完成百分比。

图 7-12  来自数据发现分析的源统计信息

您可以使用“事件探查器”选项卡上的源统计信息来评估源数据的完成度和唯一性。如果源只产生域的几个新值或有大量的无效值，可以考虑使用其他源。“事件探查器”选项卡也可能显示通知，告知您这些情况，如图 7-13 中所示。

图 7-13  “事件探查器”选项卡上显示通知和源统计信息

管理域值

在“知识发现”活动的第三步中，您查看数据发现分析的结果。唯一的新域值显示在包含“类型”设置和建议的更正值的列表中（如果适用）。您可以对值、类型和更正值进行必要的更改，添加新的域值、删除值和处理同义词，就像执行您在“域管理”活动的“域值”选项卡上所执行的各种操作一样。

请注意，在图 7-14 中，以Mountain-开头的几个产品型号被标记为“错误”，DQS 为每个新域值提供了更正值Mountain-500。它这样做是因为Mountain-500是域中唯一预先存在的产品型号。DQS 确定在源中找到的类似产品型号可能是拼写错误，并提供建议的源值更正值以匹配预先存在的域值。在这种情况下，如果新的产品型号都是正确的，您可以将“类型”设置更改为“正确”。当您进行此更改时，数据质量客户端会自动删除“更正为”值。

图 7-14  “知识发现”活动生成建议的更正值

检查每个域和进行更正后，单击“完成”按钮结束“知识发现”活动。然后单击“发布”按钮以完成活动、使用新域值更新知识库，并使知识库处于未锁定状态。如果您单击“否”按钮而非“发布”按钮，将放弃活动结果并解锁知识库。

匹配策略

将知识添加到知识库的另一个方面是定义匹配策略。此策略对于使用匹配功能来解决客户名称拼写错误或地址格式不一致等数据问题的数据质量项目是必不可少的。匹配策略包含一个或多个匹配规则，DQS 使用这些规则来确定两个记录之间的匹配概率。

首先，您在数据质量客户端的“域管理”区域中打开一个知识库并选择“匹配策略”活动。创建匹配策略的过程包括三个步骤：“映射”、“匹配策略”和“匹配结果”。

提示 您可能考虑创建仅用于匹配项目的知识库。在这个仅用于匹配的知识库中，只包含具有唯一标识记录的离散值（如名称和地址）的域。

映射

“匹配策略”活动的第一步类似于“知识发现”活动的第一步。您首先通过将 Excel 或 SQL Server 数据源的字段映射到所选知识库中的域或复合域来创建匹配策略。如果知识库中不存在相应的域，您可以选择创建它。如果您要在下一步在匹配规则中引用某个源字段，必须在此步骤中选择该字段。使用“下一步”按钮继续执行“匹配策略”步骤。

匹配策略

在“匹配策略”步骤中，您设置一个或多个匹配规则，DQS 使用这些规则为要比较的每对记录分配一个匹配分数。当此匹配分数高于为匹配策略建立的最低匹配分数时，DQS 认为此记录是匹配项。

若要开始，请单击“创建匹配规则”按钮。接下来，分配一个名称、说明（可选）和匹配规则的最低匹配分数。如果未在“管理”页上更改 DQS 配置，您可以分配的最低匹配分数为 80%。在“规则编辑器”工具栏上，单击“添加新的域元素”按钮，选择一个域，然后配置所选域的匹配规则参数，如图 7-15 中所示。

图 7-15  为匹配策略创建匹配规则

配置“相似性”参数时，您可以选择以下值之一：

• 类似 如果您希望 DQS 计算两个记录中字段的匹配分数并在匹配分数低于 60 时将相似性分数设置为 0（以指示无相似性），请选择此值。如果该字段具有数值数据类型，您可以使用百分比或整数值设置相似性阈值。如果该字段具有日期数据类型，您可以使用日、月或年的数值来设置阈值。

• 精确 如果您希望 DQS 仅在每个记录中的相同字段相同时才将两个记录标识为匹配项，请选择此值。字段相同时，DQS 为域分配匹配分数 100。否则，它分配匹配分数 0。

无论您向匹配规则添加一个还是多个域，必须为未设置为先决条件的每个域配置“权重”参数。DQS 使用权重来确定单个域的匹配分数如何影响总体匹配分数。权重值的总和必须等于 100。

选中域的“先决条件”复选框时，DQS 将“相似性”参数设置为“精确”，并仅当字段值在两个比较记录中相同时才认为它们是匹配项。无论结果如何，先决条件域对记录的总体匹配分数都没有影响。使用先决条件选项是加快匹配的优化措施。

您可以通过单击“匹配策略”页上的“开始”按钮来测试规则。如果结果不是您想要的，可以修改规则并再次测试它。重新测试匹配策略时，您可以选择从上次执行的已处理匹配项上执行匹配策略或对 DQS 从源重新加载的数据执行匹配策略。“匹配结果”选项卡（如图 7-16 中所示）显示当前测试和以前测试的结果，以便您可以确定您的更改是否改进了匹配结果。

图 7-16  连续执行某一匹配规则的结果比较

查看“数据探查器”选项卡可以帮助您决定如何修改匹配规则。例如，如果一个字段具有唯一记录的高百分比，您可能会考虑从匹配规则删除该字段或降低权重值。另一方面，具有低百分比的唯一记录仅在字段具有高级别的完成度时才有用。如果唯一性和完成度都很低，应从匹配策略中排除该字段。

如果您愿意，可以单击“还原上一个规则”按钮来将规则设置恢复到以前的状态。当您对结果感到满意时，请单击“下一步”按钮以继续执行下一步。

匹配结果

在“匹配结果”步骤中，您选择是将结果作为重叠的群集还是不重叠的群集来检查。对于重叠的群集，您可能看到包含相同记录的独立群集；而对于不重叠的群集，您仅看到具有共有记录的群集。然后，您单击“开始”按钮将所有匹配规则应用到数据源。

处理完成后，您可以查看显示匹配记录的筛选列表的表，其中颜色代码指示适用的匹配规则，如图 7-17 中所示。每个记录群集具有一个数据透视记录，DQS 随机从群集中选择它作为要保留的记录。此外，每个群集包括一个或多个匹配记录及其匹配分数。您可以更改筛选器以显示不匹配的记录，也可以应用一个单独的筛选器来查看分数大于或等于 80%、85%、90%、95% 或 100% 的匹配记录。

图 7-17  基于两个匹配规则的匹配记录

您可以在“匹配规则”选项卡上查看颜色代码，可以评估有关“匹配结果”选项卡上匹配结果的统计信息。您还可以双击列表中的一个匹配记录，并排查看“透视记录和匹配记录”字段、每个字段的分数和匹配的总体分数，如图 7-18 中所示。

图 7-18  显示字段分数和总体分数的匹配分数详细信息

如果有必要，您可以返回到上一步来微调匹配规则，然后返回到这一步。单击“重新启动”按钮之前，您可以选择“自源重新加载数据”选项将源数据复制到 DQS 重新为其编制索引的临时表。您还可以选择“针对以往数据执行”选项，以使用临时表中的数据而不为其重新编制索引，这样可以更快地处理匹配策略。

您对结果感到满意后，请单击“完成”按钮。然后，您可以选择将匹配策略发布到知识库。此时，您可以将该匹配策略用于匹配数据质量项目。

数据质量项目

有现成的知识库时，您可以创建一个数据质量项目来使用它包含的知识清理源数据，或使用其匹配策略来查找源数据中的匹配记录。运行数据质量项目后，可以将结果导出到 SQL Server 数据库或 CSV 文件。或者，您可以选择在“域管理”活动中将结果导入域。

无论要创建哪种类型的数据质量项目，您均以相同方式启动项目，即在数据质量客户端的主页上单击“新建数据质量项目”按钮。创建新项目时，您提供数据质量项目的名称、可选说明，并选择知识库。然后，您可以为任何知识库选择“清理”活动；仅在知识库具有匹配策略时才能为知识库选择“匹配”活动。要启动该活动的向导，请单击“创建”按钮。此时该项目已被锁定，其他用户无法访问。

清理项目

执行清理数据质量项目时，首先使用知识库中包含的知识分析源数据，并将该数据分为正确的数据和不正确的数据两类。DQS 完成分析和分类后，您可以批准、拒绝或更改建议的更正值。

创建清理数据质量项目时，向导会引导您完成四个步骤：“映射”、“清理”、“管理和查看结果”以及“导出”。

映射

清理数据质量项目的第一步是将数据源映射到所选知识库中的域，其过程与您在“知识发现”和“匹配策略”活动中所用过程相同。数据源可以是 Excel 文件或 SQL Server 数据库中的表或视图。完成所有列的映射后，单击“下一步”按钮以继续执行“清理”步骤。

注意 如果您将一个字段映射到复合域，将仅应用与复合域关联的规则而不应用分配给复合域的单个域的规则。此外，如果将复合域映射到某一引用数据服务，DQS 会将源数据发送到引用数据服务以便进行分析和清理。否则，DQS 使用您为复合域指定的方法来执行分析。

清理

要开始执行清理，请单击“开始”按钮。分析过程完成后，可以在“数据探查器”选项卡上查看统计信息，如图 7-19 中所示。这些统计信息反映 DQS 执行的分类结果：正确的记录、更正的记录、建议的记录和无效记录。DQS 使用高级算法来清理数据和计算置信度分数，以确定适用于源数据中的每个记录的类别。您可以配置置信度阈值以进行自动更正和自动建议。如果记录的置信度分数低于这些阈值且记录既不正确也不是无效，DQS 会将其归入新记录类别并保持不变，以便您在下一步根据需要手动更正它。

图 7-19  清理过程完成后的事件探查器统计信息

管理和查看结果

在清理数据质量项目的下一步，您会看到 DQS 分好类的每组记录的单独选项卡：“建议的”、“新建”、“无效”、“已更正”和“正确”。选项卡标签显示分配给每个组的记录数。打开选项卡时，您可以看到该组的域值表以及包含每个域值的记录数，如图 7-20 中所示。

如果适用，还可以看到建议的更正值、置信度分数和每个值的建议更正的原因。如果您选择表中的行，可以看到包含原始值的单个记录。必须使用水平滚动条查看单个记录的所有字段。

为域启用“拼写检查器”功能时，清理过程通过在域值下面显示红色的波浪下划线来标识可能的拼写错误。您可以右键单击值以查看建议，然后选择一个建议或将可能的错误添加到字典中。

图 7-20  自动清理数据后的分类结果

如果 DQS 将源数据中的值标识为同义词，它给出前导值的更正建议。此功能对于数据的标准化很有用。在运行清理数据质量项目前，您必须首先启用前导值的域并在知识库中定义同义词。

查看建议的更正值后，您可以针对每个值或每个记录分别批准或拒绝更改，还可以单击工具栏上的“批准所有字词”按钮或“拒绝所有字词”按钮。您也可以通过在“更正为”框中键入新值，然后批准手动更正以替换建议的更正。在大多数情况下，将批准的值移到“已更正”选项卡，将拒绝的值移到“无效”选项卡。但是，如果批准“新建”选项卡上的值，它将移到“正确”选项卡。

导出

在清理过程中的任何时候，DQS 都不会更改源数据。但是，您可以将清理数据质量项目的结果导出到 SQL Server 表或 CSV 文件。输出的预览显示在项目的最后一步，如图 7-21 中所示。

图 7-21  检查要导出的清理结果

在导出数据前，您必须决定是仅导出数据还是同时导出数据和清理信息。清理信息包括原始值、已清理的值、更正原因、置信度分数和记录的分类。默认情况下，如果未清除“标准化输出”复选框，DQS 使用知识库中定义的域输出格式。单击“导出”按钮时，数据质量客户端将数据导出到指定的目标。然后，您可以单击“完成”按钮以关闭并解锁数据质量项目。

匹配项目

通过使用为知识库定义的匹配策略，匹配数据质量项目可以标识数据源中的精确与近似匹配项。理想情况下，您在运行清理过程并导出结果后运行匹配过程。然后，您可以指定导出文件或目标表作为匹配项目的源。

匹配数据质量项目包括三个步骤：“映射”、“匹配”和“导出”。

映射

匹配项目的第一步与清理项目相同，都是要求您将源中的字段映射到域。但是，在匹配项目中，必须将字段映射到在知识库的匹配策略中指定的每个域。

匹配

在“匹配”步骤中，您选择是要生成重叠的群集还是不重叠的群集，然后单击“开始”按钮以启动自动匹配过程。匹配完成后，您可以查看按群集划分的匹配结果表。界面功能与您在创建匹配策略期间查看匹配结果时使用的界面功能相似。但是，在匹配项目中多了一个附加列，该列包含一个复选框，您可以选中它以拒绝将记录作为匹配项。

导出

查看匹配结果后，您可以导出结果，这是匹配项目的最后一步。如图 7-22 中所示，您必须选择目标和要导出的内容。您有以下两个选项用于导出内容：

• 匹配结果 此内容类型包括匹配的记录和不匹配的记录。匹配的记录包括与匹配过程相关的几列，包括群集标识符、标识匹配的匹配规则、匹配分数、审批状态以及指示数据透视记录的标志。

• 存活结果 此内容类型仅包括存活记录和不匹配的记录。选择此导出选项时必须选择存留规则，以指定在导出中保留群集中的哪些匹配记录。群集中的所有其他记录将被丢弃。如果多个记录满足存留条件，DQS 将保留记录标识符最低的记录。

图 7-22  选择要导出的内容

重要提示 单击“完成”按钮时，该项目将解锁，供以后使用。但是，DQS 使用此时您完成项目的知识库内容并忽略之后对知识库所作的所有更改。若要访问对知识库的任何更改（如已修改的匹配策略），您必须创建新的匹配项目。

管理

使用数据质量客户端的“管理”功能，您可以执行活动监视和配置任务。可以打开数据质量客户端的任何用户均可执行活动监视，但只有管理员可以执行配置任务。

活动监视

您可以使用“活动监视”页查看当前和过去在数据质量服务器上执行的活动状态，如图 7-23 中所示。DQS 管理员可以根据需要右键单击某一活动或步骤，终止该活动或活动中的该步骤。

图 7-23  活动状态和所选活动的活动步骤状态

此页上显示的活动包括知识发现、域管理、匹配策略、清理项目、匹配项目以及 Integration Services 包中的清理转换。您可以查看每个活动的启动者、开始和结束时间以及占用时间。为方便查找特定的活动，您可以使用筛选器来按日期范围、状态、类型、子类型、知识库或用户查找活动。选择此页上的活动时，您可以查看相关的活动详细信息，如步骤和事件探查器信息。

您可以单击“将所选活动导出到 Excel”按钮将活动详细信息、过程步骤和事件探查信息导出到 Excel。导出文件将此信息放入以下四个工作表中：

• 活动 此工作表包括有关活动的详细信息，包括名称、类型、子类型、当前状态、占用时间等。

• 进程 此工作表包括有关每个活动步骤的信息，包括当前状态、开始和结束时间以及占用时间。

• 事件探查器 - 源 此工作表的内容取决于活动子类型。对于“清理”子类型，您将看到总记录数、正确的记录数、更正的记录数和无效记录数。对于“知识发现”、“域管理”、“匹配策略”和“匹配”子类型，您将看到记录数、值总数、新值数、唯一值数和新的唯一值数。

• 事件探查器 - 字段 此工作表的内容也取决于活动子类型。对于“清理”和“SSIS 清理”子类型，工作表包含按字段划分的以下信息：域、更正的值、建议的值、完成度和准确性。对于“知识发现”、“域管理”、“匹配策略”和“匹配”子类型，工作表包含按字段划分的以下信息：域、新值计数、唯一值计数、域中有效值计数和完成度。

配置

在数据质量客户端的“配置”区域，您可以设置引用数据提供程序、设置数据质量服务器的属性和配置日志记录。只有 DQS 管理员才能执行配置任务。通过单击“配置”按钮，可以从数据质量客户端主页访问此区域。

引用数据

如果不想维护知识库中的域值和规则，您可以通过 Windows Azure Marketplace 订阅某个引用数据服务。大多数引用数据服务需要每月付费订阅，但某些提供程序可免费试用。（此外，Digital Trowel 为美国上市公司和私人公司提供免费清理和标准化数据的服务。）当您订阅服务时，会收到帐户密钥，您必须首先使用该密钥在数据质量客户端注册，之后才能在数据质量活动中使用引用数据。

如图 7-24 中所示，“引用数据”选项卡是“配置”区域中显示的第一个选项卡。在此您在“DataMarket 帐户 ID”框中键入或粘贴您的帐户密钥，然后单击该框右侧的“验证 DataMarket 帐户 ID”按钮。如果 DQS 服务器需要代理服务器连接到 Internet，您可能需要提供代理服务器和端口号。

注意 如果没有订阅引用数据服务，可以使用“创建 DataMarket 帐户 ID”链接来在浏览器中打开 Windows Azure Marketplace 站点。您必须具有访问该站点的 Windows Live ID。单击页顶部的“数据”链接，然后单击“类别”列表中的“Data Quality Services”链接。您可以访问https://datamarket.azure.com/browse/Data?Category=dqs查看引用数据服务提供程序的当前列表。

图 7-24  引用数据服务帐户配置

作为为引用数据使用 DataMarket 订阅的替代方法，您可以配置第三方引用数据服务的设置，这只需要单击“添加新的引用数据服务提供程序”按钮并提供必要的详细信息：服务名称、作为架构的逗号分隔的字段列表、引用数据服务的安全 URI、每批的最大记录数以及订户帐户标识符。

常规设置

您使用“常规设置”选项卡（如图 7-25 中所示）来配置下列设置：

• 交互式清理 指定建议的最低置信度分数和自动更正的最低置信度分数。DQS 在确定如何将清理数据质量项目的记录分类时使用这些值作为阈值。

• 匹配 指定 DQS 用于匹配策略的最低匹配分数。

• 事件探查器 使用此复选框来启用或禁用事件探查通知。当您执行知识库活动或运行数据质量项目时，这些通知将显示在“事件探查器”选项卡上。

图 7-25  设置分数阈值和启用通知的常规设置

日志设置

日志文件对于解决可能出现的问题很有用。默认情况下， DQS 日志文件捕获严重性级别为“错误”的事件，但是您可以将活动的严重性级别更改为：“致命”、“警告”、“信息”或“调试”，如图 7-26 中所示。

图 7-26  数据质量服务器的日志设置

DQS 生成以下三种日志文件类型：

• 数据质量服务器 您可以在 DQServerLog.DQS_MAIN.log 文件中找到与服务器有关的活动，该文件位于 Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Log 文件夹。

• 数据质量客户端 您可以在 DQClientLog.log 文件中查看与客户端有关的活动，该文件位于 %APPDATA%\SSDQS\Log 文件夹。

• DQS 清理转换 当您执行包含 DQS 清理转换的包时，DQS 在 DQSSSISLog.log 文件中记录清理活动，该文件位于 %APPDATA%\SSDQS\Log 文件夹。

除了按活动配置日志严重性设置外，您可以在“日志设置”选项卡的“高级”部分在模块级别配置它们。通过使用更精细的方法来配置日志设置，可以更深入地了解您要解决的问题。使用默认严重性“信息”来配置Microsoft.Ssdqs.Core.Startup，以跟踪与启动和停止 DQS 服务有关的事件。可以使用“高级”部分中的下拉列表选择另一个模块，并指定想要的日志严重性级别。

集成

将 DQS 清理和匹配功能内置到其他两个 SQL Server 2012 功能 Integration Services 和 Master Data Services 中，以便可以更高效地管理您组织的数据质量。在 Integration Services 中，您可以使用 DQS 组件例行执行预定运行的包中的数据清理。在 Master Data Services 中，您可以将外部数据与主数据进行比较，以基于为知识库定义的匹配策略来查找匹配记录。

Integration Services

在早期 SQL Server 版本中，您可以使用 Integration Services 包通过“派生”列或“脚本”转换自动执行清理数据，但是创建数据流来执行复杂的清理可能很困难。现在您可以利用 DQS 来将知识库中的规则或引用数据用于数据清理。通过 Integration Services 和 DQS 的集成，您可以基于计划执行清理数据质量项目支持的相同任务。在 Integration Services 中使用 DQS 清理转换的另一个好处是可以从源而非 Excel 或 SQL Server 数据库清理数据。

由于 Integration Services 中的 DQS 功能内置到产品中，您可以直接使用它而无需进行额外的安装或配置。当然，必须有可用的数据质量服务器和知识库。要开始执行，您将 DQS 连接管理器添加到包，添加一个数据流任务，然后将 DQS 清理转换添加到该数据流。

DQS 连接管理器

您使用 DQS 连接管理器建立从 Integration Services 包到数据质量服务器的连接。向包添加连接管理器时，您提供服务器名称。连接管理器界面包含一个按钮来测试到数据质量服务器的连接。您可以使用图标来标识 DQS 连接管理器，如图 7-27 中所示。

图 7-27  DQS 连接管理器

DQS 清理转换

正如我们在本章的“清理项目”一节中所述，DQS 使用高级算法清理数据并计算置信度分数来将记录分为“正确”、“已更正”、“建议的”或“无效”这几类。数据流中的 DQS 清理转换将数据传输到数据质量服务器，数据质量服务器依次执行清理过程并将数据发回转换并带更正值（如果适用）和状态。然后，您可以将有条件拆分转换添加到数据流，以基于状态将每个记录路由到单独的目标。

注意 如果知识库映射到引用数据服务，数据质量服务器还可能将数据转发到该服务以进行清理和增强。

配置 DQS 清理转换时，首先选择一个连接管理器和一个知识库。选择知识库后，将显示可用的域和复合域，如图 7-28 中所示。

图 7-28  DQS 清理转换的连接管理器配置

在“映射”选项卡上，您将数据流管道中的每列映射到各自的域，如图 7-29 中所示。如果要将某列映射到复合域，该列必须包含逗号分隔的字符串形式的域值，其顺序与单个域在复合域中出现的顺序相同。

图 7-29  将管道列映射到域

对于每个输入列，您还定义了下列输出列的别名：源、输出和状态。转换编辑器为您提供默认值，但是如果您愿意，可以更改这些别名。在包执行期间，带源别名的列包含源中的原始值，带输出别名的列则包含正确和无效记录的相同值或者包含建议或更正记录的更正值。带状态别名的列包含指示清理过程结果的值：“自动建议”、“正确”、“无效”或“新建”。

在转换编辑器的“高级”选项卡上，您可以配置下列选项：

• 标准化输出 默认情况下启用此选项，将根据每列的“格式输出”设置自动将“输出别名”列中的数据标准化。此外，如果您为域启用“使用前导值”，此选项会将同义词更改为前导值。

• 启用字段级别列 您可以在转换输出中包含置信度分数或更正原因作为附加列（此为可选项）。

• 启用记录级别列 如果域映射到在清理过程中返回附加数据列的引用数据服务，则可以包含此数据作为追加的列。此外，您可以提供一个列来包含追加数据的架构。

Master Data Services

如果您使用 Master Data Services (MDS) 进行主数据管理，可以使用 DQS 中的数据匹配功能来消除重复的主数据。您必须首先在 Master Data Services 配置管理器的“Web 配置”页上启用 DQS 集成，并且为 DQS 知识库创建匹配策略。然后，您将数据添加到 Excel 工作表并使用 MDS Excel 外接程序将该数据与 MDS 管理的数据合并以准备匹配。匹配过程将列添加到工作表，这些列类似于您在匹配数据质量项目时查看的列，包括匹配分数。我们将在第 8 章“Master Data Services”中详细介绍如何将 DQS 匹配与 MDS 配合使用。

第 8 章
Master Data Services

Master Data Services (MDS) 的第一个版本出现在 Microsoft SQL Server 2008 R2 中，用于支持主数据管理。在当前版本中，我们对用户界面进行了一些改进并提供一个新功能（MDS Excel 外接程序）来管理您的主数据。此外，随着您使用 MDS 的方式的改变，一些功能已经停止使用。总的说来，MDS 的这些变化简化了 MDS 的实施、工作流和管理。

入门

MDS 作为 SQL Server 2012 安装程序中的一个功能提供，而不是像在 SQL Server 2008 中那样需要独立的安装程序来安装。如果您已安装 SQL Server 2008 MDS，必须确定是将 MDS 与数据库引擎一起升级还是单独升级。在本节中，我们将说明每个选项的注意事项。此外，我们还将介绍要执行的安装后配置步骤（无论您有全新的还是升级的 MDS 安装）。

升级注意事项

升级现有 MDS 实施时，可以将 MDS 数据库保留在 SQL Server 2008 R2 数据库实例中，也可以将它迁移到 SQL Server 2012 数据库实例。无论您作何选择，都应在开始升级前备份 MDS 数据库。

如果您选择不升级 MDS 数据库，必须并行安装 SQL Server 2012 和 SQL Server 2008 R2，尽管 SQL Server 的两个版本不要求必须安装在同一计算机上。此外，安装 SQL Server 2012 时，只需要安装 MDS 功能，这会将文件添加到 Program Files\Microsoft SQL Server \110\Master Data Services，然后必须使用 Master Data Services 配置管理器来升级 MDS 数据库。它将继续驻留在 SQL Server 2008 R2 实例中，但是升级过程会修改 MDS 数据库的架构来支持 SQL Server 2012 中 MDS 的新功能。

另一方面，如果您选择将数据库引擎升级到 SQL Server 2012，必须首先使用“控制面板”的“程序和功能”区域中的“卸载”命令卸载 MDS，然后使用 SQL Server 2012 安装向导执行升级。开始安装后，依次选择“安装”、“从 SQL Server 2005、SQL Server 2008 或 SQL Server 2008 R2 升级”并完成向导。然后再次使用 SQL Server 2012 安装向导将 MDS 功能添加到现有安装中。

配置

无论您是执行 MDS 的全新安装还是从以前的版本升级，都必须使用 Master Data Services 配置管理器。您可以从“开始”菜单的 Microsoft SQL Server 2012 程序组中的 Master Data Services 文件夹打开此工具，使用它来创建或升级 MDS 数据库、配置 MDS 系统设置和为 MDS 创建 Web 应用程序。

重要提示 如果您要从 MDS 的以前版本升级，必须使用创建原始 MDS 原始数据库时所用的管理员帐户登录。您可以通过在 MDS 数据库的 mdm.tblUser 表中查找 ID 值为1的用户来识别此帐户。

执行以下安装的第一个配置步骤是配置 MDS 数据库。在 Master Data Services 配置管理器的“数据库配置”页上，执行以下任务之一：

• 全新安装 单击“创建数据库”按钮，完成数据库向导。在向导中，指定 SQL Server 实例和身份验证类型并提供有权在所选实例上创建数据库的凭据。您还提供数据库名称并指定排序规则。最后，您指定要作为 MDS 管理员帐户设置的 Microsoft Windows 帐户。

重要提示 开始新的安装之前，您必须安装 Internet Information Services (IIS)。

• 升级 如果您想在 SQL Server 2008 R2 实例中保留您的数据库，请单击“修复数据库”按钮（如果该按钮已启用）。然后，无论要将 MDS 数据库存储在 SQL Server 2008 R2 还是 SQL Server 2012 中，都请单击“升级数据库”按钮。升级数据库向导将显示 SQL Server 实例和 MDS 数据库名称以及更新进度。升级过程将使用新的架构和存储过程重新创建表。

注意 升级过程不包括用于生成代码属性值的业务规则。我们将在本章后面的“实体管理”一节中介绍新的自动代码生成内容。此外，升级过程不包括模型部署包。您必须在 SQL Server 2012 安装中创建新包。

新建或升级数据库时，您将看到显示在“数据库配置”页上的“系统设置”。例如，使用这些设置来控制数据库或 Web 服务的超时。如果升级 MDS 安装，可以配置两个新的系统设置：

• 在网站主页上显示“Excel 外接程序”文本 此设置控制用户是否在 MDS 主页上看到安装 MDS 外接程序的链接，如图 8-1 中所示。

• 网站主页上的 Excel 外接程序安装路径 此设置默认为 Microsoft 网站上的 MDS 外接程序下载页。

图 8-1  MDS 网站主页上的 Excel 外接程序文本

主数据管理器

主数据管理器是数据专员用于管理主数据以及管理员用于管理模型对象和配置安全的 Web 应用程序。大多数情况下，它的工作方式和以前版本的 MDS 中的方式相同，只是“资源管理器”和“集成管理”功能区域现在已使用 Silverlight 5。因此，您将发现某些任务变得更容易执行，而且速度也更快。为了实现更快更方便地进行处理，当前版本的 MDS 还引入了一个新的临时过程并略微修改了安全模型。

资源管理器

在“资源管理器”功能区域，可以添加或删除某个实体的成员、更新成员属性值、排列层次结构中的这些成员，以及将成员组整理为集合（可选）。在 SQL Server 2012 中，MDS 改进了执行这些任务的工作流。

实体管理

当您在“资源管理器”区域打开一个实体时，会看到新界面，如图 8-2 中所示。按钮组现在采用新的图标并提供解释其用途的说明。单击“添加成员”按钮时，您在“详细信息”窗格中键入新成员的所有属性值。要删除成员，请选择该成员，然后单击“删除”按钮。您还可以更轻松地编辑成员的属性值，只需要在网格中选择它，然后在“详细信息”窗格中键入该属性的新值即可。

图 8-2  所选实体的成员管理

如果您不想像在 SQL Server 2008 R2 中那样使用业务规则来自动创建“代码”属性值，现在可以配置实体以自动生成代码值。无论您是在主数据管理器中手动添加成员还是通过临时过程导入数据，都可以像这样自动赋值。为此，您必须具有访问“系统管理”功能区域和打开实体的权限。在“实体维护”页上，选中“自动创建代码值”复选框，如图 8-3 中所示。您还可以更改“起始值”框中的数（可选）。如果您已将成员添加到实体，当添加新成员时，MDS 将最大值递增 1。

图 8-3  自动生成代码值的复选框

注意 仅当将代码值留空时才自动生成值。添加新成员时，始终可以使用其他值替换该值。

多对多映射

当前版本的 MDS 的另一个改进是可以使用主数据管理器中的“资源管理器”功能区域来查看定义了多对多映射的实体。要了解其工作方式，请考虑以下情形：您要将一些产品拆分为多个部件，并且可以将任何一个部件与多个产品关联。您通过创建三个实体来在 MDS 中管理产品和部件之间的关系：产品、部件和一个用于定义产品和部件之间关系的映射实体，如图 8-4 中所示。请注意，您只需要一个代码值和存储两个相关实体的代码值的一些属性，不需要名称值。

图 8-4  派生层次结构中成员的排列

打开 Product 实体并选择成员时，可以打开屏幕右侧的“相关实体”窗格，该窗格显示一个链接，如 ProductParts（属性：产品代码）。单击此链接时，将打开一个新浏览器窗口来显示 ProductParts 实体窗口，其中应用了一个筛选器以只显示与所选产品有关的记录。从该屏幕，您可以单击“转到<Name>实体查看属性详细信息”按钮（如图 8-5 中所示），以打开显示实体成员及其属性值的另一个浏览器窗口。

图 8-5  单击以导航到“详细信息”窗格中的相关实体

层次结构管理

当您要更改成员的父对象时，“资源管理器”功能区域中的新界面（如图 8-6 中所示）使您能更轻松移动层次结构中的成员。层次结构窗格显示层次结构的树视图。您在此可以选中每个要移动的成员的复选框。接着单击层次结构窗格顶部的“复制”按钮，选中要将以前所选成员移到的成员的复选框，然后单击“粘贴”按钮。在派生层次结构中，您只能将成员粘贴到同一个级别。

图 8-6  派生层次结构中成员的排列

集合管理

您可以将实体成员的子集整理为 MDS 中的集合。系统提供一个新功能，可以在用户界面内为每个集合成员分配权重，如图 8-7 中所示。您只能使用 MDS 存储权重，以便订阅系统使用该权重在集合成员间分配值。因此，订阅视图包含权重列。

图 8-7  新的集合管理界面

集成管理

MDS 现在提供了新的高性能临时过程，以便您可以自动执行主数据管理过程的某些步骤。这个新的临时过程的优势在于可以一次加载成员和属性值，而不用分批加载。为此，将数据加载到以下相应的表，其中name为实体的临时表名称：

• stg.name_Leaf 使用此表暂时添加、更新或删除叶成员及其属性。

• stg.name_Consolidated 使用此表暂时添加、更新或删除合并成员及其属性。

• stg.name_Relationship 使用此表分配显式层次结构中的成员。

在将数据加载到临时表后可以通过两种方法来启动临时过程：使用“集成管理”功能区域或执行存储过程。在“集成管理”功能区域，您在下拉列表中选择模型并单击“开始批处理”按钮，如图 8-8 中所示。将分批处理数据，您将看到状态从“排队待运行”变为“正在运行”再变为“已完成”。

图 8-8  在“集成管理”功能区域暂存一批

如果临时过程出错，将在网格中显示错误数，但是在“集成管理”功能区域中无法查看它们。您可以在 SQL Server Management Studio 中单击“复制查询”按钮复制 SQL 查询，然后将其粘贴到查询窗口。查询类似于：

SELECT * from [stg].[viw_Product_MemberErrorDetails] WHERE Batch_ID = 1

点击这里查看代码为图像

此视图包含一个 ErrorDescription 列来说明将已暂存记录标记为错误的原因。它还包含 AttributeName 和 AttributeValue 列以指示哪个属性和值导致了错误。

如果您使用存储过程来执行临时过程，可以使用以下存储过程之一，其中name对应于临时表：

• stg.udp_name_Leaf

• stg.udp_name_Consolidated

• stg.udp_name_Relationship

每个存储过程采用以下参数：

• VersionName 提供模型的版本名称，如 VERSION_1。SQL Server 数据库的排序规则设置确定此参数的值是否区分大小写。

• LogFile 使用值1表示记录暂存期间的事务；如果不想记录事务，则使用值0。

• BatchTag 提供最多包含 50 个字符的字符串来标识临时表中的批次。此标记显示在“集成管理”功能区域的批处理网格中。

例如，要为批加载叶成员和记录事务，请在 SQL Server Management Studio 中执行以下代码之一：

EXEC [stg].[udp_name_Leaf] @VersionName = N’VERSION_1’, @LogFlag = 1, @BatchTag = N’batch1’
GO

点击这里查看代码为图像

注意 暂存期间的事务日志记录是可选的。仅当您使用存储过程进行暂存时才启用日志记录。如果您从“集成管理”功能区域启动临时过程，将不进行日志记录。

重要提示 临时过程中不进行验证。您必须在“版本管理”功能区域中进行手动验证或使用mdm.udpValidateModel存储过程进行验证。有关此存储过程的详细信息，请参阅http://msdn.microsoft.com/zh-cn/library/hh231023(SQL.110).aspx。

如果愿意，可以继续使用为 SQL Server 2008 R2 MDS 临时过程引入的临时表和存储过程。如果您要管理集合，则可能选择这样做，因为 SQL Server 2012 中的新临时过程不支持集合。因此，必须使用以前的临时过程来创建或删除集合、在集合中添加或删除成员，以及重新激活成员和集合。

用户和组权限

就像在以前版本的 MDS 中一样，权限的分配是按功能区域和模型对象进行的。当您在“管理用户”页的“模型”选项卡上将对模型的“只读”或“更新”权限分配给某个用户或组时，该权限也应用于更低级别的对象。例如，当您授予用户或组对 Product 模型的“更新”权限时（如图 8-9 中所示），用户还可以添加、更改或删除该模型中任何实体的成员并可以更改任何属性值。当您要授予用户查看但是不能更改实体成员的权限时，必须显式将对所选实体的权限更改为“只读”；当您不希望用户查看实体成员时，必须显式将权限设置为“拒绝”。可以通过设置对属性对象的权限（在“叶”、“合并”或“集合”节点下）来控制用户可以查看或更改哪些属性值，进一步优化安全设置。

图 8-9  模型权限对象树和摘要

在 SQL Server 2008 MDS 中，模型权限对象树还包括派生层次结构、显式层次结构和属性组的节点，但是在 SQL Server 2012 MDS 中不再提供这些节点。派生层次结构从模型中继承权限，而显式层次结构则从相关实体继承权限。在这两种情况下，您可以在“管理用户”页的“层次结构成员”选项卡上覆盖这些默认权限，以管理用户可以查看或更改哪些实体成员。

对于属性组权限，您现在使用“系统管理”功能区域中的“属性组维护”页为用户或组分配权限，如图 8-10 中所示。“已分配”列表中显示的用户或组只具有“更新”权限。您不能再将“只读”权限分配给属性组。

图 8-10  属性组的用户和组安全性

模型部署

现在，有一个新的高性能命令行工具用于部署包。如果您在 Web 应用程序中使用模型部署向导，它只部署模型结构。作为一种替代方法，您可以使用 MDSModelDeploy 工具来创建和部署只包含模型对象的包，或创建和部署同时包含模型对象和数据的包。该工具位于 Program Files\Microsoft SQL Server\110\Master Data Services\Configuration 文件夹中。

注意 不能重用使用 SQL Server 2008 MDS 创建的包。只能将 SQL Server 2012 包部署到 SQL Server 2012 MDS 实例。

此工具的可执行文件使用以下语法：

MDSModelDeploy <命令> [ <选项> ]

点击这里查看代码为图像

您可以使用此工具运行以下命令：

• listservices 查看所有服务实例的列表。

• listmodels 查看所有模型的列表。

• listversions 查看指定模型的所有版本的列表。

• createpackage 创建指定模型的包。

• deployclone 创建指定模型的副本，保留名称和标识符。该模型不能存在于目标服务实例中。

• deploynew 创建新模型。MDS 为所有模型对象创建新的标识符。

• deployupdate 部署模型并更新模型版本。此选项要求您使用包含模型的包，该模型具有与目标模型相同的名称和标识符。

• help 查看命令的用法、选项和示例。例如，键入以下命令来了解如何使用deploynew命令：MDSModelDeploy help deploynew。

为帮助您了解如何使用 MDS，我们提供了几个包含模型和数据的示例包。要将 Product 包部署到 MDS1 Web 服务实例，请在命令提示符窗口键入以下命令：

MDSModelDeploy deploynew -package ..\Samples\Packages\product_en.pkg -model Product -service MDS1

点击这里查看代码为图像

注意 要使用此实用工具执行命令，您必须具有访问“系统管理”功能区域的权限且必须以管理员身份打开命令提示符窗口。

在部署期间，MDS 首先创建模型对象，然后创建业务规则和订阅视图。最后 MDS 使用主数据填充模型。如果在部署新模型或克隆的模型期间这些步骤中的任何一个步骤失败，MDS 将删除模型。如果您正在更新模型，MDS 保留以前成功完成的步骤中的更改，除非在最后一步失败。在那种情况下，MDS 尽可能更新主数据成员而不是使整个步骤失败并回滚。

注意 部署模型后，您必须手动更新用户定义的元数据、文件属性以及用户和组权限。

MDS Excel 外接程序

SQL Server 2012 中 MDS 应用最广的一个新增功能是提供新的用户界面选项，允许数据专员和管理员在 Microsoft Excel 内管理主数据。在安装 MDS Excel 外接程序后，数据专员可以使用熟悉的 Excel 环境检索数据和进行更改。管理员还可以使用此外接程序创建新的模型对象（如实体）并将数据加载到 MDS。

安装 MDS 外接程序

默认情况下，主数据管理器的主页提供一个指向 Microsoft 网站上 MDS 外接程序下载页的链接。在下载页上，选择与 Excel 安装匹配的语言和版本（32 位或 64 位）。打开下载的 MSI 文件以启动安装向导，然后按照提示接受许可协议并确认安装。安装完成后，您可以打开 Excel 查看功能区中新的“主数据”选项卡，如图 8-11 中所示。

图 8-11  Excel 功能区中的“主数据”选项卡

注意 该外接程序可与 Excel 2007 或 Excel 2010 配合工作。

主数据管理

MDS 外接程序可以执行主要的主数据管理任务。连接到 MDS 后，可以从 MDS 将数据加载到工作表以供引用或进行成批添加或更改。还可以使用 Data Quality Services 集成应用业务规则和解决验证问题，检查重复项，然后将修改后的数据重新发布到 MDS。

连接

在将 MDS 数据加载到工作表之前，您必须创建到 MDS 数据库的连接。如果打开以前加载了数据的工作表，在您刷新数据或发布数据时，MDS外接程序自动连接到 MDS。要在 MDS Excel 外接程序中创建连接，请按照下列步骤进行操作：

1. 在功能区的“主数据”选项卡上，单击“连接”按钮下的箭头，然后单击“管理连接”。

2. 在“管理连接”对话框中，单击“创建新连接”链接。

3. 在“添加新连接”对话框中，键入连接的说明。当您单击“连接”按钮下的箭头时，将显示此说明。

4. 在“MDS 服务器地址”框中，键入用于打开主数据管理器 Web 应用程序的 URL（如http://myserver/mds），然后单击“确定”按钮。该连接显示在“管理连接”对话框的“现有连接”部分。

5. 单击“测试”按钮以测试连接，然后单击“确定”按钮以关闭确认连接或显示错误的对话框。

6. 单击“连接”按钮。

7. 在“主数据资源管理器”窗格中，从相应的下拉列表中选择模型和版本，如下所示：

数据检索

将数据从 MDS 加载到工作表之前，您可以筛选数据。即使不筛选数据，系统对可以加载的数据量也有限制。您可以定期更新工作表中的数据以从 MDS 检索最近的更新内容。

筛选数据 如果您不想将 MDS 的所有实体成员加载到电子表格（这是一个非常耗时的任务），可以选择属性然后应用筛选器，尽量减少从 MDS 检索的数据量。您可以选择专注于所选属性，以减少要检索的列数。另一个选择是使用筛选条件来消除成员。

要从 MDS 筛选和检索叶数据，请按照下列步骤进行操作：

1. 在“主数据资源管理器”窗格中，选择要加载到电子表格的实体。

2. 在功能区的“主数据”选项卡上，单击“筛选器”按钮。

3. 在“筛选器”对话框中，通过选择属性类型、显式层次结构（如果您选择“合并”属性类型）、属性组和单个属性来选择要加载的列。

提示 您可以使用属性列表右侧的向上和向下箭头移动每个所选属性，以更改属性的顺序。

4. 接下来，通过单击“添加”按钮，然后选择一个属性、筛选运算符和筛选条件来选择要加载的行。您可以重复此步骤以继续添加筛选条件。

5. 单击“更新摘要”按钮以查看筛选后的行数和列数，如下所示：

6. 在“筛选器”对话框中，单击“加载”按钮。数据将加载到当前的电子表格，如下所示：

加载数据 在加载前筛选数据是可选的。您可以通过单击功能区中的“加载”或“刷新”按钮来加载实体的所有成员。如果多于 100,000 行或 100 列，会显示警告，但是您可以增加或减小这些值，或通过单击功能区中的“设置”按钮并更改“设置”对话框的“数据”页上的属性来禁用警告。如果实体很大，外接程序会自动将检索的数据限制为前一百万个成员。此外，如果列是基于域的属性，外接程序只检索前 1000 个值。

刷新数据 将 MDS 数据加载到工作表后，可以通过从源而非 MDS 添加数据列或包含公式的列来更新同一工作表。当您要刷新 MDS 数据且不丢失添加的数据时，请单击功能区中的“加载”或“刷新”按钮。

刷新过程会修改工作表的内容。已删除的成员将消失，新成员则用绿色突出显示在表的底部。并且将更新属性值以匹配 MDS 中存储的值，但单元不会更改颜色来标识新值。

警告 如果您添加新成员或更改属性值，必须在刷新数据前发布这些更改内容。否则，您的更改内容将会丢失。对 MDS 数据的单元注释会被删除，如果刷新时向工作表添加了新成员，可能替换 MDS 数据下面的行中的非 MDS 数据。

查看事务和批注 您可以通过右键单击成员的行并选择上下文菜单中的“查看事务”来查看任意成员的事务。要查看批注或添加事务的批注，请在“查看事务”对话框中选择该事务行，如图 8-12 中所示。

图 8-12  成员的事务和批注

数据发布

如果在工作表中更改了 MDS 数据，如更改属性值、添加新成员或删除成员，您可以将更改内容发布到 MDS 以供其他用户使用。您所作的每个更改将作为事务保存到 MDS，并且可以利用批注选项记录更改的原因。不过删除操作除外，尽管删除会生成事务，但是不能添加批注。

单击“发布”按钮时，将显示“发布并添加批注”对话框（除非您在“设置”中禁用它）。您可以为所有更改提供一个批注，也可以为每个更改提供单独的批注，如图 8-13 中所示。批注最多包含 500 个字符。

警告 在发布期间将删除对 MDS 数据的单元批注。成员代码值的更改不会作为事务保存，致使该成员以前的所有事务都无法访问。

图 8-13  为已发布的数据更改添加批注

在发布过程中，MDS 将验证所做的更改。首先，MDS 将业务规则应用到数据。接着，MDS 确认属性值的有效性，包括长度和数据类型。如果成员通过验证，MDS 数据库将使用更改内容进行更新。否则，无效数据在工作表中用红色突出显示，并在 $InputStatus$ 列中显示错误说明。您可以通过单击功能区中的“应用规则”按钮，在发布更改之前应用业务规则。

建模任务

MDS Excel 外接程序不仅仅限于数据专员使用。如果您是管理员，也可以使用此外接程序来创建实体和添加属性。但是，您必须首先使用主数据管理器来创建模型，然后使用该外接程序继续将实体添加到模型。

实体和属性

在将实体添加到 MDS 之前，需要在工作表中创建数据。数据必须包含标题行和至少一行数据。每行应至少包含一个“名称”列。如果包含“代码”列，每行的列值必须是唯一的。您可以添加其他列来创建实体的属性，但是不需要提供它们的值。如果这样做了，可以使用文本、数值或数据值，但是不能使用公式或时间值。

要在 MDS 中创建新实体，请按照下列步骤进行操作：

1. 选择要加载到新实体的标题和数据行中的所有单元。

2. 单击功能区中的“创建实体”按钮。

3. 在“创建实体”对话框中，确保范围只包含您要加载的数据且不清除“我的数据带有标题”复选框。

4. 从相应的下拉列表中选择模型和版本，并在“新实体名称”框中提供名称。

5. 在“代码”下拉列表中，选择包含实体成员唯一值的列或选择“自动生成代码”选项。

6. 在“名称”下拉列表中，选择包含成员名称的列（如下所示），然后单击“确定”。外接程序将在 MDS 数据库中创建新实体并验证数据。

注意 在创建实体后，您可能需要更正属性的数据类型或长度。为此，请单击属性列中的任意单元，然后单击功能区中的“特性属性”按钮。您可以根据需要在“特性属性”对话框中进行更改，但是不能更改“名称”或“代码”列的数据类型或长度。

基于域的属性

如果要将现有实体的列值限制为一组特定值，可以从工作表中的值或现有实体创建一个基于域的属性。要创建基于域的属性，请按照下列步骤进行操作：

1. 将实体加载到工作表，然后单击要更改为基于域的属性的列中的一个单元。

2. 单击功能区中的“特性属性”按钮。

3. 在“特性属性”对话框的“属性类型”下拉列表中，选择“约束列表(基于域)”。

4. 从“用以下位置的值填充属性”下拉列表中选择一个选项。您可以选择“所选列”以基于所选列中的值创建新实体（如下所示），或选择一个实体以使用该实体的值。

5. 单击“确定”。该列现在允许您从值列表中选择值。您可以通过以下方法来更改列表中的可用值：将属性所基于的实体加载到单独的工作表，通过添加新成员或更新值来进行更改，然后将更改发布到 MDS。

快捷查询文件

您可以使用快捷查询文件轻松加载频繁访问的数据。此文件包含有关到 MDS 数据库的连接、包含 MDS 数据的模型和版本、要加载的实体、要应用的筛选器和列顺序的信息。将 MDS 数据加载到工作表后，您通过单击功能区中的“保存查询”按钮并选择菜单中的“另存为查询”来创建快捷查询文件。在以后要使用时，打开一个空白工作表，单击“保存查询”按钮，然后从显示的列表中选择快捷查询文件。

您还可以使用快捷查询文件来与其他用户共享最新的 MDS 数据，而不用通过电子邮件发送工作表。只要在计算机上安装了 Microsoft Outlook 2010 或更高版本，您就可以通过电子邮件发送快捷查询文件。首先将 MDS 数据加载到工作表，然后单击功能区中的“发送查询”按钮以创建一封附加了快捷查询文件的电子邮件。只要电子邮件的收件人安装了外接程序，就可以双击该文件以打开它。

数据质量匹配

在使用外接程序将新成员添加到实体前，可以在工作表中准备数据并将它与 MDS 合并以进行比较。然后您可以使用 Data Quality Services (DQS) 识别重复项。匹配过程会添加详细信息列，其中显示匹配的分数，您可以通过该分数决定将哪些数据发布到 MDS。

正如我们在第 7 章“Data Quality Services”中所述，您必须在 Master Data Services 配置管理器中启用 DQS 集成并在知识库中创建匹配策略。此外，MDS 数据库和 DQS_MAIN 数据库必须存在于同一 SQL Server 实例中。

数据质量匹配过程的第一步是将两个工作表中的数据合并到单个工作表。第一个工作表必须包含从 MDS 加载的数据。第二个工作表必须包含一个标题行以及一个或多个详细信息行。要合并数据，请按照下列步骤进行操作：

1. 在第一个工作表上，单击功能区中的“组合数据”按钮。

2. 在“组合数据”对话框中，单击“要与 MDS 数据组合的范围”文本框旁边的图标。

3. 单击第二个工作表，突出显示要与 MDS 数据合并的标题和详细信息行。

4. 在“组合数据”对话框中，单击“要与 MDS 数据组合的范围”框右侧的图标。

5. 导航到第二个工作表，突出显示标题行和详细信息行，然后单击折叠的“组合数据”对话框中的范围旁边的图标。

6. 在展开的“组合数据”对话框的“相应列”下拉列表中，从第二个工作表中选择对应于要显示在其左边的实体列的列，如下所示：

7. 单击“组合”按钮。第二个工作表中的行显示在第一个工作表中现有行的下面，“源”列显示该行数据是来自 MDS 还是外部源，如下所示：

8. 单击功能区中的“匹配数据”按钮。

9. 在“匹配数据”对话框中，从“DQS 知识库”下拉列表中选择一个知识库，并将工作表列映射到对话框中所列的每个域。

注意 如果您不想使用前面屏幕快照中所示的自定义知识库，可以使用默认知识库“DQS 数据”。在该示例中，您在该对话框中为要用于匹配的每一列都添加一行，然后分配一个权重值。所有行的权重值之和必须等于 100。

10. 单击“确定”，然后单击功能区中的“显示详细信息”按钮以查看包含匹配详细信息的列。“源”列指示数据透视记录（由 PIVOT_MARK 列中的数据透视指示）与匹配记录的相似性。在将更改和新增内容发布到 MDS 前，您可以使用此信息消除工作表中的记录。

其他更改

到目前为止，在本章中我们重点讲述了 MDS 中提供的新功能。但是，还需要提及一些新增内容和更改内容。SQL Server 2012 为 SharePoint 集成提供了一些新功能，它仍然保留了一些可以在 SQL Server 2008 R2 版本使用但是不推荐的功能。还有一些功能已不再提供，在本节中，我们将了解这些功能更改并介绍适用的替代功能。

SharePoint 集成

可以使用两种方法将 MDS 与 SharePoint 集成。首先，将主数据管理器网站添加到 SharePoint 页时，可以添加&hosted=true作为查询参数来减小所需的显示空间。此查询参数将删除页眉、菜单栏和页底部的填充区域。其次，可以将快捷查询文件保存到 SharePoint 文档库，以向其他用户提供引用数据的列表。

元数据

“元数据”模型继续在主数据管理器中显示，但不推荐使用它。Microsoft 建议不要使用此功能，因为该功能将在 SQL Server 的未来版本中删除。用户不能创建“元数据”模型的版本，而且不能在“资源管理器”功能区域中查看元数据。

大容量更新和导出

更改主数据时，一次只能更改一个记录，这很费事。在以前版本的 MDS 中，您可以同时更新多个成员的属性值，但是 SQL Server 2012 中不再提供这样的功能。不过，您可以使用临时过程将新值加载到 stg.name_Leaf 表，如我们在本章开头的“集成管理”一节中所述。作为一种替代方法，您可以使用 MDS 外接程序将实体加载到 Excel 工作表（如本章的“主数据管理”一节中所述），使用复制和粘贴功能成批更新属性值，然后将结果发布到 MDS。

在 MDS 中存储主数据的目的在于可以出于其他目的访问此数据。在使用以前版本的 MDS 时，您可以使用“成员信息”页上的“导出至 Excel”按钮，但是在 SQL Server 2012 中不提供此按钮。如果需要 Excel 中的 MDS 数据，可以使用 MDS 外接程序将实体成员从 MDS 加载到工作表，如本章的“数据检索”一节中所述。

事务

MDS 使用事务记录用户对主数据所作的每个更改。在以前的版本中，用户可以在“资源管理器”功能区域中查看事务并可以将自己的事务还原为以前的值（后者为可选项）。现在只有管理员可以在“版本管理”功能区域中还原事务。

MDS 允许您为事务添加批注。在 SQL Server 2008 R2 中，MDS 将批注存储为事务，并通过还原事务来删除批注。但是现在，批注在 SQL Server 2012 中是永久保存的。虽然您可以继续将批注与事务关联，但是 MDS 将单独存储批注，不允许您删除它。

Windows PowerShell

在以前版本的 MDS 中，您可以使用 PowerShell cmdlet 来管理 MDS。系统提供一个 cmdlet 用于创建数据库，另一个 cmdlet 用于配置 MDS 的设置，其他 cmdlet 用于检索有关您的 MDS 环境的信息。MDS 的当前版本中不提供这些 cmdlet。

第 9 章
Analysis Services 和 PowerPivot

在 SQL Server 2005 和 SQL Server 2008 中，只有一种可用的 SQL Server Analysis Services (SSAS) 模式。随后在 SQL Server 2008 R2 中，VertiPaq 模式作为 PowerPivot for SharePoint 引擎闪亮登场。SQL Server 2012 沿用了这两种服务器模式，但对它们进行了一些改进，现在您还可以选择在表格模式中部署 Analysis Services 实例。此外，Microsoft SQL Server 2012 PowerPivot for Excel 推出了一些新功能，扩展了它所支持的分析类型。

Analysis Services

在部署 Analysis Services 实例之前，您必须决定要支持的功能的类型并安装相应的服务器模式。在本节中，我们将比较三种服务器模式、解释在启动新的 Analysis Services 项目时可供选择的各种 Analysis Services 模板，并介绍新增的表格模式的组件。此外，我们还将了解本版本提供的用于管理服务器的若干新选项。最后，我们将讨论当前版本在可编程性方面的增强功能。

服务器模式

在 SQL Server 2012 中，Analysis Services 实例可以在以下服务器模式之一下运行：多维、表格或 PowerPivot for SharePoint。每种服务器模式使用不同的存储结构、内存体系结构和引擎来支持不同类型的数据库。多维模式使用 SQL Server 2005 和更高版本中的 Analysis Services 引擎。表格模式和 PowerPivot for SharePoint 模式均使用 SQL Server 2008 R2 中引入的 VertiPaq 引擎，该引擎在运行时压缩数据以便存储到内存中。但是，表格模式不像 PowerPivot for SharePoint 那样依赖 SharePoint。

每种服务器模式都支持不同的一组数据源、工具、语言和安全功能。表 9-1 按服务器模式对这些功能进行了比较。

表 9-1  比较不同服务器模式支持的各种数据源、工具、语言和安全功能

功能

多维

表格

PowerPivot for SharePoint

数据源

关系数据库

关系数据库
Analysis Services
Reporting Services 报表
Azure DataMarket 数据集
数据馈送
Excel 文件
文本文件

关系数据库
Analysis Services
Reporting Services 报表
Azure DataMarket 数据集
数据馈送
Excel 文件
文本文件

开发工具

SQL Server Data Tools

SQL Server Data Tools

PowerPivot for Excel

管理工具

SQL Server Management Studio

SQL Server Management Studio

SharePoint 管理中心 PowerPivot 配置工具

报告和分析工具

报表生成器
报表生成器
Excel 数据透视表
PerformancePoint 仪表板

报表生成器
报表生成器
Excel 数据透视表
PerformancePoint 仪表板 Power View

报表生成器
报表生成器
Excel 数据透视表
PerformancePoint 仪表板 Power View

应用程序编程接口

AMO AMOMD.NET

AMO AMOMD.NET

不支持

查询和表达式语言

MDX（用于计算和查询） DMX（用于数据挖掘查询）

DAX（用于计算和查询） MDX（用于查询）

DAX（用于计算和查询） MDX（用于查询）

安全性

单元级别的安全性 SSAS 中基于角色的权限

行级安全性 SSAS 中基于角色的权限

使用 SharePoint 权限的文件级别安全性

点击这里查看表为图像

您必须考虑的另一个因素是用来满足您用户的报告和分析业务要求的一系列模型设计功能。表 9-2 显示了每种服务器模式支持的模型设计功能。

图 9-2  比较不同服务器模式的设计功能

模型设计功能

多维

表格

PowerPivot for SharePoint

操作

✔

聚合

✔

计算度量值

✔.

✔

✔

自定义程序集

✔

自定义汇总

✔

非重复计数

✔

✔

✔

钻取

✔

✔

层次结构

✔

✔

✔

关键绩效指标

✔

✔

✔

链接对象

✔

✔（仅限链接表）

多对多关系

✔

父子层次结构

✔

✔

✔

分区

✔

✔

透视

✔

✔

✔

半累加性度量值

✔

✔

✔

转换

✔

写回

✔

点击这里查看表为图像

服务器模式是在安装 Analysis Services 期间指定的。在 SQL Server 安装程序的“设置角色”页上，为多维或表格模式选择“SQL Server 功能安装”选项，为 PowerPivot for SharePoint 模式选择“SQL Server PowerPivot For SharePoint”选项。如果您选择“SQL Server 功能安装”选项，则需要在“Analysis Services 配置”页上指定要安装的服务器模式。在该页上，您必须选择“多维和数据挖掘模式”选项或“表格模式”选项。完成安装后，您不能更改现有实例的服务器模式。

注意 同一服务器上可同时存在分别以不同的服务器模式运行的多个 Analysis Services 实例。

Analysis Services项目

SQL Server Data Tools (SSDT) 是用于多维模型、数据挖掘模型和表格模型的模型开发工具。就像操作任何商业智能项目一样，您需要在 SSDT 中打开“文件”菜单，指向“新建”，然后再选择“项目”以显示“新建项目”对话框。在该对话框中的“已安装的模板”列表中，您可以从多个 Analysis Services 模板中进行选择，如图 9-1 所示。

图 9-1  显示 Analysis Services 模板的“新建项目”对话框

Analysis Services 项目有五个可用的模板：

• Analysis Services 多维和数据挖掘项目 您可以使用此模板为 Analysis Services 开发传统类型的项目（现在称为多维模型），这是唯一一个支持 Analysis Services 数据挖掘功能的模型。

• 从服务器导入多维和数据挖掘 当服务器上存在多维模型，并且您想要使用相同的模型设计创建新项目时，可以使用此模板。

• Analysis Services 表格项目 可使用此模板来创建新的表格模型。可以将此模型部署到仅以表格模式运行的 Analysis Services 实例。

• 从 PowerPivot 导入 可使用此模板从部署到 Analysis Services 的 PowerPivot for SharePoint 实例的工作簿中导入模型。您可以使用表格建模支持的功能扩展该模型，然后将此模型部署到仅以表格模式运行的 Analysis Services 实例。

• 从服务器导入表格 当服务器上存在表格模型，并且您想要使用相同的模型设计创建新项目时，可以使用此模板。

表格建模

表格模型是 Analysis Services 在 SQL Server 2012 中支持的一种新型数据库结构。创建表格项目时，SSDT 会向项目添加一个 Model.bim 文件，并在您指定的 Analysis Services 实例上创建一个工作区数据库。随后，在您通过导入数据和设计对象（对数据进行组织、增强和保护）来开发模型时，SSDT 将此工作区数据库用作数据的临时存储区。

提示 您可以使用http://msdn.microsoft.com/en-us/library/hh231691(SQL.110).aspx上的教程学习如何使用表格模型项目。

工作区数据库

在 SSDT 中使用表格模型项目时，相应的工作区数据库驻留在内存中。此工作区数据库存储着您使用表导入向导添加到项目中的数据。每当您在模型设计器的关系图视图或数据视图中查看数据时，SSDT 就会从工作区数据库中检索数据。

在解决方案资源管理器中选择 Model.bim 文件后，您可以使用“属性”窗口访问以下工作区数据库属性：

• 数据备份 默认设置为“不备份到磁盘”。您可以将该设置改为“备份到磁盘”，以便在每次保存 Model.bim 文件时创建工作区数据库的备份，即 ABF 文件。但是，如果您使用远程 Analysis Services 实例承载工作区数据库，则不能使用“备份到磁盘”选项。

• 工作区数据库 此属性显示 Analysis Services 为工作区数据库指定的名称。无法更改此值。

• 工作区保持期 Analysis Services 使用此值确定在 SSDT 中关闭项目时是否在内存中保留工作区数据库。默认选项“从内存中卸载”可在磁盘上保留该数据库但从内存中删除该数据库。为了在下次打开该项目时加快加载速度，可以选择“保留在内存中”选项。第三个选项“删除工作区”将从内存和磁盘中同时删除工作区数据库，该选项的重新加载时间最长，因为 Analysis Services 需要额外的时间将数据导入新的工作区数据库。通过打开“工具”菜单，然后选择“选项”，再打开“分析服务器”设置中的“数据建模”页，可以更改此设置的默认值。

• 工作区服务器 此属性指定用于承载工作区数据库的服务器。为获得最佳性能，应使用 Analysis Services 的本地实例。

注意 您必须是承载工作区数据库的 Analysis Services 实例的管理员。

表导入向导

使用表导入向导可以从一个或多个数据源导入数据。除了提供连接信息，如关系数据源的服务器名称和数据库名称，您还必须完成表导入向导的“模拟信息”页。Analysis Services 使用您在此页上指定的凭据来导入和处理数据。对于凭据，您可以提供 Windows 登录名和密码，也可以指定 Analysis Services 服务帐户。

表导入向导中的下一步操作是指定如何检索数据。例如，如果您使用的是关系数据源，则可以从表和视图的列表中进行选择或提供查询。无论使用哪种数据源，您都可以选择在将数据导入模型之前对其进行筛选。一种方法就是通过清除列标题中的复选框来清除整列。还有一种方法就是，通过单击列名右侧的箭头，然后清除文本值对应的一个或多个复选框，来清除行（如图 9-2 所示）。

图 9-2  选择要在导入过程中包括的行

另外，您也可以通过使用适用于列数据类型的“文本筛选器”或“数字筛选器”选项，创建更有针对性的筛选器。例如，您可以创建一个筛选器，仅导入等于特定值或包含指定字符串的值。

注意 尽管单个表可以导入的行数没有上限，但是表中的任何列包含的非重复值不得超过 20 亿个。不过，只有尽可能地减少行数，模型才能实现最佳的查询性能。

表格模型设计器

将数据导入模型后，模型设计器将在工作区中显示这些数据，如图 9-3 所示。如果您确定需要对列重命名，则可以双击列名并键入一个新名称。例如，您可以在字词之间添加空格，使列名更便于用户的理解。完成键入后，按 Enter 保存更改。

图 9-3  有多个选项卡包含数据的模型

从关系数据源导入数据时，导入过程会检测现有关系并将其添加到模型中。若要查看关系，请切换到关系图视图（显示在图 9-4 中）。可通过单击工作区右下角的“关系图”按钮来切换，也可通过打开“模型”菜单，指向“模型视图”并选择“关系图视图”来切换。当您指向连接两个表的线条时，模型设计器会突出显示每个表中的相关列。

图 9-4  关系图视图中的模型，突出显示两表之间存在关系的列

关系

您可以通过单击一个表中的列并将光标拖到第二个表中的相应列来添加新的关系。因为模型设计自动检测主表和相关的查找表，所以您不需要以特定顺序选择表。如果您愿意，可以打开“表”菜单并单击“管理关系”，在一个对话框中查看所有关系，如图 9-5 所示。您可以使用此对话框添加新的关系，或编辑或删除现有关系。

图 9-5  显示模型中所有关系的“管理关系”对话框

注意 您只能创建一对一关系或一对多关系。

您也可以在两个表之间创建多个关系，但一次只能有一个关系处于活动状态。默认情况下，计算会使用活动的关系，除非您使用 USERELATIONSHIP() 函数覆盖此行为（本章后面的“DAX”一节将对此进行解释）。

计算列

计算列是您通过使用数据分析表达式 (DAX) 公式派生的数据列。例如，可以将两个列中的值连接到单个列中，如图 9-6 所示。若要创建计算列，您必须切换到数据视图。您可以右键单击现有列，然后选择“插入列”，也可以单击“列”菜单上的“添加列”。在公式栏中，键入一个有效的 DAX 公式，然后按 Enter。模型设计器将为表中的每一行计算并显示列值。

图 9-6  计算的列值和相应的 DAX 公式

度量值

表格模型在行级别对计算列求值并将结果存储在表格模型中，但是表格模型却在数据透视表的行、列、筛选器和切片器上下文中将度量值计算为聚合值。若要添加新的度量值，请单击计算区域中的任意单元，该区域随后显示为表数据下方的网格。然后，在公式栏中键入 DAX 公式，并按 Enter 以添加新的度量值，如图 9-7 所示。您可以覆盖默认度量值的名称，如 Measure1，只需在公式栏中用新值替换该名称即可。

图 9-7  显示三个度量值的计算区域

若要创建仅聚合行值的度量值，请单击列标题，然后单击工具栏中的“自动求和”按钮。例如，如果您选择 ProductKey 列的计数，度量值网格将显示具有以下公式的新度量值：

ProductKey 的计数:=COUNTA([ProductKey])。

关键绩效指标

关键绩效指标 (KPI) 是一种特殊类型的度量值，您可以使用这些指标来衡量目标的进展情况。首先，您需要在表的计算区域中创建基础度量值。然后右键单击该度量值并选择“创建 KPI”以打开“关键绩效指标 (KPI)”对话框，如图 9-8 所示。下一步，需要定义代表目标值或 KPI 目标的度量值或绝对值。状态阈值是目标每个级别的进展的边界值，您可以根据需要进行调整。Analysis Services 会将基础度量值与阈值加以比较，确定在显示 KPI 状态时使用的图标。

图 9-8  关键绩效指标的定义

层次结构

层次结构使用逻辑关系允许用户从一个级别导航到下一个级别，从而帮助分析不同详细级别的数据。在关系图视图中，右键单击您要设置为父级的列，然后选择“创建层次结构”；或单击将光标悬停在列标题上方时出现的“创建层次结构”按钮。键入该层次结构的名称，然后将列拖至新的层次结构，如图 9-9 所示。只能将同一个表中的列添加到层次结构中。如有必要，可使用包含 RELATED() 函数的 DAX 公式创建一个计算列，以便在层次结构中引用相关表中的列。

图 9-9  模型的关系图视图中的层次结构

透视

当模型中有许多对象时，您可以通过创建透视来显示模型对象的子集，以便用户可以更轻松地找到他们需要的对象。从“模型”菜单中选择“透视”可查看现有透视或添加新的透视，如图 9-10 所示。定义透视时，可以选择要包括的表、列、度量值、KPI 和层次结构。

图 9-10  透视定义

分区

表格模型中的每个表都至少有一个分区；但是，您也可以将一个表划分为多个分区，并分别管理每个分区的重新处理过程。例如，您可能经常需要重新处理包含当前数据的分区，但不需要重新处理包含历史数据的分区。若要打开分区管理器并在其中创建和配置分区，请打开“表”菜单并选择“分区”。单击“查询编辑器”按钮以查看 SQL 语句并追加一个 WHERE 子句，如图 9-11 所示。

图 9-11  向 SQL 语句添加 WHERE 子句以创建分区

例如，如果您想要为月和年（例如，March 2004）创建一个分区，WHERE 子句将如下所示：

WHERE
(([OrderDate] >= N’2004-03-01 00:00:00’) AND
([OrderDate] < N’2004-04-01 00:00:00’))

点击这里查看代码为图像

创建所有分区后，需要在数据视图中打开表，打开“模型”菜单并指向“处理”。然后，您要决定是选择“处理分区”有选择地刷新各个分区中的数据，还是选择“处理表”来刷新所有分区中的数据。将模型部署到 Analysis Services 后，您可以使用脚本来管理各个分区的处理过程。

角色

表格模型默认是安全的。您必须创建 Analysis Services 数据库角色，并将 Windows 用户或组分配到角色以便授予用户对模型的访问权限。此外，您可以向角色添加下列权限之一，以便角色成员可以执行相应的操作：

• 无 成员不能以任何方式使用该模型。

• 读取 成员只能查询数据。

• 读取和处理 成员可以查询数据并执行处理操作。但是，该成员不能在 SQL Server Management Studio (SSMS) 中查看模型数据库，也不能对该数据库进行更改。

• 处理 成员仅能处理数据，但无权查询数据或在 SSMS 中查看模型数据库。

• 管理员 成员具有完全的权限，可以查询数据、执行处理操作、在 SSMS 中查看模型数据库并对模型进行更改。

若要创建新角色，请单击“模型”菜单上的“角色”，打开“角色管理器”对话框。键入角色的名称，选择适用的权限，并向该角色添加成员。如果用户属于具有不同权限的多个角色，Analysis Services 会综合考虑这些权限，只要发现冲突就会使用限制最少的权限。例如，如果一个角色设置了“无”权限而另一个角色具有“读取”权限，则该角色的成员将具有“读取”权限。

注意 添加角色的另一种方式是：在将模型部署到 Analysis Services 之后在 SSMS 中添加角色。

若要进一步限定具有“读取”或“读取和处理”权限的角色成员的安全性，您可以创建行级别筛选器。每个行筛选器都是一个 DAX 表达式，它的计算结果为 TRUE 或 FALSE，用来定义用户可以查看的表行。例如，您可以创建一个使用表达式 =Category[EnglishProductCategoryName]=”Bikes”的筛选器，只允许角色查看与 Bikes 相关的数据。如果要防止角色访问表中的任何行，请使用表达式 =FALSE()。

注意 当您在 DirectQuery 模式中部署表格模型时，行筛选器不起作用。我们将在本章下文中解释 DirectQuery 模式。

在 Excel中分析

部署表格模型之前，可以通过使用“在 Excel 中分析”功能测试用户体验。使用“在 Excel 中分析”功能时，SSDT 将打开 Excel（必须安装在同一台计算机上），创建与模型工作区的数据源连接，并将数据透视表添加到工作表中。在“模型”菜单上打开此项时，将显示“在 Excel 中分析”对话框，并提示您选择用户或角色以提供数据源连接的安全上下文。您还必须选择一种透视：默认透视（其中包括所有模型对象）或自定义透视，如图 9-12 所示。

图 9-12  选择安全上下文和透视以便在 Excel 中测试模型

报表属性

如果您计划实现 Power View（将在第 10 章“Reporting Services”中介绍），可以访问每个表和列的“属性”窗口中的一组报表属性。您至少可以更改当前所选表或列的“隐藏”属性，控制用户能否查看报表字段列表中的对象。此外，您可以更改所选表或列的报表属性，以提升在开发 Power View 报表过程中的用户体验。

如果在模型设计器中选择某个表，则可以更改以下报表属性：

• 默认字段集 选择一组列和度量值，当用户选择报表字段列表中的当前表时，Power View 会将这些列和度量值添加到报表画布中。

• 默认图像 标识包含表中每行的图像的列。

• 默认标签 指定包含每行的显示名称的列。

• 保留唯一行 指示重复的值显示为唯一值还是单个值。

• 行标识符 指定包含唯一标识表中各行的值的列。

如果在模型设计器中选择某个列，则可以更改以下报表属性：

• 默认标签 指示该列是否包含每行的显示名称。您只能为表中的一列将此属性设置为 True。

• 图像 URL 指示该列是否包含指向 Web 上或 SharePoint 网站上的图像的 URL。Power View 使用该指示将文件检索为图像，而不是返回文本形式的 URL。

• 行标识符 指示该列是否包含每行的唯一标识符。您只能为表中的一列将此属性设置为 True。

• 表详细信息位置 设置当前列相对于默认字段集中其他列的序列顺序。

DirectQuery 模式

当模型的数据量太大而无法装入内存或是您希望查询返回最新数据时，可以为您的表格模型启用 DirectQuery 模式。在 DirectQuery 模式下，Analysis Services 将直接从源数据库（而不是存储在内存中缓存的数据）检索数据和聚合，从而响应客户端工具查询。尽管使用缓存可加快响应时间，但在有大量数据时，使用当前数据不断刷新缓存可能需要较长时间，反而延缓响应速度。若要启用 DirectQuery 模式，请在解决方案资源管理器中选择 Model.bim 文件，然后打开“属性”窗口，将 DirectQueryMode 属性从“关闭”（默认值）改为“打开”。

为模型启用 DirectQuery 模式后，一些设计功能不再可用。表 9-3 对内存中模式和 DirectQuery 模式中的可用功能进行了比较。

图 9-3  内存中模式与 DirectQuery 模式

功能

内存中

DirectQuery

数据源

关系数据库
Analysis Services

Reporting Services 报表
Azure DataMarket 数据集
数据馈送
Excel 文件
文本文件

SQL Server 2005 或更高版本

计算

度量值
KPI
计算列

度量值
KPI

DAX

完全正常工作

时间智能函数无效某些统计函数的求值方式不同

安全性

Analysis Services 角色

SQL Server 权限

客户端工具支持

SSMS
Power View
Excel

SSMS
Power View

点击这里查看表为图像

注意 如需更深入地了解从表格模型切换到 DirectQuery 模式的影响，请参阅
http://msdn.microsoft.com/zh-cn/library/hh230898(SQL.110).aspx。

部署

部署表格模型之前，您需要配置目标 Analysis Services 实例在表格模式下运行，并在项目属性中提供模型的名称，如图 9-13 所示。您还必须选择下列查询模式之一，以后可以在 SSMS 中根据需要更改该模式：

• DirectQuery 查询将仅使用关系数据源。

• DirectQuery 以及内存中 查询将使用关系数据源，除非客户端使用了另行指定的连接字符串。

• 内存中 查询将仅使用内存中缓存。

• 内存中以及 DirectQuery 查询将使用缓存，除非客户端使用了另行指定的连接字符串。

注意 在 DirectQuery 模式中开发模型的过程中，会导入少量用作示例的数据。工作区数据库以混合模式运行，在开发过程中对数据进行缓存。但是，在部署模型时，Analysis Services 使用您在部署属性中指定的“查询模式”值。

图 9-13  表格模型部署的项目属性

在配置项目属性之后需要部署模型，方法是使用“生成”菜单或在解决方案资源管理器中右键单击该项目，然后选择“部署”。部署之后，可以使用 SSMS 为表格模型数据库管理分区、配置安全性并执行备份和还原操作。具有适当权限的用户可以访问已部署的表格模型，作为 PowerPivot 工作簿或 Power View 报表的数据源。

多维模型存储

多维模型的开发过程与 SQL Server 2005 和更高版本中的步骤基本相同，只有一点不同之处。MOLAP 引擎现在对字符串数据使用一种新型存储，与以前版本的 Analysis Services 相比，这种存储的可伸缩性更强。具体来说，文件大小不再有最大 4 GB 的限制，但您必须配置维度使用新的存储模式。

这需要在 SSDT 中打开维度设计器，并在“属性”窗格中选择维度的父节点。在“属性”窗口的“高级”部分中，将“StringStoreCompatibilityLevel”改为“1100”。对于使用字符串作为非重复计数基础的非重复计数度量值，您也可以向相应的度量值组应用此设置。执行“处理全部”命令时，Analysis Services 会将数据加载到新的字符串存储区中。向数据库添加更多数据时，字符串存储文件将根据需要持续增大。不过，虽然取消了文件大小限制，但文件只能包含 40 亿个唯一字符串或 40 亿条记录，以先达到限值的为准。

服务器管理

SQL Server 2012 提供了一些可以帮助您管理服务器的功能。在此版本中，您可以更轻松地通过捕获事件或查询动态管理视图 (DMV) 收集用于性能监视和诊断用途的信息。此外，您可以通过配置服务器属性来支持非一致性内存访问 (NUMA) 体系结构或超过 64 个处理器。

事件跟踪

您现在可以使用 SQL Server 扩展事件框架（已在第 5 章“可编程性和超越关系增强功能”中进行了介绍）来捕获任何 Analysis Services 事件，用来替代使用 SQL Server Profiler 创建跟踪的方法。例如，请考虑这样一种情况：您要解决多维模式下运行的 Analysis Services 实例的查询性能问题。您可以通过执行 XML For Analysis (XMLA) 创建对象脚本，以便启用对特定事件（例如，查询子多维数据集、从聚合获取数据、从缓存获取数据、查询结束等事件）的跟踪。SQL Server 2012 还另外新增了一些多维事件：获取锁、释放锁、等待锁、死锁和锁超时。事件跟踪进程将它捕获的数据存储在文件中，并持续存储事件，直到您通过执行 XMLA 删除对象脚本禁用了事件跟踪。

您还可以利用以下事件来监视其他服务器模式：VertiPaq SE 查询开始、VertiPaq SE 查询结束、直接查询开始和直接查询结束等事件。此外，“资源使用情况”事件也是新增事件，适用于各种服务器模式。您可以使用它来捕获读取和写入的字节数 (KB) 和 CPU 的使用量。

注意 有关事件跟踪的详细信息，请访问 http://msdn.microsoft.com/zh-cn/library/gg492139(SQL.110).aspx。

XML for Analysis 架构行集

新架构行集不仅可用于浏览表格模型的元数据，还可用于监视 Analysis Services 服务器。通过使用 SSMS 中的动态管理视图，可以查询 VertiPaq 引擎和表格模型的下列架构行集：

• DISCOVER_CALC_DEPENDENCY 查找列、度量值和公式之间的依赖关系。

• DISCOVER_CSDL_METADATA 检索表格模型的概念架构定义语言 (CSDL)。（CSDL 在随后的“可编程性”部分中介绍。）

• DISCOVER_XEVENT_TRACE_DEFINITION 监视 SQL Server 扩展事件。

• DISCOVER_TRACES 使用新列“类型”按类别筛选跟踪。

• MDSCHEMA_HIERARCHIES 使用新列 Structure_Type 按“自然”、“非自然”或“未知”筛选层次结构。

注意 您可以在 http://msdn.microsoft.com/zh-cn/library/ms126221(v=sql.110).aspx和 http://msdn.microsoft.com/zh-cn/library/ms126062(v=sql.110).aspx上了解有关架构行集的更多信息。

体系结构的改进

您可以在具有 NUMA 体系结构和超过 64 个处理器的服务器上部署表格和多维 Analysis Services 实例。为此，您必须配置实例属性，指定实例使用的一个或多个处理器组：

• 线程池 可以将每个进程、IO 进程、查询、分析和 VertiPag 线程池分配给单独的处理器组。

• 关联掩码 可使用处理器组关联掩码来指示 Analysis Services 实例应在 Analysis Services 操作中包括还是排除处理器组中的某个处理器。

• 内存分配 您可以指定要分配给处理器组的内存范围。

可编程性

SQL Server 2012 中的 BI 语义模型 (BISM) 架构是 SQL Server 2005 中引入的统一维度模型 (UDM) 架构的后继架构。BISM 既支持使用表和关系的实体方法，也支持使用层次结构和聚合的多维方法。此版本扩展了分析管理对象 (AMO) 和 XMLA，可支持管理 BISM 模型。

注意 有关详细信息，请参阅“表格模型开发人员路线图”，网址为
http://technet.microsoft.com/zh-cn/library/gg492113(SQL.110).aspx。

如果您不想使用 SSMS 图形界面，或是想要自定义通过 AMO 或 XMLA 生成的应用程序或脚本，则可以使用 Windows PowerShell。在 Analysis Services 中，可以通过 cmdlet 在模型中导航对象或查询模型。您还可以执行管理功能，如重新启动服务、配置安全角色的成员、执行备份或还原操作，以及处理多维数据集维度或分区。

注意 您可以访问以下网址，了解关于在 Analysis Services 中使用 PowerShell 的更多信息：
http://msdn.microsoft.com/zh-cn/library/hh213141(SQL.110).aspx。

另一个新增的可编程性功能是概念架构定义语言 (CSDL) 扩展插件，用于向报表客户端提供表格模型定义。在收到客户端的请求后，Analysis Services 会以 XML 格式发送模型的实体定义。而客户端将使用此信息向用户显示可用于报告的字段、聚合和度量值，以及可用于对数据分组、排序和设置格式的选项。CSDL 中添加的用来支持表格模型的扩展插件包括：用于模型的新元素、用于实体的新属性和扩展，以及用于可视化和导航的属性。

注意 以下网站提供 CSDL 扩展插件的参考： http://msdn.microsoft.com/zh-cn/library/hh213142(SQL.110).aspx。

PowerPivot for Excel

PowerPivot for Excel 是一个外接程序形式的客户端应用程序，它将 SQL Server 技术融入到了 Excel 2010 中。更新版本的 PowerPivot for Excel 是 SQL Server 2012 版本的一个组成部分，其中包括若干小的改进，提高了可用性，令用户更加满意。此外，它还包括几个主要的新功能，可使 PowerPivot 模型与表格模型的结构保持一致。

安装和升级

PowerPivot for Excel 外接程序的安装简单明了，但它有两个前提条件。您必须首先安装 Excel 2010，然后安装 Visual Studio 2010 Tools for Office Runtime。如果您以前使用 SQL Server 2008 R2 PowerPivot for Excel，必须卸载它，因为该外接程序没有升级选项。完成这些步骤后，就可以安装 SQL Server 2012 PowerPivot for Excel 外接程序了。

注意 您可以从
http://www.microsoft.com/zh-cn/download/details.aspx?id=20479下载 Visual Studio 2010 Tools for
Office Runtime，从 http://www.microsoft.com/download/en/details.aspx?id=28150下载 PowerPivot for Excel 外接程序。

可用性

新的外接程序中增强了可用性，使得在 PowerPivot 模型开发过程中更容易执行某些任务。第一项值得注意的更改是在 PowerPivot 窗口功能区上的“主文件夹”选项卡中添加了按钮，如图 9-14 所示。在功能区最右侧的“视图”组中，“数据视图”按钮和“关系图视图”按钮允许您切换模型视图，就像在 SSDT 中对表格模型操作一样。还有一些按钮用来切换隐藏列和计算区域的显示。

图 9-14  PowerPivot 窗口中功能区上的“主文件夹”选项卡

“主文件夹”选项卡上另一个新增的按钮是“按列排序”按钮，使用该按钮可打开图 9-15 所示的对话框。现在，您可以依据同一表中另一列中的相关值控制某一列中的数据排序。

图 9-15  “按列排序”对话框

图 9-16 所示的“设计”选项卡现在在“列”组中包括“冻结”按钮和“宽度”按钮，当您查看 PowerPivot 模型中的数据时，这些按钮可帮助您管理界面。这些按钮位于以前版本的 PowerPivot for Excel 外接程序中的“主文件夹”选项卡上。

图 9-16  PowerPivot 窗口中功能区上的“设计”选项卡

此外还要注意“设计”选项卡上新增的“标记为日期表”按钮。打开包含日期的表，然后单击此按钮。随即显示一个对话框，提示您输入表中包含唯一日期时间值的列。然后，您可以创建使用时间智能函数的 DAX 表达式，不必执行以往 PowerPivot for Excel 版本中所需的所有步骤即可获得正确结果。向数据透视表添加日期列后，可以将高级日期筛选器选作行或列的筛选器，如图 9-17 所示。

图 9-17  可用于日期字段的高级筛选器

默认情况下，功能区中不显示“高级”选项卡。您必须单击功能区左上角的“文件”按钮并选择“切换到高级模式”命令才能显示这个新选项卡，如图 9-18 所示。您可以使用此选项卡添加或删除透视、显示/不显示隐式度量值、添加使用聚合函数的度量值，并设置报表属性。除“显示隐式度量值”之外，所有这些任务都类似于表格模型开发中的相应任务。通过“显示隐式度量值”按钮，您可以显示或者不显示在向 Excel 工作簿中的数据透视表值添加数值列时 PowerPivot for Excel 自动创建的度量值。

图 9-18  PowerPivot 窗口中功能区上的“高级”选项卡

您不仅可以添加数值列，作为聚合的数据透视表值，现在还可以向行或列添加数值列，作为非重复值。例如，您可以将 [Sales Amount] 列添加为一行和一个值，以查看每一金额的销售总额，如图 9-19 所示。

图 9-19  对行使用数值

此外，您会在此版本中发现以下有帮助的增强功能：

• 在 PowerPivot 窗口中，您可以为计算列配置数据类型。

• 在 PowerPivot 窗口中，您可以右键单击某列，然后选择“从客户端工具中隐藏”以防止用户访问该字段。该列仍然以灰色背景显示在 PowerPivot 窗口的“数据视图”中，但您可以通过单击功能区“主文件夹”选项卡上的“显示隐藏项”按钮切换该列在“数据视图”中的可见性。

• 在 Excel 窗口中，您为度量值指定的数字格式仍然保留。

• 您可以右键单击 Excel 窗口中的某个数值，然后从上下文菜单中选择“显示详细信息”命令以打开单独的工作表，其中列出包含选定值的各行。此功能不适用于简单聚合（如：求和或计数）之外的计算值。

• 在 PowerPivot 窗口中，您可以向表、度量值、KPI 标签、KPI 值、KPI 状态或 KPI 目标添加说明。该说明作为工具提示显示在 Excel 窗口的“PowerPivot 字段列表”中。

• “PowerPivot 字段列表”现在会在字段列表顶部显示每个表的层次结构，然后按字母顺序显示表中的其他所有字段。

模型增强功能

如果您使用过 SQL Server 2012 之前版本的 PowerPivot，那么您在 SSDT 中创建第一个表格模型后就会注意到建模过程中的许多步骤是相似的。现在您了解了更新的 PowerPivot for Excel 功能之后，您应注意到，表格模型功能与以前版本的 PowerPivot for Excel 功能之间的不同之处，现在已经不是很明显了。具体而言，以下设计功能现已在 PowerPivot 模型中提供：

• 表关系

• 层次结构

• 透视

• 用于设计度量值和 KPI 的计算区域

实际上，您可以通过在 SSDT 中利用表格模型以及在 Excel 中利用 PowerPivot 模型，创建相同的结构。虽然建模过程非常相似，但您只能将表格模型部署到 Analysis Services 表格模式实例，只能将PowerPivot 模型部署到 PowerPivot for SharePoint 实例。尽管如此，回想“Analysis Services 项目”一节，您仍可以通过导入 PowerPivot 模型来创建表格模型项目，但却没有相应的选项将表格模型项目导入 PowerPivot 模型。

DAX

DAX 是一种可以在创建表格模型和 PowerPivot 模型的计算列、度量值和 KPI 时使用的表达式语言。当前版本的 SQL Server 2012 扩展了 DAX，在其中新增了很多统计、信息、逻辑、筛选和数学方面的函数，如表 9-4 所示。

图 9-4  新增的 DAX 函数

函数类型

函数

说明

统计函数

ADDCOLUMNS()

返回追加有一个或多个计算列的表。

CROSSJOIN()

返回一个表，其中包含两个或更多表中的行的笛卡尔积。

DISTINCTCOUNT()

返回一列中非重复值的计数。

GENERATE()

返回一个表，其中包含第一个表与在第一个表的上下文中计算的第二个表的笛卡尔积。例如，如果第一个表包含国家地区，则可以根据第一个表生成各个国家地区排名前三位的产品的第二个表，然后生成将两表的结果组合起来的最终表。如果第一个表中的行在第二个表的结果中没有对应的行，则第一个表中的行不会出现在最终结果中。

GENERATEALL()

返回一个表，其中包含第一个表与在第一个表的上下文中计算的第二个表的笛卡尔积，这一点与 Generate() 函数相同。但是，如果第一个表中的行在第二个表的结果中没有对应的行，仍然会返回第一个表中的行，只是在对应于第二个表的列中显示 Null 值。

RANK.EQ()

返回指定值在值列表中的排名。

RANKX()

返回每一行的值在指定表中的排名。

ROW()

返回包含一个或多个名称/值列对的单个行，其中的值是您在该函数的参数中指定的表达式的计算结果。

STDEV.P()

返回表中列的标准偏差，其中，表代表整个总体。

STDEV.S()

返回表中列的标准偏差，其中，表代表样本总体。

STDEVX.P()

返回为表中每行计算的表达式的标准偏差，其中，表代表整个总体。

STDEVX.S()

返回为表中每行计算的表达式的标准偏差，其中，表代表样本总体。

SUMMARIZE()

返回基于“分组依据”列的聚合值表。

TOPN()

返回包含基于“order by”表达式的前 N 行的表。

VAR.P()

返回表中列的方差，其中，表代表整个总体。

VAR.S()

返回表中列的方差，其中，表代表样本总体。

VARX.P()

返回为表中每行计算的表达式的方差，其中，表代表整个总体。

VARX.S()

返回为表中每行计算的表达式的方差，其中，表代表样本总体。

信息函数

CONTAINS()

返回一个布尔值，该值指示表是否至少包含一个具有指定名称/值列对的行。

LOOKUPVALUE()

返回与名称/值列对中指定的条件匹配的列中的值。

PATH()

返回父子层次结构中指定标识符的所有祖先的标识符。

PATHCONTAINS()

返回一个布尔值，该值指示父子层次结构的指定路径中是否存在某个标识符。

PATHITEM()

返回与父子层次结构中的起始标识符相距指定距离处的祖先标识符。

PATHITEMREVERSE()

返回与父子层次结构中的最顶级标识符相距指定距离处的祖先标识符。

PATHLENGTH()

返回父子层次结构的路径中的标识符计数（包括起始标识符）。

逻辑函数

SWITCH()

根据可能条件的列表计算表达式，并返回与条件匹配的值。

筛选函数

ALLSELECTED()

在忽略行和列筛选器但保留其他所有筛选器的前提下计算表达式。

FILTERS()

返回当前筛选指定列的值。

HASONEFILTER()

返回一个布尔值，该值指示单个筛选器是否应用于指定列。

HASONEVALUE()

返回一个布尔值，该值指示指定列是否返回单个非重复值。

ISCROSSFILTERED()

返回一个布尔值，该值指示筛选器是应用于指定列还是同一个表或相关表中的某一列。

ISFILTERED()

返回一个布尔值，该值指示筛选器是否直接应用于指定列。

USERELATIONSHIP()

通过指定每个表中的相关列，使用其他关系覆盖默认关系。例如，可以不使用 Date 表与 FactResellerSales 中的 OrderDate 间的关系，而改用 ShippingDate 列。

数学函数

CURRENCY()

返回以货币数据类型表示的表达式。

点击这里查看表为图像

注意 您可以在 http://technet.microsoft.com/zh-cn/library/ee634822(SQL.110).aspx上了解有关这些函数的更多信息。

PowerPivot for SharePoint

对于 SQL Server 2012 中的 PowerPivot for SharePoint，最主要的变化是提供了更为简单直接的安装和配置过程，更广泛的服务器环境管理工具。这些变化有利于服务器更快启动和运行，并在使用量随时间增加时保持服务器平稳运行。

安装和配置

PowerPivot for SharePoint 在 SharePoint Server 2010 场内有许多依赖项，这对于正确安装和配置颇具挑战性。在安装 PowerPivot for SharePoint 之前，您必须安装 SharePoint Server 2010 和 SharePoint Server 2010 Service Pack 1，但不必运行 SharePoint 配置向导。您可能会发现：先安装 PowerPivot for SharePoint 实例，然后使用 PowerPivot 配置工具在同一过程内完成 SharePoint 场和 PowerPivot for SharePoint 的配置，这样会更加容易。

注意 有关 PowerPivot for SharePoint 安装过程的更多详细信息，请参阅
http://msdn.microsoft.com/zh-cn/library/ee210708(v=sql.110).aspx。关于使用 PowerPivot 配置工具（或者是使用 SharePoint 管理中心或 PowerShell cmdlet）的说明，请访问
http://msdn.microsoft.com/zh-cn/library/ee210609(v=sql.110).aspx。

注意 您现在可以使用包含 SharePoint PowerShell cmdlet 和 PowerPivot cmdlet 的 PowerShell 脚本来执行所有配置任务。若要了解更多信息，请参阅
http://msdn.microsoft.com/zh-cn/library/hh213341(SQL.110).aspx。

管理

要使 PowerPivot for SharePoint 保持以最佳状态运行，必须经常监视其资源使用状况，并确保服务器能够持续支持其工作负荷。SQL Server 2012 版本扩展了您可以自行控制的管理工具，这些工具可帮助管理磁盘空间使用情况、找出服务器运行中的潜在问题以避免用户受到负面影响，以及解决随时出现的数据刷新故障。

磁盘空间使用情况

将工作簿部署到 PowerPivot for SharePoint 后，PowerPivot for SharePoint 将该工作簿存储在 SharePoint 内容数据库中。之后，当用户请求该工作簿时，PowerPivot for SharePoint 会将其缓存为服务器磁盘上的 PowerPivot 数据库（位于 \Progrxsam Files

\Microsoft SQL Server\MSAS11.PowerPivot\OLAP\Backup\Sandboxes\<服务器应用程序名称>），然后将该工作簿加载到内存中。如果在指定时段内没有人访问该工作簿， PowerPivot for SharePoint 会从内存中删除该工作簿，但将其保留在磁盘上，以便在有人请求它时更快重新装入内存。

PowerPivot for SharePoint 会一直缓存工作簿，除非您指定限制，否则它会用尽所有可用的磁盘空间。PowerPivot System Service 定期运行作业，在最近未使用工作簿或是内容数据库中存在新版本的工作簿的情况下会将工作簿从缓存中删除。在 SQL Server 2012 中，您可以配置 PowerPivot for SharePoint 可用于缓存的总空间量以及在用尽全部空间后要删除的数据量。通过打开“SharePoint 管理中心”，导航到“应用程序管理”，选择“管理服务器上的服务”，然后选择“SQL Server Analysis Services”，您可以在服务器级别配置这些设置。在此可设置以下两个属性：

• 用于缓存文件的最大磁盘空间 默认值为 0，指示 Analysis Services 它可以使用所有可用的磁盘空间，但您可以通过提供特定值（以 KB 计）来设定最大值。

• 设置上次访问时间小时以帮助减少缓存 当缓存中的工作簿超过最大磁盘空间时， Analysis Services 使用此设置来确定要从缓存中删除哪些工作簿。默认值为 4，此时 Analysis Services 会删除至少有 4 个小时不活动的所有工作簿。

还有另一个用于管理缓存的选项，若要访问该选项，请转到“管理服务应用程序”（也位于“应用程序管理”中），然后选择“默认 PowerPivot 服务应用程序”。在“PowerPivot 管理面板”页上，单击“操作”部分中的“配置服务应用程序设置”链接，并根据需要修改以下属性：

• 在内存中保留非活动数据库(小时) 默认情况下，Analysis Services 会在上次查询后将工作簿保留在内存中 48 小时。如果用户经常访问某个工作簿，Analysis Services 就永远不会从内存中释放该工作簿。如有必要，可以降低此值。

• 在缓存中保留非活动数据库(小时) Analysis Services 将工作簿从内存中释放出来后，该工作簿会一直保留在缓存中并占用磁盘空间 120 小时（默认的时间范围），除非您降低此值。

服务器运行状况规则

管理服务器运行状况的关键是在问题发生之前就识别潜在的威胁，做到未雨绸缪。在此版本中，您可以自定义服务器运行状况规则，为您发出资源占用或服务器可用性相关问题的预警。打开“监视”并选择“复查问题和解决方案”后，可以在“管理中心”中查看这些规则的当前状态。

若要配置服务器级别的规则，请转到“应用程序管理”、选择“管理服务器上的服务”，然后选择“SQL Server Analysis Services”链接。查看以下运行状况规则的默认值，并根据需要更改设置：

• CPU 资源分配不足 当 msmdsrv.exe 的 CPU 利用率在数据收集期间一直处于或超过指定的百分比时，触发一个警告。默认值为 80%。

• 系统上 CPU 资源不足 当服务器的 CPU 使用率在数据收集期间一直处于或超过指定的百分比时，触发一个警告。默认值为 90%。

• 内存不足阈值 当可用内存低于分配给 Analysis Services 的指定百分比值时，触发内存警告。默认值为 5%。

• 最大连接数 当连接数超过指定数量时触发一个警告。默认值是 100，这是一个与服务器处理能力无关的任意数值，需要调整。

• 磁盘空间不足 当备份文件夹所在的驱动器上的可用磁盘空间低于指定百分比值时，触发一个警告。默认值为 5%。

• 数据收集间隔 定义一个时段，在该时段内应用服务器级别的运行状况规则的计算。默认值为 4 小时。

若要配置服务应用程序级别的规则，请转至“应用程序管理”，选择“管理服务应用程序”，然后选择“默认 PowerPivot 服务应用程序”。接下来，在“操作”列表中选择“配置服务应用程序设置”。随后即可检查和调整以下运行状况规则的值：

• 加载与连接比 当加载事件数与连接事件数之比超过指定值时，触发一个警告。默认值为 20%。如果这个数字太高，服务器可能会太快地从内存或缓存卸载数据库。

• 数据收集间隔 定义一个时段，在该时段内应用服务应用程序级别的运行状况规则的计算。默认值为 4 小时。

• 检查 PowerPivot Management Dashboard.xlsx 的更新 当 PowerPivot Management Dashboard.xlsx 文件未能在指定天数内更改时，触发一个警告。默认值为 5。
正常情况下，PowerPivot Management Dashboard.xlsx 文件每日刷新。

数据刷新配置

因为数据刷新操作消耗服务器资源，所以您只应允许对活动工作簿刷新数据，或是在数据刷新始终如一地成功完成的情况下刷新数据。您现在可以选择配置服务应用程序，让它在以上任一条件不再“成立”时停用工作簿的数据刷新计划。若要配置数据刷新选项，请转至“应用程序管理”，选择“管理服务应用程序”，然后选择“默认 PowerPivot 服务应用程序”。接下来，请在“操作”列表中选择“配置服务应用程序设置”并根据需要调整下列设置：

• 由于连续失败而禁用数据刷新 如果数据刷新连续失败若干次，PowerPivot 服务应用程序将停用工作簿的数据刷新计划。默认值为 10，但您可以将该值设置为 0 以防止停用。

• 对非活动的工作簿禁用数据刷新 如果在执行指定数目的数据刷新周期所需的时间内没有任何人查询某个工作簿，PowerPivot 服务应用程序将停用该工作簿。默认值为 10，但若您需要数据刷新操作始终处于活动状态，则可以将该值设置为 0。

第 10 章
Reporting Services

自从在 Microsoft SQL Server 2000 中引入 Reporting Services 以来，每个版本的 Reporting Services 都在不断扩展其基础功能，增强在共享报表、对数据进行可视化以及授予用户自助功能方面的选项。SQL Server 2012 Reporting Services 也不例外，这次几乎所有的增强功能都集中在 SharePoint 集成模式。另外还有两个新增的呈现器，它们在本机模式和 SharePoint 集成模式下均可用。SharePoint 集成模式下的 Reporting Services 具有全新的体系结构，您现在可将其配置为 SharePoint 共享服务应用程序。对于 SharePoint 集成模式下扩展的数据可视化和自助功能，您可以使用新增的即席报表生成工具 — Power View。另一项仅在 SharePoint 集成模式下可用的自助功能是数据警报，该功能允许您在报表数据符合您指定的条件时接收电子邮件。如果您试用过 SharePoint 集成模式，您就会被这些功能的魅力深深吸引！

新的呈现器

尽管将报表呈现为 Microsoft Excel 工作簿一直就是 Reporting Services 具备的功能，但将报表呈现为 Microsoft Word 文档的功能却只是从 SQL Server 2008 才开始提供。不管怎样，这些呈现器会分别生成 XLS 和 DOC 文件格式，分别与 Excel 2003 和 Word 2003 兼容。Excel 2010 和 Word 2010 用户当然可以打开这些早期文件格式，但他们现在可以使用新的呈现器享受到一些额外的好处。

Excel 2010 现器

默认情况下，Excel 呈现选项现在生成 Open Office XML 格式的 XLSX 文件；如果您在计算机上安装了 Excel 2007 或 Excel 2010，则可以在这些客户端中打开 XLSX 文件。在较新版本的 Excel 中，采用新文件类型的工作表可以容纳的更多的行数（最大 1,048,576 行）和列数（最大 16,384 列）。由于 XLSX 格式支持 24 位色谱中的 1600 万种颜色，所以您可以导出的报表的颜色范围也更广。最后，新的呈现器可使用压缩功能导出较小的报表文件。

提示 如果您只安装了 Excel 2003，那么只有安装了适用于 Word、Excel 和 PowerPoint 的 Microsoft Office 兼容包（可以从http://office.microsoft.com/en-us/products/microsoft-office-compatibility-pack-for-word-excel-and-powerpoint-HA010168676.aspx下载），才能打开此文件类型。作为替代解决方法，您可以遵照http://msdn.microsoft.com/zh-cn/library/dd255234(SQL.110).aspx#AvailabilityExcel中的说明，在 RsReportSErver.config 和 RsReportDesigner.config 文件中启用 Excel 2003 呈现器。

Word 2010呈现器

尽管将报表呈现为 Open Office XML 格式的 DOCX 文件的功能不像新的 Excel 呈现器那样提供许多优点，但新的 Word 呈现器却可以使用压缩功能生成比 Word 2003 呈现器更小的文件。您还可以创建使用 Word 2007 或 Word 2010 中的新功能的报表。

提示 就像 Excel 呈现器那样，如果计算机上装有 Word 2003，则只有安装了适用于 Word、Excel 和 PowerPoint 的 Microsoft Office 兼容包（可以从http://office.microsoft.com/zh-cn/products/microsoft-office-compatibility-pack-for-word-excel-and-powerpoint-HA010168676.aspx下载），才可以使用新的 Word 呈现器。如果您愿意，可以遵照http://msdn.microsoft.com/zh-cn/library/dd283105(SQL.110).aspx#AvailabilityWord中的说明，在 RsReportSErver.config 和 RsReportDesigner.config 文件中启用 Word 2003 呈现器。

SharePoint 共享服务体系结构

在以前版本的 Reporting Services 中，安装和配置 Reporting Services 和 SharePoint 组件需要许多步骤和不同工具来完成任务，因为 SharePoint 集成模式依赖于两个不同服务的功能。对于当前版本，开发团队对体系结构进行了彻底的重新设计，可实现更好的性能、可伸缩性和管理。利用改进的体系结构，配置过程也会更简单。

SharePoint 版本支持的功能

所有版本的 SharePoint 都支持 Reporting Services 的常规功能。也就是说，Reporting Services 以往版本中提供的所有功能都继续在所有版本中提供。不过，此版本中的新功能仅在 SharePoint Enterprise Edition 中提供。表 10-1 显示 SharePoint 版本支持的功能。

图 10-1  SharePoint 版本功能支持

Reporting Services 功能

SharePoint Foundation 2010

SharePoint Server 2010 Standard Edition

SharePoint Server 2010 Enterprise Edition

一般的报表查看和订阅

✔

✔

✔

数据警报

✔

Power View

✔

点击这里查看表为图像

共享服务体系结构的优点

若将 Reporting Services 作为共享服务应用程序提供，您可享有以下新的优点：

• 使用比以往版本更少的资源跨 Web 应用程序和 SharePoint Server 2010 场来扩展 Reporting Services。

• 使用基于声明的身份验证来控制对 Reporting Services 报表的访问。

• 依靠 SharePoint 备份和恢复过程来处理 Reporting Services 内容。

服务应用程序配置

安装 Reporting Services 组件之后，必须创建服务应用程序并随后配置它。不再需要使用 Reporting Services 配置管理器来配置 Reporting Services 设置，而是改为使用 SharePoint 管理中心中的图形界面或使用 SharePoint PowerShell cmdlet。

当您创建服务应用程序时，您可以指定 Reporting Services 运行使用的应用程序池标识。因为 SharePoint 共享服务应用程序池现在承载 Reporting Services，您不会在服务管理控制台中再看到用于 SharePoint 集成模式报表服务器的 Windows 服务。您还需要创建三个报表服务器数据库 — 一个用于存储服务器和目录数据；另一个用于存储缓存的数据集、缓存的报表和其他临时数据；第三个用于数据警报管理。数据库名称中包括一个用于服务应用程序的唯一标识符，使您可以在同一个 SharePoint 场中为 Reporting Services 创建多个服务应用程序。

如您所料，Reporting Services 的大多数配置设置对应于 Reporting Services 配置管理器中的设置，或对应于您在使用本机模式报表服务器时在 SQL Server Management Studio 中设置的服务器属性。但是，在使用订阅或数据警报之前，您必须正确配置 SQL Server 代理权限。配置权限的一种方法是：打开 SharePoint 管理中心，导航到“应用程序管理”，访问“管理服务应用程序”，单击 Reporting Services 服务应用程序的链接，然后打开“设置订阅和警报”页。在该页上，如果 SharePoint 管理员凭据对 Reporting Services 数据库具有 db_owner 权限，您可以提供该凭据。如果您愿意，可以从同一页中下载 Transact-SQL 脚本，或运行 PowerShell cmdlet 来生成相同的 Transact-SQL 脚本，稍后您将在 SQL Server Management Studio 中执行该脚本。

无论您是使用界面还是脚本，设置过程都会根据需要创建 RSExec 角色，为应用程序池标识创建登录名，并在三个报表服务器数据库中将该登录名分配给每个 RSExec 角色。如果报表服务器数据库中存在任何计划的作业，例如订阅或警报，脚本会将应用程序池标识指定为这些作业的所有者。此外，该脚本还将登录名分配给 SQLAgentUserRole，并授予它必要的权限，以便此登录名与 SQL Server 代理交互并管理作业。

注意 有关在 SharePoint 集成模式中安装和配置 Reporting Services 的详细信息，请参阅
http://msdn.microsoft.com/zh-cn/library/cc281311(SQL.110).aspx。

Power View

Power View 是 Reporting Services 中提供的最新自助功能。它是一个基于浏览器的 Silverlight 应用程序，要求 Reporting Services 在使用 SharePoint Server 2010 Enterprise Edition 的 SharePoint 集成模式下运行。它还要求特定类型的数据源 — 要么是您部署到 Analysis Services 服务器的表格模型，要么是您部署到 SharePoint 文档库的 PowerPivot 工作簿。

您不必再在设计模式中操作，然后再预览报表（就像在使用报表设计器或报表生成器执行操作时那样），您可以直接在 Power View 的演示布局中处理数据。可以从数据的表格视图着手，将其变换为不同的数据可视化对象。浏览和检查数据时，可以通过修改排序顺序、向报表添加更多视图、突出显示值和应用筛选器来优化和调整布局。完成后，可以将报表以新的 RDLX 文件格式保存到 SharePoint 文档库或 PowerPivot 库中，或将报表导出到 Microsoft PowerPoint 供他人使用。

注意 若要使用 Power View，您可以使用以下任意版本（Evaluation、Developer、Business Intelligence 或 Enterprise）在 SharePoint 集成模式下安装 Reporting Services。您使用的浏览器取决于您计算机的操作系统。使用 Windows 操作系统时可使用 Internet Explorer 8 和更高版本，使用 Mac 操作系统时可使用 Safari 5。Windows Vista 和 Windows Server 2008 均支持 Internet Explorer 7。Windows Vista、Windows 7 和 Windows Server 2008 均支持 Firefox 7。

数据源

就像您使用 SQL Server Data Tools 中的报表设计器或使用报表生成器创建的任何报表一样，您必须为 Power View 报表提供可用的数据源。您可以使用以下任意类型的数据源：

• PowerPivot 工作簿 直接从 PowerPivot 库中选择一个 PowerPivot 工作簿，作为 Power View 报表的源。

• 共享数据源 创建一个 Reporting Services 共享数据源 (RSDS) 文件，将“数据源类型”属性设置为“用于 Power View 的 Microsoft BI 语义模型”。然后您定义一个引用 PowerPivot 工作簿（如 http://SharePointServer/PowerPivot Gallery/myWorkbook.xlsx）或 Analysis Services 表格模型（如 Data Source=MyAnalysisServer; Initial Catalog=MyTabularModel）的连接字符串。（我们在第 9 章“Analysis Services 和 PowerPivot”一章中介绍过表格模型）。 仅在创建 Power View 报表时使用此类型的共享数据源。

注意 如果您的 Web 应用程序使用基于窗体的身份验证，则必须配置共享数据源使用存储的凭据，并为存储的凭据指定 Windows 登录名。如果 Web 应用程序使用 Windows 经典或 Windows 声明身份验证，而您的 RSDS 文件引用 SharePoint 场外的 Analysis Services，则必须配置 Kerberos 身份验证并使用集成安全性。

• 商业智能语义模型 (BISM) 连接文件 创建一个 BISM 文件来连接到 PowerPivot 工作簿或 Analysis Services 表格模型。您可以将此文件同时用作 Power View 报表和 Excel 工作簿的数据源。

注意 如果您的 Web 应用程序使用 Windows 经典或 Windows 声明身份验证，而您的 BISM 文件引用 SharePoint 场外的 Analysis Services，则必须配置 Kerberos 身份验证并使用集成安全性。

BI 语义模型连接文件

不管您要连接到 Analysis Services 表格模型还是连接到在 SharePoint 服务器上部署的 PowerPivot 工作簿，您都可以将 BISM 连接文件用作 Power View 报表甚至是 Excel 工作簿的数据源。为此，必须首先向 PowerPivot 网站中的文档库添加 BI 语义模型连接内容类型。

若要为 PowerPivot 工作簿创建 BISM 文件，请打开您具有“参与讨论”权限的用来存储该文件的文档库。在 SharePoint 功能区的“文档”选项卡上单击“新建文档”，然后选择菜单上的“BI 语义模型连接”。接下来，根据数据源配置连接属性，如下所示：

• PowerPivot 工作簿 提供文件的名称，并将“工作簿 URL 或服务器名称”属性设置为该工作簿的 SharePoint URL，如
http://SharePointServer/PowerPivot Gallery/myWorkbook.xlsx。

• Analysis Services表格数据库 提供文件的名称；使用服务器名称、完全限定域名、Internet 协议 (IP) 地址或服务器和实例名称（例如，MyAnalysisServer \MyInstance）来设置“工作簿 URL 或服务器名称”属性；并且使用服务器上的表格模型的名称设置“数据库”属性。

您必须授予用户对文件的“读取”权限，这样他们才能打开该文件并将其用作数据源。如果数据源是 PowerPivot 工作簿，用户还必须对该工作簿具有“读取”权限。如果数据源是一个表格模型，请求该表格模型数据的共享服务必须对表格实例具有管理员权限，并且用户所属的角色必须对该表格模型具有“读取”权限。

Power View 设计环境

您可以采用以下方式之一为新报表打开 Power View 设计环境：

• 从 PowerPivot 工作簿 单击 PowerPivot 库中显示的 PowerPivot 工作簿右上角的“创建 Power View 报表”图标，如图 10-1 所示。

• 从数据连接库 单击 BISM 或 RSDS 文件旁边的向下箭头，然后单击“创建 Power View 报表”。

图 10-1  PowerPivot 库中的“创建 Power View 报表”图标

在您首次创建报表时显示的 Power View 设计环境中，空白的视图工作区会显示在中央位置，如图 10-2 所示。制作报表时，您需要向视图工作区添加表和数据可视化对象。视图大小有固定的高度和宽度，就像 PowerPoint 中的幻灯片大小一样。如果您需要更多空间来显示数据，可以向报表中添加更多的视图，然后通过使用“视图”窗格在视图之间导航。

视图工作区上方是最初只显示“主文件夹”选项卡的功能区。向报表添加字段时，“设计”选项卡和“布局”选项卡会随之显示。功能区上每个选项卡的内容都动态更改，以便仅显示适用于当前所选项的按钮和菜单。

图 10-2  Power View 设计环境

表格模型中的字段列表显示在右上角。为新报表打开设计环境时，您只会看到模型的表名。您可以展开表名以查看其中包含的字段，如图 10-3 所示。个别字段（如 Category）显示在字段列表中但不带图标。您还会看到带有灰白色图标的行标签字段，如 Drawing。正如我们在第 9 章中解释的那样，行标签字段标识使用模型中的报表属性配置的列。计算列（如 Attendees）显示有 Sigma 图标，度量值（如 Quantity Served YTD）显示有计算器图标。

选中字段旁边的复选框可将该字段包含在报表中，您也可以将该字段拖入报表。您还可以双击字段列表中的表名，将默认字段集（如模型中定义）添加到当前视图中。

提示 本章中的示例使用可从
http://www.microsoft.com/download/en/details.aspx?id=26718和
http://www.microsoft.com/download/en/details.aspx?id=26719下载的示例文件。您可以将这些文件与
http://social.technet.microsoft.com/wiki/contents/articles/6175.aspx中的教程一同使用，进行 Power View 的动手演练。

图 10-3  表格模型字段列表

您可以单击某个字段将其作为只包含一个列的表添加到视图中，如图 10-4 所示。在您选择其他字段前必须先选择该表，否则选择新字段将开始一个新表。添加字段时，Power View 根据数据类型设置字段的格式。

图 10-4  只包含一个列的表

提示 Power View 只检索它能在当前视图中显示的数据，并且在用户滚动查看更多数据时检索其他行。这样，即使源表中包含数百万的行，Power View 也能优化性能。

您选择的字段显示在布局部分中的字段列表下方。布局部分的内容随当前可视化对象而更改。您可以使用布局部分重新排列字段的顺序，或更改字段的行为，例如：更改要使用的聚合函数，或是否显示不含数据的行。

向表中添加字段后，可以根据需要移动或调整其大小。若要在视图中移动某个项，请指向其边框，当光标变成手形后，将它拖到所需的位置。若要调整其大小，请再次指向其边框，在出现双向箭头时，拖动边框来缩小或放大该项。

若要在完成设计后共享某个报表，可通过“文件”菜单保存该报表。仅当您对目标文件夹拥有“添加项”权限或具有可覆盖现有文件的“编辑项”权限时，才可以保存该文件。保存文件时，如果您保持默认选项设置为“将预览图像与报表一起保存”，您的报表视图将显示在 PowerPivot 库中。如果报表包含机密信息，应禁用此选项。报表另存为 RDLX 文件，与其他 Reporting Services 设计环境不兼容。

数据可视化

表只是在 Power View 中浏览数据的一种方式。向表中添加多个字段后，可随后将其转换为一个矩阵、一个图表或一张卡片。如果将它转换为散点图，则可以通过添加播放轴直观演示数据在多个时段中的变化。您还可以创建同一个图表的序列图，按不同类别细分图表中的数据。

图表

向表中添加度量值时，“设计”选项卡会包含用于图表可视化对象（如柱形图、条形图、折线图或散点图）的图标。选择某个图表类型的图标后，该图表将取代表显示。您可以随后调整可视化对象的大小以提高可读性，如图 10-5 所示。您可以通过使用字段列表中相应的复选框，继续向可视化对象添加更多字段或删除字段。在功能区的“布局”选项卡上，您可以使用按钮添加图表标题、当图表包含多个序列时确定图例的位置，或启用数据标签。

图 10-5  柱形图

提示 您可以以现有的可视化对象为起点创建新的可视化对象。只需选择该对象，然后使用功能区的“主文件夹”选项卡上的“复制”和“粘贴”按钮即可。您可以将该可视化对象粘贴到同一视图或新视图中。但是，不能使用快捷键执行复制和粘贴。

排列

您可以叠加和嵌入项，如图 10-6 所示。可以使用功能区的“主文件夹”选项卡上的“排列”按钮将项置前或移后。若您要单独查看某项，可以单击该项右上角的按钮，使选定的可视化对象填满整个视图。

图 10-6  叠加可视化对象

卡片和图块

您可以使用的另一种可视化对象是“卡片”，这是以卡片格式排列的分组字段的可滚动列表，如图 10-7 所示。请注意默认标签和默认图像字段的显示比其他字段更为突出。卡片的大小随着您添加或删除字段动态更改，直到您使用控点调整大小后，大小才保持不变。您可以双击卡片容器边框上的大小调整控点来恢复自动调整大小。

图 10-7  卡片可视化对象

您可以通过在布局部分中重新排列各个字段来更改这些字段的顺序。还可以将字段移至“图块划分方式”区域，以便在卡片上方添加一个容器，为选定字段中的每个值显示一个图块，如图 10-8 所示。当您选择某个图块时，Power View 会筛选卡片集合，以显示那些具有与选定图块相同的值的卡片。

图 10-8  图块

图块的默认布局是选项卡条带模式。您可以通过使用功能区“设计”选项卡上的“图块可视化”组中的相应按钮，在选项卡条带模式和封面流模式之间切换。在封面流模式中，标签或图像显示在容器下方，当前所选内容显示在条带中央，比其他图块项略大。

提示 您也可以使用功能区的“设计”选项卡上的“图块”按钮将表或矩阵直接转换为图块容器。根据模型的设计，Power View 会显示表中第一个字段的值、第一个行组值或默认字段集。表或矩阵中的所有其他字段显示为图块容器内的表。

播放轴

当您的表或图表包含两个度量值时，您可以将其转换为散点图，以便在水平轴上显示一个度量值，在垂直轴上显示另一个度量值。另一个选项是在气泡图中使用第三个度量值来表示大小（在布局部分中定义），如图 10-9 所示。对于任一种图表类型，您还能向“颜色”部分添加一个用于分组的字段。还另有一个选项是将日期表中的字段添加到布局部分的“播放轴”区域。

图 10-9  气泡图的布局部分

设置了播放轴后，您可以单击播放按钮，按照播放轴上显示的每个时段依次播放可视化对象，也可以使用播放轴上的滑块来选择要播放的特定时段。可视化对象的背景中会出现水印以指示当前时段。当您单击某个气泡或在图表中指向某个对象时，您会筛选可视化对象，聚焦所选内容并查看所选内容随着时间推移经过的路径，如图 10-10 所示。您还可以指向路径中的某个气泡以查看其值（显示为工具提示）。

图 10-10  带播放轴的气泡图

序列图

查看数据的另一种方式是将同一个图表细分为多个副本。您需要将要创建不同图表的字段放入布局部分的“垂直序列图”或“水平序列图”区域。然后使用功能区“布局”选项卡上的“网格”按钮选择要包括的横向和竖向图块数，例如图 10-11 中显示的横向三个图块和竖向两个图块。如果可视化对象包含的图块数超过了网格可以显示的数量，则会显示一个滚动条，允许您访问其他图块。Power View 会将不同图表中的水平轴和垂直轴对齐，从而便于不同图表间的比较。

图 10-11  折线图的垂直序列图

排序顺序

在某些类型的可视化对象上方会显示排序字段和方向。若要更改排序字段，请单击它以查看可用字段的列表，如图 10-12 所示。还可以单击缩写的方向标签以反转排序。即：单击“升序”可将升序排序改为降序排序，降序排序随后会在排序标签中显示为“降序”。

图 10-12  排序字段选择

多个视图

您可能会发现将可视化对象排列为单独的视图时更便于浏览数据。报表中的所有视图都必须使用同一个表格模型作为其数据源，但每个视图可以包含不同的可视化对象。此外，为某个视图定义的筛选器（我们将在本章下文中介绍）仅适用于该视图。使用工具栏的“主文件夹”选项卡上的“新建视图”按钮可创建新的空白视图，或复制当前选定的视图，如图 10-13 所示。

图 10-13  向 Power View 报表添加视图

突出显示的值

为了帮助您更好地查看关系，您可以在图表中选择一个值，如某个列或图例项。Power View 随后会在图表中突出显示相关值。您甚至可以在一个图表中选择某个值（如图 10-14 中的 Breads），而在同一视图中的其他图表中突出显示与 Breads 相关的值。通过在图表区域中单击（不要单击另一个条形）可清除突出显示。

图 10-14  突出显示的值

筛选器

Power View 为您提供了几种筛选报表数据的方法。您可以对某个视图使用切片器或图块容器，以便将筛选器选择合并到表体中。作为替代方法，可以向设计环境的“筛选区域”添加视图筛选器或可视化对象筛选器，以便提高筛选器在选择值时的灵活性。

切片器

在视图中创建只包含一个列的表时，您可以单击功能区的“设计”选项卡上的“切片器”按钮将该表中的值用作筛选器。在切片器中选择一个或多个标签后，Power View 不仅筛选视图中的所有可视化对象，还会筛选视图中的其他切片器，如图 10-15 所示。通过单击切片器右上角的“清除筛选器”图标可以恢复未经筛选的视图。

图 10-15  视图中的切片器

图块容器

如果您在图块容器内添加可视化对象（如图 10-16 所示），图块选择会同时筛选卡片和可视化对象。但是，筛选行为仅限于图块选择。同一视图中的其他可视化对象或切片器保持不变。

图 10-16  用于筛选可视化对象的图块容器

向图块容器添加可视化对象后，Power View 不会像对序列图那样对可视化对象的水平轴和垂直轴进行同步。换言之，当您选择一个图块，垂直轴的值范围可能会大于不同图块中同一轴上的值范围。您可以使用“布局”选项卡的“同步”组中的按钮对不同图块中的轴、序列或气泡进行同步，以便于比较不同图块的图表值。

视图筛选器

视图筛选器允许您为当前视图定义筛选条件，而无需像对切片器那样将筛选条件包括在表体中。报表中的每个视图都可以有自己的一组筛选器。如果复制包含筛选器的视图，新视图会包含第一个视图的筛选器的副本。也就是说，更改一个视图的筛选器值不会影响另一个视图，即使筛选器相同也是如此。

您可以在视图工作区的筛选器区域中定义视图筛选器；默认情况下，该区域在您创建新报表时是不可见的。若要切换工作区这一部分的可见性，请单击功能区“主文件夹”选项卡上的“筛选器区域”按钮。筛选器区域可见后，在您需要增大视图时可以折叠该区域，只需单击筛选器区域顶部出现的左箭头即可。

若要在默认的基本模式中添加新的筛选器，请将字段拖入筛选器区域，然后选择一个值。如果字段包含字符串或日期数据类型，则可以使用复选框选择一个或多个值。如果字段包含数值数据类型，则可以使用滑块来设置值范围。您可以在图 10-17 中看到数据类型为数值和字符串的字段的筛选器示例。

图 10-17  基本筛选模式中的数值和字符串数据类型的筛选器选择

若要使用更灵活的筛选条件，您可以切换到高级筛选模式，这需要单击筛选器区域中字段名称右侧显示的工具栏中的第一个图标。字段的数据类型决定您可以配置的条件。对于具有字符串数据类型的筛选器，您可以创建条件，使用“包含”、“开头为”之类的运算符筛选部分字词。对于数值数据类型，可以使用“小于”、“大于或等于”之类的运算符。如果您基于日期数据类型创建筛选器，则可以将日历控件与“早于”或“晚于等于”之类的运算符结合使用，如图 10-18 所示。您也可以通过使用 AND 和 OR 运算符创建复合条件。

图 10-18  高级筛选模式中的日期数据类型的筛选器选择

可视化对象筛选器

您还可以使用筛选器区域为选定的可视化对象配置筛选器。首先，您必须单击可视化对象右上角的“筛选器”按钮，然后单击筛选器区域中的可视化对象显示中的字段，如图 10-19 所示。更改可视化对象筛选器中的字段的值时，Power View 只更新该可视化对象。同一视图中的所有其他可视化对象不受该筛选器的影响。正如您可以对视图筛选器进行配置一样，您可以在基本筛选器模式或高级筛选器模式中配置可视化对象筛选器的值。

图 10-19  可视化对象筛选器

显示模式

在为您的报表开发视图和筛选器后，您的时间可能更多地用于在视图之间导航以及与可视化对象交互，而不是用在编辑报表上。为便于您以多种方式查看，Power View 提供了下列三种显示模式，您可以使用功能区“主文件夹”选项卡的“显示”组中的按钮分别启用这些模式：

• 适合窗口大小 该视图可缩小或放大以填充窗口中的可用空间。使用此模式时，您可以访问功能区、字段列表、筛选器区域和“视图”窗格。您可以在编辑和查看活动之间轻松切换。

• 读取模式 在此模式下，Power View 保持浏览器的选项卡和按钮可见，但它隐藏功能区和字段列表，阻止您编辑报表。您可以使用键盘上的箭头键、屏幕右下角的多视图按钮（允许您访问视图的缩略图）或屏幕右下角的箭头按钮，在视图之间导航。在视图上方，您可以通过单击“编辑报表”按钮切换到“适合窗口大小”模式，或单击另一按钮切换到“全屏”模式。

• 全屏模式 使用“全屏”模式类似于使用 PowerPoint 中的幻灯片放映视图。Power View 使用整个屏幕显示当前视图。此模式类似于“读取”模式并提供相同的导航选项，但它会隐藏您的浏览器而使用整个屏幕。

仅当您使用“适当窗口大小”或“读取”模式时，才可以打印当前视图。若要打印，请打开“文件”菜单并单击“打印”。视图总是横向打印，并且仅打印您当前在屏幕上看到的数据。此外，只有在事先展开筛选器区域的前提下才能打印该区域。如果散点图或气泡图上有播放轴，打印的视图仅包括当前帧。同样，如果您在打印前选择了图块容器中的图块，则在打印视图中只能看到选定的图块。

PowerPoint 导出

将报表导出到 PowerPoint 是 Power View 的一项非常有用的功能。在“文件”菜单上，单击“导出到 PowerPoint”并保存 PPTX 文件。每个视图都将成为 PowerPoint 文件中的单独幻灯片。编辑每张幻灯片时，您只会看到该视图的静态图像。但是，在以“读取视图”或“幻灯片放映”模式显示幻灯片时，只要您有正确的权限并与 SharePoint 服务器上的报表建立活动连接，就可以通过单击幻灯片右下角的“单击以交互”链接从 Power View 加载视图并启用交互功能。您可以更改筛选器区域、切片器和图块容器中的筛选器值，并且可以突出显示值。但是，不能从 PowerPoint 中创建新的筛选器或新的数据可视化对象。此外，如果您导航到不同的幻灯片，然后返回 Power View 幻灯片，则必须使用“单击以交互”链接重新加载该视图以便交互。

数据警报

现在，您再也不用创建订阅来定期通过电子邮件发送报表了。不管报表中包含什么样的数据值，您都可以创建一个数据警报，当计划的时间内数据中的特定条件成立时，发送电子邮件通知。这种新的自助功能只在 SharePoint 集成模式下运行的 Reporting Services 中提供，并且只要设置了订阅和警报即可工作（正如我们在本章前面的“服务应用程序配置”部分中所述）。然而，该功能仅适用于您使用报表设计器或报表生成器创建的报表。您不能为 Power View 报表创建数据警报。

数据警报设计器

只要数据存储区使用具有存储凭据或没有凭据的数据源，您就可以为有权访问的任何报表创建一个或多个数据警报。该报表还必须包含至少一个数据区域。此外，该报表必须能在您创建新警报时成功返回数据。如果满足这些先决条件，在您打开报表进行查看之后，您就可以从报表工具栏的“操作”菜单中选择“新建数据警报”。此时会显示数据警报设计器，如图 10-20 所示。

图 10-20  数据警报设计器

提示 您必须具有 SharePoint“创建警报”权限，才可以对您有权查看的任何报表创建警报。

使用数据警报设计器可以为报表中的一个或多个数据区域定义规则，这些规则控制 Reporting Services 是否发送警报。您还可以为评估规则的过程指定定期计划，并配置 Reporting Services 在生成电子邮件通知时所用的电子邮件设置。保存生成的警报定义时，Reporting Services 将其保存在警报数据库中并计划相应的 SQL Server 代理作业，如图 10-21 所示。

图 10-21  数据警报创建过程

在数据警报设计器中，您选择报表中的数据区域以便查看前 100 行数据的预览，在为该数据区域（亦称“数据馈送”）制定规则时需要参考这 100 行数据。您可以创建一个简单规则 — 如果在 SQL Server 代理作业运行时数据馈送包含数据，则发送数据警报。更常见的是：创建一个或多个规则，将某个字段值与您输入的值或另一个字段中的值进行比较。数据警报设计器只使用逻辑 AND 运算符来合并同一数据馈送的多个规则。您不能将其更改为 OR 运算符。您必须改用附加条件来创建一个单独的数据警报。

在数据警报设计器的“计划设置”部分中，您可以为数据警报配置 SQL Server 代理作业运行的时间间隔，即：每日、每周、每小时或每分钟。在“高级”设置中（如图 10-22 所示），您可以设置要启动作业的日期和时间，还可以选择设置结束日期。您还可以选择仅在警报结果更改时发送警报。

图 10-22  数据警报高级计划设置

最后，您必须提供数据警报的电子邮件设置，这需要至少将一个电子邮件地址指定为数据警报收件人地址。如果要将数据警报发送给多个收件人，请用分号分隔每个电子邮件地址。您还可以包含数据警报的主题和说明，二者都是静态字符串。

警报服务

Reporting Services 警报服务管理刷新数据馈送和应用数据警报定义中的规则的过程，如图 10-23 所示。无论结果如何，警报服务都会向警报数据库添加一个警报实例，记录评估结果。如果数据馈送中的任何行满足处理过程中的规则条件，警报服务将生成包含警报结果的电子邮件。

图 10-23  报警服务处理数据警报的过程

成功的数据警报电子邮件包括创建警报的用户的名称、警报定义中的警报的说明，以及生成警报的数据馈送中的行，如图 10-24 所示。它还包括指向报表、警报规则说明以及读取数据馈送时所用的报表参数的链接。发送邮件的帐户是您在 Reporting Services 共享服务应用程序的电子邮件设置中指定的帐户。

图 10-24  包含成功的数据警报的电子邮件

注意 如果在警报处理过程中出现错误，警报服务会将警报实例保存到警报数据库中，并向收件人发送一条描述错误的警报消息。

数据警报管理器

使用数据警报管理器可以列出您为报表创建的所有数据警报，如图 10-25 所示。若要打开数据警报管理器，请打开包含您的报表的文档库，单击报表名称右侧的向下箭头，然后选择“管理数据警报”。您可以看到为当前报表列出的警报，但可以使用页面顶部的下拉列表将视图改为针对所有报表或不同报表的数据警报列表。

图 10-25  数据警报管理器

数据警报管理器显示了数据警报所发送的警报数、数据警报最后一次运行的时间、最后一次修改的时间，以及最后一次执行的状态。如果右键单击此页上的数据警报，您可以编辑数据警报、将其删除，或按需运行警报。其他人不能查看、编辑或运行您创建的数据警报，但网站管理员可以查看和删除您的数据警报。

如果您是网站管理员，则可以使用“网站设置”页上的“管理数据警报”链接打开“数据警报管理器”。在这里您可以从下拉列表中选择用户，以查看该用户为所有报表创建的所有数据警报。您还可以按报表筛选数据警报。作为网站管理员，您不能编辑这些数据警报，但您可以在必要时删除它们。

警报配置

数据不会在警报数据库中无限期堆积。报表服务器配置文件包含几个设置，您可以更改这些设置来覆盖清理警报数据库中的数据的默认时间间隔或禁用警报。没有可用于更改这些设置的图形界面。您必须手动编辑 RsReportServer.config 文件才能更改表 10-2 所示的设置。

图 10-2  RsReportServer.config 中的警报配置设置

警报设置

说明

默认值

AlertingCleanupCyclingMinutes

用于启动警报清理周期的时间间隔

20

AlertingExecutionLogCleanupMinutes

要在警报执行日志中保留数据的分钟数

10080

AlertingDataCleanupMinutes

要保留临时警报数据的分钟数

360

AlertingMaxDataRetentionDays

保留警报执行元数据、警报实例和执行结果的天数

180

IsAlertingService

启用或禁用警报服务，分别对应 True 或 False 值

True

点击这里查看表为图像

SharePoint 配置数据库包含控制警报服务重试执行警报的次数以及各次重试之间间隔的设置。 MaxRetries的默认值为3， SecondsBeforeRetry 的默认值为900。可以使用 PowerShell cmdlet 更改这些设置。这些设置将应用于所有重试的警报，但您可以为下列每个事件配置不同的重试设置：

• FireAlert  用户启动的按需执行警报

• FireSchedule  SQL Server 代理作业启动的按计划执行警报

• CreateSchedule  将新的或修改的数据警报中定义的计划保存起来的过程

• UpdateSchedule  修改数据警报中的计划

• DeleteSchedule  删除数据警报

• GenerateAlert  数据馈送、规则和警报实例的警报服务处理

• DeliverAlert  准备并传递数据警报的电子邮件

Appendix: Code and Table Images

点击这里查看代码为文字

点击这里查看表为文字

点击这里查看表为文字

点击这里查看表为文字

点击这里查看表为文字

点击这里查看表为文字

点击这里查看代码为文字

点击这里查看代码为文字

点击这里查看代码为文字

点击这里查看代码为文字

点击这里查看代码为文字

点击这里查看代码为文字

点击这里查看代码为文字

点击这里查看代码为文字

点击这里查看代码为文字

点击这里查看代码为文字

点击这里查看代码为文字

点击这里查看代码为文字

点击这里查看代码为文字

点击这里查看代码为文字

点击这里查看代码为文字

点击这里查看代码为文字

点击这里查看代码为文字

点击这里查看代码为文字

点击这里查看代码为文字

点击这里查看代码为文字

点击这里查看代码为文字

点击这里查看代码为文字

点击这里查看代码为文字

点击这里查看代码为文字

点击这里查看代码为文字

点击这里查看代码为文字

点击这里查看表为文字

点击这里查看表为文字

点击这里查看代码为文字

点击这里查看代码为文字

点击这里查看代码为文字

点击这里查看代码为文字

点击这里查看代码为文字

点击这里查看代码为文字

点击这里查看代码为文字

点击这里查看代码为文字

点击这里查看表为文字

点击这里查看代码为文字

点击这里查看代码为文字

点击这里查看代码为文字

点击这里查看代码为文字

点击这里查看代码为文字

点击这里查看代码为文字

点击这里查看表为文字

点击这里查看表为文字

点击这里查看代码为文字

点击这里查看表为文字

点击这里查看表为文字

点击这里查看表为文字

点击这里查看表为文字