第Ⅰ部分 入 门 3
第1章 SQL Server世界 3
1.1 SQL Server发展简史 3
1.2 数据库市场中的SQL Server 4
1.2.1 SQL Server的竞争对手 4
1.2.2 SQL社区的强大之处 4
1.3 SQL Server的组件 5
1.3.1 数据库引擎 5
1.3.2 服务 5
1.3.3 商业智能 6
1.3.4 工具和附加组件 7
1.3.5 联机资源 9
1.4 SQL Server 2012的版本 9
1.5 SQL Server 2012的显著增强 10
1.6 小结 11
第2章 数据架构 12
2.1 信息架构原则 12
2.2 数据库目标 13
2.2.1 适用性 13
2.2.2 可扩展性 14
2.2.3 数据完整性 14
2.2.4 性能/可扩展性 15
2.2.5 可用性 15
2.2.6 安全性 15
2.3 智能数据库设计 17
2.3.1 数据库系统 17
2.3.2 物理架构 18
2.3.3 基于集的查询 19
2.3.4 索引 19
2.3.5 并发性 19
2.3.6 高级可扩展性 20
2.3.7 性能框架 20
2.3.8 争议和异议 21
2.4 小结 21
第3章 安装SQL Server 23
3.1 准备服务器 24
3.1.1 硬件和软件需求 24
3.1.2 适当修补 25
3.1.3 防火墙 25
3.2 选择版本 26
3.2.1 不同版本之间的区别 27
3.2.2 以后的降级 27
3.2.3 以后的升级 29
3.2.4 许可方面的区别 30
3.3 安装过程 31
3.3.1 SQL Server 2012安装中心 32
3.3.2 通过安装中心安装SQL Server 2012 33
3.3.3 通过命令行安装SQL Server 2012 41
3.3.4 通过PowerShell安装SQL Server 2012 43
3.3.5 完成安装后的任务 46
3.4 小结 49
第4章 客户端连接 50
4.1 启用服务器连接 50
4.1.1 服务器配置管理器 51
4.1.2 SQL本地客户端连接(SNAC) 52
4.2 SQL Server本地客户端特性 52
4.2.1 对LocalDB的本地客户端支持 53
4.2.2 元数据发现 53
4.2.3 高可用性/灾难恢复支持 53
4.2.4 改进的日期/时间支持 53
4.2.5 访问扩展事件日志中的诊断信息 54
4.2.6 ODBC特性 54
4.2.7 多活动结果集(MARS) 54
4.2.8 XML数据类型 55
4.2.9 用户定义类型 55
4.2.10 大值类型 55
4.2.11 文件流支持 55
4.2.12 过期密码处理 55
4.2.13 快照隔离 56
4.3 小结 56
第5章 SQL Server管理和开发工具 57
5.1 组织界面 58
5.1.1 窗口放置 59
5.1.2 上下文菜单 61
5.2 Registered Servers 61
5.2.1 管理服务器 61
5.2.2 服务器组 62
5.3 Object Explorer 63
5.3.1 导航树 63
5.3.2 筛选Object Explorer 65
5.3.3 Object ExplorerDetails页面 65
5.3.4 表设计器 65
5.3.5 创建数据库关系图 66
5.3.6 Query Designer 67
5.3.7 Object Explorer报表 68
5.4 使用Query Editor 69
5.4.1 打开连接到服务器的查询 69
5.4.2 打开.sql文件 70
5.4.3 快捷方式和书签 71
5.4.4 查询选项 72
5.4.5 执行SQL批处理 72
5.4.6 结果 73
5.4.7 查看查询执行计划 73
5.5 使用Solution Explorer 74
5.6 以模板和代码片段为基础编写代码 74
5.6.1 模板的使用 74
5.6.2 代码片段的使用 75
5.7 小结 75
第Ⅱ部分 建立数据库和处理数据 79
第6章 基本的查询流 79
6.1 了解查询流 80
6.1.1 查询语句的语法流 80
6.1.2 查询语句的图形化视图 80
6.1.3 查询语句的逻辑流 82
6.1.4 查询语句的物理流 82
6.2 From子句数据源 83
6.2.1 可能的数据源 83
6.2.2 表别名 84
6.2.3 表名称 85
6.2.4 完全限定的名称 85
6.3 WHERE条件 86
6.3.1 使用BETWEEN搜索条件 86
6.3.2 与列表比较 87
6.3.3 使用LIKE搜索条件 89
6.3.4 多个WHERE条件 91
6.4 列、星号、别名和表达式 92
6.4.1 星号 92
6.4.2 别名 93
6.4.3 限定的列 94
6.5 结果集排序 94
6.5.1 通过使用列名称来指定顺序 95
6.5.2 使用表达式指定顺序 96
6.5.3 使用列别名指定顺序 97
6.5.4 使用列的顺序位置 97
6.5.5 ORDER BY和排序规则 97
6.6 SELECT DISTINCT 99
6.7 TOP()谓词 100
6.7.1 WITH TIES选项 102
6.7.2 随机行选择 102
6.8 小结 103
第7章 关系数据库设计和创建物理数据库架构 104
7.1 数据库基础知识 104
7.1.1 数字化数据库的优点 105
7.1.2 表、行和列 105
7.1.3 数据库设计阶段 106
7.1.4 规范化 106
7.1.5 三个“一规则” 107
7.1.6 标识实体 107
7.1.7 泛化 108
7.1.8 主键 109
7.1.9 外键 109
7.1.10 基数 110
7.1.11 可选性 110
7.2 数据设计模式 111
7.2.1 一对多模式 112
7.2.2 一对一模式 112
7.2.3 多对多模式 112
7.2.4 超型/子型模式 114
7.2.5 域完整性查找模式 115
7.2.6 递归模式 116
7.2.7 数据库设计层 118
7.3 范式 118
7.3.1 第一范式(1NF) 118
7.3.2 第二范式(2NF) 119
7.3.3 第三范式(3NF) 120
7.3.4 Boyce-Codd范式(BCNF) 121
7.3.5 第四范式(4NF) 122
7.3.6 第五范式(5NF) 122
7.4 战略考虑事项 122
7.4.1 何时在不同的数据库中单独存储表 122
7.4.2 何时使用何种架构 123
7.5 小结 123
第8章 数据类型、表达式和标量函数 124
8.1 数据类型 124
8.1.1 字符数据类型 124
8.1.2 数值数据类型 125
8.1.3 日期/时间数据类型 125
8.1.4 其他数据类型 126
8.2 构建表达式 126
8.2.1 运算符 127
8.2.2 按位运算符 128
8.2.3 CASE表达式 130
8.2.4 SQL Server 2012新增的逻辑函数 132
8.2.5 使用空值 133
8.3 标量函数 138
8.3.1 用户定义函数 138
8.3.2 日期和时间函数 139
8.3.3 SQL Server 2012新增的函数 142
8.4 字符串函数 143
8.4.1 SUBSTRING(string,starting position,length) 144
8.4.2 STUFF(string,insertion position,delete count,string inserted) 144
8.4.3 CHARINDEX(search string,string,starting position) 144
8.4.4 PATINDEX(pattern,string) 144
8.4.5 RIGHT(string,count)和LEFT(string,count) 145
8.4.6 LEN(string) 145
8.4.7 RTRIM(string)和LTRIM(string) 145
8.4.8 UPPER(string)和LOWER(string) 145
8.4.9 REPLACE(string,string) 145
8.4.10 dbo.pTitleCase(source,search,replace) 147
8.4.11 SQL Server 2012新增的字符串函数 148
8.5 Soundex函数 148
8.5.1 使用SOUNDEX()函数 149
8.5.2 使用DIFFERENCE()Soundex函数 151
8.6 数据类型的转换函数 151
8.7 服务器环境信息 154
8.8 小结 155
第9章 用联接、子查询和CTE合并数据 156
9.1 使用联接 157
9.1.1 内联接 158
9.1.2 外联接 162
9.1.3 自联接 167
9.1.4 交叉联接 168
9.1.5 特殊联接 169
9.2 差集查询 170
9.2.1 左差集查询 170
9.2.2 全差集查询 171
9.3 使用联合 171
9.3.1 UNION ALL查询 171
9.3.2 交集联合 172
9.3.3 差值联合/EXCEPT 173
9.4 子查询 173
9.4.1 简单子查询 174
9.4.2 把子查询用作列表 177
9.4.3 嵌套子查询 177
9.4.4 把子查询用作表 177
9.4.5 相关子查询 179
9.5 小结 182
第10章 聚合、窗口化和排名数据 183
10.1 聚合数据 183
10.1.1 基本聚合 183
10.1.2 聚合、平均和空值 185
10.2 结果集中的分组 185
10.2.1 简单分组 186
10.2.2 分组集 187
10.2.3 筛选已分组的结果 188
10.3 窗口化和排名 189
10.3.1 窗口化 189
10.3.2 OVER()子句 189
10.3.3 在窗口内分区 190
10.4 排名函数 191
10.4.1 ROW_NUMBER()函数 191
10.4.2 RANK()函数和DENSE RANK()函数 193
10.4.3 NTILE()函数 195
10.4.4 聚合函数 196
10.4.5 SQL Server 2012新增的T-SQL特性 197
10.4.6 前一行和当前行 198
10.5 小结 199
第11章 通过视图投影数据 200
11.1 使用视图的理由 200
11.2 基本视图 202
11.2.1 运用QueryDesigner创建视图 202
11.2.2 用DDL代码创建视图 203
11.2.3 执行视图 204
11.2.4 更改并删除视图 205
11.3 从更广泛的角度看视图 206
11.3.1 列别名 206
11.3.2 ORDER BY和视图 206
11.3.3 视图限制 207
11.3.4 嵌套视图 207
11.3.5 通过视图更新 209
11.3.6 视图和性能 209
11.4 锁定视图 210
11.4.1 未经检查的数据 210
11.4.2 保护数据 211
11.4.3 保护视图 212
11.4.4 加密视图的SELECT语句 213
11.4.5 应用程序元数据 213
11.5 运用同义词 214
11.6 小结 214
第12章 在SQL Server中修改数据 215
12.1 插入数据 216
12.1.1 插入简单的值行 216
12.1.2 从SELECT插入结果集 219
12.1.3 从存储过程插入结果集 220
12.1.4 创建默认行 222
12.1.5 在插入数据时创建表 222
12.2 更新数据 224
12.2.1 更新单个表 224
12.2.2 执行全局搜索和替代 225
12.2.3 更新数据时引用多个表 226
12.3 删除数据 230
12.3.1 删除时引用多个数据源 231
12.3.2 级联删除 232
12.3.3 物理删除数据的其他选择 232
12.4 合并数据 233
12.5 返回修改后的数据 237
12.5.1 从插入返回数据 237
12.5.2 从更新返回数据 237
12.5.3 从删除返回数据 238
12.5.4 从合并返回数据 238
12.5.5 把数据返回到表中 239
12.6 小结 239
第Ⅲ部分 高级T-SQL数据类型和查询技术 243
第13章 操作层次结构 243
13.1 HierarchyID 243
13.1.1 选择单个节点 245
13.1.2 搜索祖先节点 246
13.1.3 执行子树搜索 246
13.1.4 插入新节点 247
13.2 HierarchyID方法 248
13.3 索引策略 250
13.4 层次结构数据的备选操作方式 251
13.4.1 递归CTE 251
13.4.2 XML 252
13.5 小结 253
第14章 使用XML数据 254
14.1 XML数据类型 255
14.1.1 类型化XML和非类型化XML 259
14.1.2 XML架构 260
14.1.3 XML列和变量 262
14.1.4 XML参数和返回值 263
14.2 XML数据类型方法 265
14.2.1 XPath 265
14.2.2 value() 265
14.2.3 nodes()方法 266
14.2.4 exist() 266
14.2.5 query()和modify() 266
14.3 FOR XML 267
14.3.1 AUTO 267
14.3.2 RAW 270
14.3.3 EXPLICIT 271
14.3.4 PATH 272
14.4 XQuery与FLWOR操作 274
14.5 小结 275
第15章 分布式查询的执行 276
15.1 分布式查询概述 276
15.2 分布式查询的开发 284
15.2.1 分布式查询和SSMS 284
15.2.2 分布式视图 284
15.2.3 使用分布式事务 287
15.3 性能事项 289
15.3.1 优化分布式查询 289
15.3.2 分片和联合 290
15.4 小结 291
第Ⅳ部分 使用T-SQL编程 295
第16章 使用T-SQL编程 295
16.1 Transact-SQL基础 295
16.1.1 T-SQL批处理 296
16.1.2 T-SQL格式化 297
16.2 操作变量 298
16.2.1 变量默认值和作用域 298
16.2.2 使用SET命令和SELECT命令 299
16.2.3 增量变量 300
16.2.4 条件选择 301
16.2.5 在SQL查询中使用变量 301
16.2.6 多重赋值变量 302
16.3 过程流 303
16.3.1 使用条件T-SQL的IF命令 303
16.3.2 使用WHILE循环 305
16.3.3 使用GOTO命令移动到标签 306
16.4 通过代码分析SQL Server 306
16.4.1 动态管理对象 306
16.4.2 sp help 307
16.4.3 系统函数 308
16.5 临时表和表变量 308
16.5.1 本地临时表 308
16.5.2 全局临时表 309
16.5.3 表变量 310
16.6 SQL Server 2012中关于T-SQL的新增内容 311
16.6.1 调试增强 311
16.6.2 元数据发现 311
16.6.3 OFFSET和FETCH 312
16.7 错误处理 313
16.7.1 遗留错误处理 314
16.7.2 RAISERROR 315
16.7.3 TRY...CATCH 318
16.7.4 T-SQL致命错误 323
16.8 批量操作 323
16.8.1 批量插入 324
16.8.2 BCP 326
16.9 小结 326
第17章 存储过程的开发 327
17.1 管理存储过程 328
17.1.1 创建、更改和删除 328
17.1.2 查看存储过程 329
17.1.3 加密存储过程代码 330
17.1.4 执行存储过程 331
17.1.5 系统存储过程 331
17.2 把数据传递到存储过程 332
17.2.1 输入参数 332
17.2.2 提供列表和表作为存储过程的输入参数 334
17.3 从存储过程中返回数据 338
17.3.1 输出参数 338
17.3.2 RETURN命令的运用 339
17.3.3 结果集 340
17.3.4 返回数据的路径和范围 342
17.4 小结 343
第18章 构建用户定义的函数 344
18.1 标量函数 345
18.1.1 理解限制 345
18.1.2 创建标量函数 346
18.1.3 调用标量函数 347
18.2 内联表值函数 347
18.2.1 创建内联表值函数 348
18.2.2 调用内联表值函数 348
18.2.3 使用参数 349
18.2.4 将用户定义函数相互关联 350
18.2.5 使用架构绑定创建函数 350
18.3 多语句表值函数 351
18.3.1 创建多语句表值函数 351
18.3.2 调用函数 352
18.4 用户定义函数的最佳实践 353
18.4.1 性能最大化 353
18.4.2 使用一致的命名约定 353
18.5 小结 353
第Ⅴ部分 企业数据管理 357
第19章 配置SQL Server 357
19.1 设置选项 357
19.1.1 配置服务器 358
19.1.2 配置数据库 361
19.1.3 配置连接 362
19.1.4 外围应用配置器方面 363
19.2 配置选项 363
19.2.1 显示高级选项 363
19.2.2 启动/停止配置属性 365
19.2.3 内存配置属性 368
19.2.4 处理器配置属性 372
19.2.5 安全配置属性 377
19.2.6 连接配置属性 380
19.2.7 高级服务器配置属性 385
19.2.8 配置数据库自动选项 388
19.2.9 游标配置属性 390
19.2.10 SQL ANSI配置属性 392
19.2.11 触发器配置属性 398
19.2.12 数据库状态配置属性 398
19.2.13 恢复配置属性 400
19.3 小结 403
第20章 基于策略的管理 404
20.1 定义策略 404
20.1.1 管理方面 406
20.1.2 健康条件 407
20.1.3 创建策略 409
20.2 评估策略 413
20.3 小结 414
第21章 备份和恢复计划 415
21.1 恢复概念 416
21.2 恢复模型 417
21.2.1 简单恢复模型 417
21.2.2 完整恢复模型 418
21.2.3 批量日志恢复模型 419
21.2.4 设置恢复模型 420
21.2.5 修改恢复模型 420
21.3 备份数据库 421
21.3.1 备份目标 421
21.3.2 备份轮换 421
21.3.3 用Management Studio执行备份 421
21.3.4 用代码备份数据库 423
21.3.5 用代码验证备份 426
21.4 使用事务日志 426
21.4.1 事务日志内 426
21.4.2 备份事务日志 428
21.4.3 截断日志 429
21.4.4 事务日志和简单恢复模型 429
21.5 恢复操作 429
21.5.1 检测问题 430
21.5.2 恢复顺序 430
21.5.3 用Management Studio执行还原 431
21.5.4 还原个别页面 433
21.5.5 通过T-SQL代码还原 434
21.6 系统数据库恢复 438
21.6.1 master数据库 438
21.6.2 msdb系统数据库 440
21.7 执行完全恢复 440
21.8 小结 441
第22章 维护数据库 442
22.1 DBCC命令 442
22.1.1 数据库完整性 444
22.1.2 数据库文件大小 452
22.1.3 其他DBCC命令 456
22.2 管理数据库维护 457
22.2.1 计划数据库维护 457
22.2.2 维护计划 457
22.2.3 命令行维护 462
22.2.4 监控数据库维护 462
22.3 小结 463
第23章 传输数据库 464
23.1 Copy Database Wizard 465
23.2 使用SQL脚本 467
23.3 分离和附加 470
23.4 Import and Export Wizard 472
23.5 数据层应用程序(DAC) 474
23.6 小结 475
第24章 数据库快照 477
24.1 数据库快照的工作原理 478
24.1.1 数据库快照的机制 478
24.1.2 第一次写时复制 478
24.2 使用数据库快照 479
24.2.1 创建数据库快照 479
24.2.2 查询数据库快照 481
24.2.3 删除数据库快照 482
24.2.4 回滚数据库快照 482
24.3 小结 484
第25章 使用Service Broker进行异步消息传输 485
25.1 配置消息队列 486
25.2 使用对话 488
25.2.1 将消息发送到队列 488
25.2.2 接收消息 489
25.3 SQL Server 2012中ServiceBroker的新增功能 491
25.3.1 消息多播 491
25.3.2 AlwaysOn支持 491
25.3.3 有害消息处理 492
25.3.4 消息排队时间 492
25.4 监控Service Broker和排除故障 492
25.5 小结 493
第26章 日志传送 494
26.1 可用性测试 495
26.2 温备用可用性 495
26.3 定义日志传送 496
26.4 检查日志传送配置 504
26.5 监视日志传送 505
26.6 修改或删除日志传送 506
26.7 切换角色 508
26.8 小结 509
第27章 数据库镜像 510
27.1 数据库镜像概述 511
27.2 定义和配置数据库镜像 512
27.3 检查数据库镜像配置 520
27.4 监控数据库镜像 522
27.4.1 使用Database Mirroring Monitor监控 522
27.4.2 使用System Monitor监控 525
27.4.3 使用SQL Server Profiler监控 525
27.5 暂停或删除数据库镜像 526
27.6 角色切换 526
27.7 高可用性/AlwaysOn 528
27.7.1 要求和前提条件 528
27.7.2 配置AlwaysOn Availability Groups 529
27.7.3 监控AlwaysOn Availability Groups 536
27.8 小结 537
第28章 复制数据 538
28.1 在服务器之间移动数据 538
28.1.1 批量复制程序 539
28.1.2 SSIS 539
28.1.3 分发式事务 539
28.1.4 触发器 539
28.1.5 Copy Database Wizard 539
28.1.6 备份和还原 539
28.1.7 日志传送 540
28.1.8 数据库镜像 540
28.2 复制的概念 540
28.2.1 复制的类型 540
28.2.2 复制代理 541
28.2.3 事务一致性 542
28.3 配置复制 542
28.3.1 创建发布服务器和分发服务器 542
28.3.2 使用远程分发服务器 543
28.3.3 创建一个快照/事务发布 544
28.3.4 创建事务/快照发布的推送订阅 546
28.3.5 创建事务/快照发布的请求订阅 547
28.3.6 创建对等拓扑 548
28.3.7 创建一个合并发布 548
28.3.8 Web同步 549
28.4 小结 550
第29章 群集 551
29.1 群集的功能 551
29.1.1 高可用性和可伸缩性 551
29.1.2 在线的含义 552
29.1.3 群集的工作原理 552
29.2 配置群集 553
29.2.1 配置Windows Server 2008/2008R2的群集 553
29.2.2 把SQL Server 2012安装为群集实例 558
29.2.3 测试故障转移 565
29.3 小结 566
第30章 用PowerShell配置和管理SQL Server 567
30.1 使用PowerShell的原因 567
30.2 PowerShell基本知识 568
30.2.1 语言特性 568
30.2.2 创建脚本 573
30.3 SQL Server PowerShell扩展 577
30.3.1 导入模块 577
30.3.2 SQL PSDrive—SQLSERVER 577
30.3.3 SQL cmdlet 578
30.4 通过SMO与SQL Server通信 580
30.4.1 SQL Server管理对象 580
30.4.2 ADO.NET 583
30.5 编写SQL Server任务脚本 585
30.5.1 管理任务 585
30.5.2 基于数据的任务 588
30.6 小结 589
第31章 管理WindowsAzure SQL Database中的数据 590
31.1 Azure SQL Database概述 590
31.2 管理WindowsAzure SQLDatabase 590
31.2.1 SQL Server ManagementStudio 591
31.2.2 Windows Azure SQL Database管理器 592
31.2.3 在SQL Database中创建数据库 592
31.3 高可用性和可伸缩性 593
31.3.1 高可用性 593
31.3.2 可伸缩性 594
31.4 把数据迁移到SQL Database中 594
32.4.1 生成脚本向导 595
31.4.2 SQL Server Integration Services 601
31.4.3 使用bcp实用工具 608
31.5 小结 610
第Ⅵ部分 SQL Server的安全 613
第32章 SQL Server中的身份验证类型 613
32.1 Windows身份验证 615
32.2 SQL身份验证 615
32.3 SQL和Windows身份验证之间的区别 616
32.4 Kerberos和Windows身份验证委托 616
32.5 小结 617
第33章 授权安全对象 618
33.1 权限链 618
33.2 对象所有权 619
33.3 安全对象的权限 619
33.4 对象安全 620
33.4.1 用户自定义数据库角色 620
33.4.2 对象权限 620
33.4.3 用代码授予对象权限 621
33.4.4 用代码撤消和拒绝对象权限 622
33.4.5 公共角色 623
33.4.6 用代码管理角色 623
33.4.7 分层角色结构 624
33.4.8 对象安全和Management Studio 624
33.5 一个示例安全模型 625
33.6 视图和安全 625
33.7 小结 626
第34章 数据加密 627
34.1 数据加密简介 627
34.1.1 密钥的层次结构 628
34.1.2 用T-SQL加密 628
34.1.3 用对称密钥加密 630
34.1.4 使用非对称密钥 631
34.1.5 使用证书 632
34.2 小结 632
第35章 行级安全性 633
35.1 Security表 633
35.2 分配权限 635
35.2.1 分配安全性 635
35.2.2 处理安全级别的更新 638
35.3 检查权限 640
35.3.1 安全检查存储过程 640
35.3.2 安全检查函数 641
35.3.3 使用Windows登录 642
35.3.4 安全检查触发器 644
35.4 小结 644
第Ⅶ部分 监视和审计 647
第36章 触发器的创建 647
36.1 触发器基础 647
36.1.1 事务流 648
36.1.2 触发器的创建 648
36.1.3 AFTER触发器 649
36.1.4 INSTEAD OF触发器 650
36.1.5 触发器限制 651
36.1.6 禁用触发器 651
36.1.7 列出触发器 652
36.1.8 触发器和安全性 652
36.2 处理事务 652
36.2.1 确定已更新的列 653
36.2.2 inserted和deleted逻辑表 654
36.2.3 开发支持多行的触发器 655
36.3 多个触发器之间的交互 656
36.3.1 触发器的组织 657
36.3.2 嵌套触发器 657
36.3.3 递归触发器 658
36.3.4 INSTEAD OF触发器和AFTER触发器一起使用 660
36.3.5 多个AFTER触发器 660
36.4 事务聚合处理 660
36.4.1 库存事务触发器 661
36.4.2 库存触发器 662
36.5 DDL触发器 664
36.6 DDL触发器的管理 664
36.6.1 创建和更改DDL触发器 664
36.6.2 触发器的作用域 665
36.6.3 DDL触发器和安全性 666
36.6.4 启用和禁用DDL触发器 666
36.6.5 删除DDL触发器 667
36.7 DDL触发器的开发 667
36.7.1 EventData()函数 667
36.7.2 避免数据库对象的更改 668
36.8 小结 669
第37章 性能监视器和PAL 670
37.1 使用PeffMon 670
37.1.1 系统监视器 670
37.1.2 Data Collector Set 673
37.1.3 使用PowerShell访问性能计数器 674
37.2 小结 676
第38章 使用Profiler和SQL Trace 677
38.1 SQL Server Profiler的功能 677
38.2 运行Profiler 677
38.2.1 定义新的跟踪 678
38.2.2 选择事件和数据列 678
38.2.3 筛选事件 680
38.2.4 组织列 680
38.2.5 运行跟踪 681
38.2.6 使用跟踪文件 681
38.2.7 集成性能监视器数据 681
38.3 使用SQL Trace 682
38.4 小结 684
第39章 等待状态 685
39.1 SQL Server OS 685
39.2 查看等待状态统计信息 686
39.2.1 执行请求 686
39.2.2 等待状态统计信息 686
39.2.3 等待请求 687
39.3 常见的红旗等待类型 687
39.4 收集等待数据的其他方式 688
39.5 小结 688
第40章 Extended Events 689
40.1 Extended Events对象模型 689
40.1.1 包 689
40.1.2 事件 690
40.1.3 动作 690
40.1.4 目标 691
40.1.5 谓词 691
40.1.6 映射 691
40.1.7 会话 692
40.1.8 通道 692
40.2 system_health会话 692
40.3 Extended Events Profiler 692
40.4 小结 694
第41章 数据更改的跟踪和捕获 695
41.1 配置Change Tracking 695
41.1.1 启用数据库 696
41.1.2 自动清理 696
41.1.3 启用表 697
41.1.4 内部表 698
41.2 查询Change Tracking 699
41.2.1 版本号 699
41.2.2 行变更 700
41.3 删除Change Tracking 701
41.4 Change_Data Capture 702
41.5 SQL Server 2012中的新增功能 703
41.6 启用CDC 703
41.6.1 启用数据库 703
41.6.2 启用表 704
41.7 使用Change Data Capture 705
41.7.1 检查日志序号 705
41.7.2 查询变更表 706
41.7.3 查询净更改 708
41.7.4 迭代变更表 710
41.8 删除Change Data Capture 710
41.9 小结 711
第42章 SQL Audit 712
42.1 SQL Audit技术概述 712
42.2 创建Audit对象 713
42.2.1 定义目标 714
42.2.2 使用T-SQL 714
42.2.3 启用/禁用审计 715
42.3 ServerAudit Specification 715
42.3.1 添加操作 716
42.3.2 用T-SQL创建 716
42.3.3 修改Server Audit Specification 716
42.4 Database Audit Specification 716
42.5 查看审计线索 717
42.6 小结 718
第43章 管理数据仓库 719
43.1 使用管理数据仓库 719
43.2 配置MDW 720
43.3 建立数据集合 723
43.4 查看MDW报表 724
43.4.1 磁盘使用情况汇总 724
43.4.2 服务器活动历史报表 725
43.4.3 查询统计信息报表 726
43.5 创建定制的数据收集器集合 726
43.6 小结 728
第Ⅷ部分 性能调整和优化 731
第44章 解释查询执行计划 731
44.1 查看查询执行计划 732
44.1.1 估计和实际查询执行计划 732
44.1.2 阅读执行计划 732
44.1.3 使用Showplan和STATISTICS PROFILE 733
44.1.4 SQLP rofiler的执行计划 734
44.2 理解查询执行计划 735
44.3 小结 736
第45章 索引策略 737
45.1 索引的艺术 737
45.2 索引基础 738
45.2.1 B-树索引 738
45.2.2 聚集索引 738
45.2.3 非聚集索引 739
45.2.4 复合索引 740
45.2.5 唯一索引和约束 740
45.2.6 页面分隔问题 740
45.2.7 索引选择性 741
45.2.8 无序的堆 742
45.2.9 查询操作 742
45.3 查询路径 743
45.3.1 查询路径1:提取所有数据 745
45.3.2 查询路径2:聚集索引查找 745
45.3.3 查询路径3:范围查找查询 745
45.3.4 查询路径4:用非键列筛选 747
45.3.5 查询路径5:书签查找 748
45.3.6 查询路径6:覆盖索引 749
45.3.7 查询路径7:用2个NC索引来筛选 752
45.3.8 查询路径8:用有序的复合索引筛选 753
45.3.9 查询路径9:用无序的复合索引筛选 753
45.3.10 查询路径10:Non-SARG-able表达式 754
45.4 全面的索引策略 755
45.4.1 标识重要查询 755
45.4.2 选择聚集索引 756
45.4.3 创建基索引 757
45.5 特殊索引 757
45.5.1 筛选索引 757
45.5.2 索引视图 758
45.5.3 Columnstore索引 760
45.6 小结 760
第46章 最大限度地重用查询计划 762
46.1 查询编译 762
46.1.1 Query Optimizer 762
46.1.2 查看Plan Cache 763
46.1.3 查询计划的生存期 764
46.1.4 执行查询计划 764
46.2 查询重编译 764
46.3 小结 765
第47章 管理事务、锁定和阻塞 766
47.1 ACID属性 767
47.1.1 原子性 767
47.1.2 一致性 767
47.1.3 隔离性 767
47.1.4 持久性 768
47.2 事务的编程 768
47.2.1 逻辑事务 768
47.2.2 Xact_State()函数 769
47.2.3 Xact_Abort 769
47.2.4 嵌套事务 770
47.2.5 隐式事务 770
47.2.6 保存点 771
47.3 默认的锁定和阻塞行为 771
47.4 监控锁定和阻塞 773
47.4.1 使用ManagementStudio报表查看阻塞 773
47.4.2 使用Activity Monitor查看阻塞 774
47.4.3 使用Profiler 775
47.4.4 使用动态管理视图查询锁 775
47.5 死锁 776
47.5.1 创建死锁 777
47.5.2 自动检测死锁 779
47.5.3 处理死锁 779
47.5.4 最小化死锁 780
47.6 理解SQL Server锁定 781
47.6.1 锁粒度 781
47.6.2 锁模式 781
47.6.3 控制锁定超时 783
47.6.4 锁定持续时间 783
47.6.5 索引级的锁定限制 783
47.7 事务隔离级别 784
47.7.1 设置事务隔离级别 785
47.7.2 级别1——Read Uncommitted和脏读取 786
47.7.3 级别2——Read Committed 787
47.7.4 级别3——Repeatable Read 787
47.7.5 级别4——Serializable 790
47.7.6 快照隔离 793
47.7.7 使用锁定提示 795
47.8 应用程序锁 796
47.9 应用程序锁定设计 797
47.9.1 实现乐观锁定 797
47.9.2 丢失更新 797
47.10 事务日志的体系结构 798
47.10.1 事务日志序列 798
47.10.2 事务日志恢复 800
47.11 事务性能策略 801
47.12 小结 802
第48章 数据压缩 803
48.1 理解数据压缩 803
48.1.1 数据压缩的优缺点 804
48.1.2 行压缩 805
48.1.3 页面压缩 805
48.1.4 压缩序列 806
48.2 应用数据压缩 807
48.2.1 确定当前压缩设置 807
48.2.2 估计数据压缩 807
48.2.3 启用数据压缩 808
48.2.4 数据压缩策略 809
48.3 小结 810
第49章 分区 811
49.1 分区策略 811
49.2 分区视图 812
49.3 已分区表和索引 817
49.3.1 创建文件组 818
49.3.2 创建分区函数 820
49.3.3 创建分区模式 820
49.3.4 创建分区表 821
49.3.5 查询分区表 822
49.3.6 修改分区表 822
49.3.7 切换表 823
49.3.8 滚动分区 825
49.3.9 给已分区表建立索引 826
49.3.10 删除分区 826
49.4 小结 826
第50章 Resource Governor 827
50.1 研究Resource Governor的基础知识 827
50.1.1 理解资源池 827
50.1.2 工作负载组 830
51.1.3 分类器函数 832
50.2 Resource Governor的性能监控 833
50.3 视图和限制 834
50.4 小结 834
第Ⅸ部分 商业智能 837
第51章 BI数据库设计 837
51.1 数据仓库 837
51.2 使用星型架构设计数据仓库 838
51.3 用雪片型架构设计数据仓库 839
51.4 在数据仓库中确保一致性 839
51.5 加载数据 840
51.5.1 加载维度 840
51.5.2 加载事实表 842
51.5.3 修改维度中的数据 842
51.6 小结 843
第52章 在Integration Services中建立、部署和管理ETL工作流 844
52.1 SSIS环境概述 845
52.1.1 在SQL Server Data Services中创建基本的SSIS包 846
52.1.2 使用UI改进功能方便地配置一个数据流任务中的包元素 848
52.2 SSIS环境详述 852
52.2.1 使用连接管理器 852
52.2.2 使用控制流元素 854
52.2.3 使用数据流组件 858
52.2.4 使用参数和变量 863
52.2.5 变量 864
52.2.6 使用SSIS表达式语言 865
52.2.7 使用包的日志记录 866
52.3 部署、执行项目和包 866
52.3.1 使用包部署模型 866
52.3.2 从(旧)包模型转换为项目模型 867
52.3.3 使用项目部署模型 867
52.3.4 使用SSIS服务器执行项目和包 868
52.4 小结 870
第53章 在Analysis Services中使用MDX构建多维数据集 871
53.1 Analysis Services的快速启动 871
53.2 Analysis Services体系结构 872
53.2.1 统一维度模型 872
53.2.2 服务器 872
53.2.3 客户端 873
53.3 构建数据库 873
53.3.1 SQL Server Data Tools 873
53.3.2 数据源 873
53.3.3 数据源视图 874
53.3.4 创建多维数据集 877
53.4 维度 877
53.4.1 创建维度 877
53.4.2 常规维度之外的内容 880
53.4.3 维度的细化 880
53.5 多维数据集 881
53.5.1 维度的使用 883
53.5.2 Calculations选项卡 883
53.5.3 KPI 884
53.5.4 动作 884
53.5.5 分区 884
53.5.6 聚合函数的设计 885
53.5.7 透视 886
53.6 数据存储 887
53.7 多维数据集的处理 887
53.7.1 处理方法 888
53.7.2 其他考虑 888
53.7.3 空值处理 889
53.7.4 未知成员 889
53.7.5 错误配置 889
53.8 小结 889
第54章 配置和管理Analysis Services 890
54.1 安装Analysis Services 890
54.2 配置Analysis Services的基本设置 893
54.3 高级SSAS部署 894
54.4 使用SQL Profiler评估查询性能 895
54.5 小结 896
第55章 使用Reporting Services编写报表 897
55.1 报表编写环境 897
55.1.1 SQL ServerDataTools(SSDT)中的Report Designer 898
55.1.2 Report Builder 898
55.1.3 PowerView 898
55.2 报表的基本组成 898
55.2.1 数据源 898
55.2.2 数据集 899
55.2.3 报表定义语言(RDL)文件 899
55.3 用Report Wizard建立报表 900
55.4 从头编写报表 901
55.5 研究Report Designer 902
55.5.1 设计界面 902
55.5.2 Solution Explorer和Properties 902
55.5.3 Report Data和Toolbox面板 903
55.5.4 文本框属性窗口 904
55.6 使用Reporting Services功能显示数据 905
55.6.1 创建Matrix报表 905
55.6.2 处理多维数据集 905
55.6.3 使用参数 907
55.6.4 使用RS Expressions 909
55.7 设计报表布局 909
55.7.1 选择报表类型 909
55.7.2 分组和排序 910
55.7.3 使用图表工具 910
55.8 用Report Builder建立报表 912
55.8.1 用Report Builder创建报表 912
55.8.2 使用Report Gallery 914
55.9 小结 915
第56章 配置和管理Reporting Services 916
56.1 安装Reporting Services 916
56.1.1 本机模式 916
56.1.2 SharePoint集成模式 917
56.2 部署Reporting Services报表 919
56.2.1 使用SSDT部署报表 919
56.2.2 使用Report Manager部署报表——本机模式 920
56.2.3 在SharePoint中部署报表 920
56.3 用Reporting Services管理安全 922
56.3.1 在本机模式下管理角色 923
56.3.2 用角色管理访问权限 924
56.3.3 管理订阅 926
56.3.4 创建数据驱动的订阅 927
56.3.5 集成模式下的Data Alerts 927
56.4 灾难恢复 927
56.4.1 备份目录 928
56.4.2 备份对称密钥 928
56.4.3 还原Reporting Services 929
56.5 小结 929
第57章 使用Analysis Services挖掘数据 930
57.1 数据挖掘过程 930
57.2 使用Analysis Services建模 931
57.2.1 数据挖掘向导 931
57.2.2 挖掘模型 932
57.2.3 模型评估 933
57.3 算法 936
57.3.1 决策树 936
57.3.2 线性回归 937
57.3.3 聚类分析 937
57.3.4 序列聚类分析 938
57.3.5 神经网络 938
57.3.6 逻辑回归 938
57.3.7 Naive Bayes 939
57.3.8 关联规则 940
57.3.9 时间序列 940
57.4 多维数据集集成 941
57.5 小结 941
第58章 创建和部署BI语义模型 942
58.1 BI语义模型的含义 942
58.2 开发环境 943
58.3 使用PowerPivot创建BI语义模型 945
58.4 用PowerPivot扩展BI语义模型 948
58.4.1 在PowerPivot中创建KPI 948
58.4.2 在PowerPivot中创建层次结构 950
58.4.3 在PowerPivot中创建透视图 953
58.5 把BI语义模型部署到SharePoint上 955
58.6 在SharePoint 2010中管理PowerPivot工作簿数据的自动刷新 955
58.7 使用SQL Server Data Tools创建BI语义模型 956
58.8 用SQL Server Data Tools扩展BI语义模型 957
58.9 把BI语义模型部署到Analysis Services实例上 959
58.9.1 部署选项 959
58.9.2 部署服务器选项 960
58.9.3 DirectQuery选项 960
58.10 小结 960
第59章 创建和部署PowerView报表 961
59.1 Power View的要求 961
59.1.1 服务器端的要求 961
59.1.2 客户端的要求 961
59.2 用Power View创建和部署报表 962
59.2.1 创建连接文件库 963
59.2.2 创建Report Data Source文件 963
59.2.3 创建BI Semantic Model Connection文件 965
59.2.4 用Power View创建报表 966
59.3 部署Power View报表 973
59.4 小结 974