第1章 启动与配置 1
1.1 SQL Server启动的奥秘 1
1.1.1 剖析【事件查看器】中记录的启动信息 1
1.1.2 SQL Server服务器的黑匣子——错误日志 3
1.1.3 总结SQL Server启动的过程 8
1.1.4 Master数据库发生故障的启动信息 9
1.1.5 Model数据库发生故障的启动信息 10
1.1.6 Tempdb数据库发生故障的启动信息 12
1.1.7 Msdb数据库发生故障的启动信息 15
1.1.8 重建Master数据库 17
1.1.9 单用户模式启动 19
1.2 配置SQL Server网络 21
1.2.1 IPC 21
1.2.2 Net-Library 22
1.2.3 配置共享内存网络 24
1.2.4 配置TCP/IP网络 27
1.3 TDS协议 30
1.3.1 TDS的概念 31
1.3.2 TDS的作用 32
1.3.3 TDS的结构 33
第2章 未公开的DBCC命令 35
2.1 DBCC PAGE 35
2.1.1 查询DBID和DBNAME 36
2.1.2 查询FILENUM和PAGENUM 36
2.1.3 DBCC PAGE的典型用法 37
2.1.4 英文原文 38
2.2 DBCC LOG 39
2.2.1 命令详解 39
2.2.2 英文原文 39
2.3 DBCC ERRORLOG 41
2.3.1 命令详解 41
2.3.2 英文原文 42
2.4 DBCC FLUSHPROCINDB 43
2.4.1 命令详解 43
2.4.2 英文原文 44
2.5 DBCC BUFFER 44
2.5.1 命令详解 44
2.5.2 英文原文 45
2.6 DBCC DBINFO 47
2.7 DBCC DBTABLE 47
2.8 DBCC IND 48
2.9 DBCC PROCBUF 49
2.9.1 命令详解 49
2.9.2 英文原文 50
2.10 DBCC PRTIPAGE 50
2.11 DBCC PSS 52
2.12 DBCC RESOURCE 53
2.13 DBCC TAB 53
2.14 DBCC BUFCOUNT 54
2.15 DBCC DBRECOVER 56
2.16 DBCC DES 56
2.17 DBCC MEMUSAGE 57
2.18 DBCC PGLINKAGE 58
2.18.1 命令详解 58
2.18.2 英文原文 60
2.18.3 对DBCC PGLINKAGE命令的勘误 60
2.19 DBCC CACHESTATS 63
2.19.1 命令详解 63
2.19.2 英文原文 64
2.20 DBCC MEMORYSTATUS 64
2.21 DBCC SQLMGRSTATS 65
2.22 DBCC跟踪标记 67
2.22.1 概念 67
2.22.2 打开跟踪标记 69
2.22.3 关闭跟踪标��� 69
2.22.4 查询跟踪标记状态 69
第3章 体系结构 71
3.1 SQL Server引擎结构 71
3.1.1 引擎的工作过程 71
3.1.2 引擎的内部结构 73
3.2 进程结构 76
3.2.1 进程(Process) 76
3.2.2 线程(Thread) 78
3.2.3 纤程(Fiber) 79
3.2.4 SQL Server如何管理线程和纤程 80
3.2.5 配置SQL Server线程模式 81
3.2.6 配置SQL Server纤程模式 82
3.2.7 提升SQL Server优先级 82
3.2.8 配置多CPU的实例 85
3.3 存储结构 86
3.3.1 存储数据的文件 87
3.3.2 存储数据的对象 87
3.3.3 页面(Page) 88
3.3.4 盘区(Extent) 89
3.4 内存结构 90
3.4.1 计算机的Memory、Cache和Buffer 91
3.4.2 SQL Server的Cache和Buffer 93
3.4.3 内存组成部分 93
3.4.4 Hash——Buffer管理机制 94
3.4.5 LRU——Buffer的更新机制 95
3.4.6 查看Hash Bucket 96
3.4.7 查看Buffer的内容 97
第4章 数据的存储 101
4.1 系统表 101
4.1.1 Sysaltfiles 102
4.1.2 Syscacheobjects 103
4.1.3 Sysdatabases 105
4.1.4 Sysobjects 106
4.1.5 Sysfiles 108
4.1.6 Sysindexes 109
4.2 数据库的数据 111
4.2.1 数据库状态值的奥秘 111
4.2.2 数据库的总大小 114
4.2.3 用DBCC EXTENTINFO查询数据库盘区数 116
4.3 数据文件的数据 117
4.3.1 数据文件的读写机制 118
4.3.2 查看数据文件的空间使用率 118
4.3.3 Master数据库启动的奥秘 119
4.3.4 总结数据库启动的奥秘 121
4.3.5 数据文件头部信息的奥秘 121
4.3.6 BindingID蕴含的奥秘 125
4.3.7 使用DBCC PAGE命令的说明 132
4.4 表的数据 132
4.4.1 查询表的ID 132
4.4.2 查询表的第1个页面 133
4.4.3 查询表上分配的页面 134
4.4.4 查询表的页面 135
4.5 索引的数据 136
4.5.1 堆数据存储的奥秘 136
4.5.2 聚集索引数据存储的奥秘 145
4.5.3 非聚集索引数据存储的奥秘 155
4.6 盘区(Extent) 164
4.6.1 盘区的类型 165
4.6.2 分配盘区的策略 165
4.6.3 GAM管理盘区的机制 165
4.6.4 SGAM管理混合盘区的机制 168
4.6.5 给数据对象分配盘区的机制 170
4.7 页面(Page) 170
4.7.1 页面的类型 170
4.7.2 页面的结构 171
4.7.3 页面的数据 172
第5章 事务日志 181
5.1 事务(Transaction) 181
5.1.1 事务的特性 182
5.1.2 事务的状态 183
5.1.3 SQL Server 2000的事务模式 184
5.2 日志文件(Transaction Log) 186
5.2.1 VLF的奥秘 186
5.2.2 日志文件的WAL机制的奥秘 188
5.3 日志记录(Log Record) 190
5.3.1 日志记录的类型 191
5.3.2 用DBCC LOG研究日志记录的数据 191
5.3.3 研究完整事务的日志记录 192
5.4 专业的研究日志工具 197
5.4.1 安装Log Explorer 198
5.4.2 附加日志文件 201
5.4.3 研究日志总体情况 203
5.4.4 负载分析 204
5.4.5 查询日志记录 206
5.4.6 实时监控日志 207
5.5 SQL语句与日志的关系 208
5.5.1 Select语句与日志的关系 208
5.5.2 Insert语句与日志的关系 210
5.5.3 Update语句与日志的关系 216
5.5.4 Delete语句与日志的关系 223
第6章 LSN 229
6.1 文件的LSN 229
6.1.1 查询数据文件的LSN 229
6.1.2 BackupLSN的奥秘 230
6.1.3 日志文件的LSN 232
6.2 数据页面的m_lsn的奥秘 233
6.2.1 查询页面的m_lsn 233
6.2.2 查询m_lsn对应的日志记录 234
6.2.3 剖析日志记录的含义 235
6.2.4 结论 236
第7章 深入剖析备份与恢复机制 237
7.1 无处不在的故障 237
7.1.1 事务故障 237
7.1.2 系统故障 238
7.1.3 介质故障 238
7.1.4 DBA需要应对的故障 239
7.2 不同类型故障的恢复机制 239
7.2.1 事务故障的恢复机制 239
7.2.2 系统故障的恢复机制 240
7.2.3 介质故障的恢复机制 240
7.3 基于事务日志的备份和恢复机制 241
7.3.1 经典的事务日志结构 241
7.3.2 Redo(重做)事务 241
7.3.3 Undo(回滚)事务 243
7.4 SQL Server事务日志的恢复机制 244
7.4.1 剖析日志记录结构的奥秘 244
7.4.2 Previous Page LSN参数的奥秘 247
7.4.3 Undo的实现机制 249
7.4.4 Redo的实现机制 250
7.5 检查点机制 251
7.5.1 检查点的操作 251
7.5.2 检查点与恢复效率的关系 252
7.5.3 MinLSN的选择 253