读书人

SQL Server 2008数据库技术内幕(李爱武

发布时间: 2012-11-12 14:58:27 作者: 田群

编辑推荐

《SQL Server 2008数据库技术内幕》非常适合那些和笔者一样困扰于底层原理,又喜欢研究、验证底层原理的读者。《SQL Server 2008数据库技术内幕》适合数据库管理员等有一定经验的相关技术人员使用,同时也可作为大学计算机专业师生数据库技术的参考用书。

目录

第1篇 体系结构基础
第1章 服务器体系结构与配置
1.1 启动SQL Server服务器
1.1.1 使用net start命令启动
1.1.2 使用Windows服务管理器工具启动
1.2 客户端工具
1.2.1 客户端工具sqlcmd和SSMS 比较
1.2.2 sqlcmd的使用方法
1.2.3 SQL Server Management Studio的使用方法
1.3 服务器体系结构
1.4 内存结构
1.4.1 data cache
1.4.2 plan cache
1.4.3 Workspace缓存
1.5 lazywriter进程、checkpoint进程及worker线程
1.5.1 lazywriter进程
1.5.2 checkpoint进程
1.5.3 worker线程
1.6 数据库及其构成
1.6.1 系统数据库
1.6.2 文件与文件组
1.7 服务器配置
1.7.1 显示服务器配置信息
1.7.2 修改服务器配置参数
1.8 数据库配置
1.8.1 显示数据库配置信息
1.8.2 修改数据库配置信息
第2章 系统基表、系统视图与resource数据库
2.1 系统基表
2.1.1 查看所有系统基表
2.1.2 以DAC连接查看系统基表中的数据
2.1.3 连接APPLE服务器上默认SQL Server实例
2.2 系统视图及其分类
2.2.1 SQL Server系统视图分类
2.2.2 查询resource数据库存储的系统视图信息
2.3 访问resource数据库
2.3.1 查看resource数据库信息
2.3.2 查看系统视图定义
2.3.3 在服务器中附加resource数据库
2.4 系统视图的简单应用:查询表的结构
第2篇 堆表与索引数据存储格式
第3章 文件存储格式常用研究工具
3.1 几个常用的dbcc命令
3.1.1 SQL Server产品与dbcc命令的关系
3.1.2 dbcc extentinfo、dbcc ind和dbcc page用法
3.1.3 跟踪标记的启用与关闭
3.1.4 dbcchelp—得到所有dbcc命令名称及其语法信息
3.1.5 dbcc extentinfo—得到对象分配到的区信息
3.1.6 dbccind—得到对象分配到的数据页信息
3.1.7 dbccpage—以指定格式导出数据页数据
3.2 十六进制数据编辑工具——WinHex
3.2.1 设置打开文件的方式
3.2.2 转到指定偏移量
3.2.3 在WinHex中查看和修改SQL Server文件数据
3.2.4 使用dbcc writepage命令修改数据页数据
第4章 数据页结构
4.1 数据页类型
4.2 应用dbcc fileheader和dbcc dbinfor命令查看数据页内容
4.3 在数据文件中定位数据页
4.4 数据页结构
4.4.1 数据页中三部分数据实例展示
4.4.2 页头
4.4.3 数据部分
4.4.4 偏移量列表
第5章 堆表数据的存储方式
5.1 行内数据、行溢出数据和大对象数据
5.1.1 三类数据的含义
5.1.2 记录长度不能超过8060字节
5.1.3 分配单元
5.2 记录类型
5.3 记录的存储格式
5.4 行内数据与行溢出数据的存储方式
5.4.1 行内数据的存储方式
5.4.2 行溢出数据的存储方式
5.5 forwarded/forwarding记录的存储
5.6 大对象数据的存储
5.6.1 large value types out of row参数设置为0的情形
5.6.2 large value types out ofrow参数设置为1的情形
第6章 索引数据的存储方式
6.1 堆表的非聚集索引结构
6.1.1 记录的RowID
6.1.2 如何查看RowID
6.1.3 非聚集索引整体结构
6.1.4 叶结点索引记录存储方式
6.1.5 分支结点索引记录存储方式
6.2 聚集索引结构
6.2.1 叶结点记录存储方式
6.2.2 分支结点索引记录存储方式
6.2.3 聚集索引上创建的非聚集索引结构
6.3 约束与索引的关系
6.4 DML语句对索引的影响
6.4.1 delete语句对索引的影响
6.4.2 delete语句对索引影响的讨论
6.4.3 insert操作对索引的影响
6.4.4 update操作对索引的影响
6.4.5 truncate table命令对索引的影响
第7章 多版本数据存储方式
7.1 事务
7.1.1 事务的ACID属性
7.1.2 commit与rollback命令
7.1.3 客户端事务模式
7.1.4 事务隔离级别
7.2 开启read_committed_snapshot参数后产生的多版本数据
7.2.1 参数开启前后"行数据存储方式"的变化
7.2.2 update产生的旧版本数据及版本信息
7.2.3 delete操作产生的旧版本数据及版本信息数据
7.3 开启allow_snapshotjsolation参数产生的多版本数据
7.3.1 多版本数据产生的过程
7.3.2 allow_snapshot_isolation参数开启前后"行记录的存储方式"
7.3.3 snapshot隔离级别下产生的多版本数据
7.3.4 开启allow_snapshot_isolation参数是否解决读等待写
第3篇 空间管理与数据校验
第8章 SQL Server空间管理数据页
8.1 空间管理相关数据页
8.2 可用区跟踪—GAM及SGAM数据页
8.2.1 GAM和SGAM数据页的组合值
8.2.2 查找混合区可用数据页的流程图
8.2.3 新建数据文件的GAM与SGAM位图数据
8.2.4 分配一个混合区后的GAM与SGAM位图数据
8.2.5 分配多个混合区及多个专用区后的GAM与SGAM位图数据
8.2.6 禁止单数据页分配
8.3 数据页可用空间跟踪——PFS数据页
8.3.1 PFS如何跟踪数据页可用空间
8.3.2 新数据库文件的PFS数据
8.3.3 添加堆表数据对PFS的影响
8.3.4 删除堆表数据对PFS的影响
8.4 差异备份内容跟踪——DCM数据页
8.4.1 DCM原理分析实例
8.4.2 全库备份后的DCM数据
8.4.3 全库备份后数据修改导致的DCM数据变化
8.4.4 全库备份后的DCM数据重置
8.5 大容量操作改变的区跟踪——BCM数据页
8.5.1 bcp命令实例分析BCM原理
8.5.2 全库备份或日志备份后的BCM初始数据
8.5.3 大容量操作后的BCM数据
8.5.4 执行事务日志备份的BCM数据重置
8.6 实体空间跟踪——IAM数据页
8.6.1 分配单元(allocation unit)及IAM链
8.6.2 IAM数据页的内容
8.6.3 利用IAM数据页检索实体数据的过程
8.6.4 执行全表扫描的步骤
8.6.5 对表添加记录时的步骤
第9章 堆表数据删除或修改后的空间重用
9.1 delete操作引起的数据页内容变化
9.1.1 delete操作引起数据页内容的5种变化
9.1.2 展示数据变化的实例
9.2 删除数据所占空间的重用
9.2.1 空闲空间足够容纳新记录的情形
9.2.2 数据页中数据的重新组织
9.3 修改数据后的空间重用
9.3.1 定长记录
9.3.2 记录长度未增长
9.3.3 记录长度增长可存储在页尾空闲空间
9.3.4 记录长度增长可存储在重组后的页尾空闲空间
9.3.5 记录长度增长不能存储在重组后的页尾空闲空间
9.4 未附加条件的delete、truncate和drop table操作
9.4.1 准备测试数据
9.4.2 添加测试数据后的空间管理数据页初始状态
9.4.3 delete操作产生的重做数据量
9.4.4 delete操作引起的GAM、PFS和IAM数据变化
9.4.5 truncate操作产生的重做数据量
9.4.6 truncate操作引起的GAM、PFS和IAM数据变化
9.5 删除操作导致的锁
9.5.1 delete操作导致的锁
9.5.2 truncate操作导致的锁
9.5.3 droptable操作导致的锁
第10章 数据页I/O校验和与残缺页保护
10.1 与数据页I/O保护机制有关的页头数据
10.2 设置数据页I/O保护机制
10.3 校验和机制
10.3.1 校验和原理
10.3.2 模拟I/O错误查看校验和保护的效果
10.3.3 m_flagBits的作用
10.4 残缺页检测机制
10.4.1 残缺页检测实现原理
10.4.2 准备测试数据
10.4.3 验证m_tornBits的构造过程
10.4.4 模拟数据页I/O错误查看残缺页检测效果
10.4.5 m_flagBits的作用
……
第4篇 重做日志原理
第5篇 执行计划重用与重编译
第6篇 锁的原理
第7篇 备份原理

文摘

版权页:



插图:



这里未显示处于非活动状态的重做记录,并不是因为这些记录被删除。当执行delete操作删除表中的记录时,在这些记录所在的数据页中,对应被删除记录的槽中的偏移量数据会设置为0。而执行checkpoint操作后,这些非活动重做记录所在日志段中的数据却不会发生任何改变,也就是说,非活动记录并未删除。
将数据库设置为简单恢复模式,使用fn_dblog函数查询重做数据信息时,日志记录从数据库当前的MinLSN开始显示,即只能显示重做文件中的活动部分。
假设执行checkpoint操作得到MinLSN中的VLF序号为n,上次checkpoint操作的开始LSN中的VLF序号为m,若n>m,则序号为n,n+1,…,m—1的VLF都不包含活动日志记录,这些VLF的状态会被此次checkpoint操作设置为可重用。
12.2 实例恢复过程
对事务执行commit操作会把内存缓冲区中的重做数据写入重做日志文件,并把commit操作作为单独的日志记录写入重做日志文件,这些操作都完成即标志着此事务提交操作成功执行。commit操作并不会把事务修改的数据写入磁盘的数据文件,也就是说,提交后的事务,其修改的数据可能并未存入磁盘。
另外,由于内存的压力和checkpoint操作的执行,SQL Server可能已经把未结束事务修改过的部分数据写入磁盘。
在任何时刻,数据库中的事务都会存在以下两种状态或其中一种:
?提交的事务,其修改的数据尚未写入磁盘。
?未提交的事务,其修改的数据已经部分写入磁盘。
如果SQL Server服务某个时刻出现故障,则下次启动时,SQL Server要先解决事务的数据完整性问题。首先执行前滚操作,把数据库的状态恢复到数据库出现故障的时刻,如果提交的事务所修改的数据未写入磁盘,则应通过应用重做日志文件中的日志记录并将其重新写入磁盘,如果未提交的事务所修改的数据已写入磁盘,则执行undo操作将其从磁盘撤销。这个过程称为实例恢复。

相关阅读:

马克思主义经典著作导读(王平著)

教育部马克思主义理论研究和建设工程重

我是个算命先生(易之著)

盗墓笔记1-8(套装共9册)(南派三叔著)

心理学与接受美学(王妍著)

幽默二十讲(李静著)

更多图书资讯可访问读书人图书频道:http://www.reAder8.cn/book/

读书人网 >数据库

热点推荐