内容简介目录内容提要本书是作者多年从事SQL Server 2000数据库系统管理、应用开发和教学培训的经验总结。全书深入浅出地剖析了SQL Server 2000系统管理和应用开发的重点技术,突出了读者容易忽略的,但又是管理和开发实践中需要注意的重点,比如网络和数据库的结合、SQL Server 2000的体系结构、高效的SQL语句设计、优化的索引设计、备份和恢复的实现机制、ADO的体系结构和报表的设计艺术等。相信读者会有耳目一新的感觉。全书分为3个部分,共22章,内容包括构建SQL Server 2000网络、SQL Server 2000的体系结构、管理和配置服务器、管理和配置数据库、DBCC命令、数据三套车、Transact-SQL、数据安全性、数据并发性、备份和恢复、性能监控和优化、基于ADO技术的VB数据库项目开发等。本书内容全面、思路流畅、实用性强,所有实例均经过上机反复实践;对常见的问题提出了解决方案,具有很强的指导性。本书适合SQL Server 2000数据库管理人员、数据库应用开发人员阅读和参考,可作为管理SQL Server 2000数据库的技术手册、数据库技术培训教材以及参加SQL Server 2000认证考试的参考书。本书配套光盘包括各章标注的内容以及17个多媒体实验。 目 录第一部分SQL Server 2000系统管理 第1章 构建SQL Server 2000网络 31.1 本章导读 31.2 初识计算机网络 31.2.1 计算机网络的定义 31.2.2 计算机网络的发展历程 41.2.3 计算机网络的分类 51.2.4 计算机网络的拓扑结构 51.2.5 网络中的计算机通信的原理 61.2.6 TCP/IP 71.2.7 客户机/服务器模式 91.2.8 端口 91.2.9 配置计算机的IP地址 101.2.10 查看计算机的端口使用情况 101.3 初识数据库 111.3.1 数据库系统 111.3.2 数据库 111.3.3 数据库管理系统 121.3.4 数据库应用系统 121.3.5 数据库系统相关人员 121.3.6 关系模型 121.3.7 关系型数据库 131.3.8 关系型数据表的关联关系 131.3.9 关系型数据的完整性 141.4 初识关系型网络数据库 161.4.1 关系型网络数据库的特点 161.4.2 关系型网络数据库的工作模式 161.5 初识SQL Server 2000 171.5.1 SQL Server 2000的产品版本 171.5.2 安装环境需求 181.5.3 实例(Instance) 191.5.4 服务账户 191.5.5 身份验证模式 201.5.6 客户机许可模式 201.5.7 SQL Server 2000网络采用的通信协议 211.6 构建SQL Server 2000服务器和客户机 211.6.1 构建SQL Server 2000服务器 211.6.2 构建SQL Server 2000客户机 251.7 实验:远程客户机能否通过共享内存访问服务器 251.7.1 在服务器上配置共享内存 261.7.2 在本地客户机上配置共享内存 281.7.3 在远程客户机上配置共享内存 291.7.4 实验结论 291.8 实验:配置命名管道的SQL Server 2000网络 291.8.1 在服务器上配置命名管道 301.8.2 在本地客户机上配置命名管道 311.8.3 在远程客户机上配置命名管道 321.8.4 实验结论 331.9 实验:配置TCP/IP的SQL Server 2000网络 331.9.1 在服务器上配置TCP/IP 331.9.2 在本地客户机上配置TCP/IP 341.9.3 在远程客户机上配置TCP/IP 351.9.4 实验结论 351.10 实验:明明白白配置TCP/IP的端口 351.10.1 更改服务器的端口 351.10.2 客户机上如何进行配置 361.10.3 什么是动态决定端口 361.10.4 实验结论 371.11 实验:配置多协议的SQL Server 2000网络 381.11.1 在服务器上配置多协议 381.11.2 在本地客户机上配置多协议 391.11.3 在远程客户机上配置多协议 391.11.4 实验结论 391.12 实验:Winsock代理设置的含义 401.12.1 什么是代理服务 401.12.2 什么是Winsock代理 411.12.3 在服务器上设置Winsock代理 411.12.4 在客户机上配置Winsock代理 421.12.5 实验结论 421.13 实验:为什么强制协议加密导致服务器无法启动 421.13.1 在服务器上配置强制协议加密 431.13.2 实验结论 431.14 疑难解析 441.14.1 Windows XP上可以安装什么SQL Server 2000版本 441.14.2 Windows 2003上如何安装SQL Server 2000企业版 441.14.3 启动提示"1069错误(由于登录失败而无法启动服务)"如何解决 441.14.4 服务器的1433端口没有启动如何解决 451.14.5 如何下载SQL Server 2000的SP3 451.14.6 如何远程管理Internet上的SQL Server 2000服务器 451.14.7 如何卸载SQL Server 2000 461.14.8 排除SQL Server 2000网络连接故障 461.14.9 排除SQL Server 2000连接超时故障 471.14.10 什么是数据字典 471.14.11 DBA都有什么职责 471.14.12 DBA日常如何工作 481.14.13 什么是数据库的模型 491.14.14 什么是IPC机制 501.14.15 什么是网络库(Net-Library) 501.14.16 什么是关系型数据库的范式 501.15 本章小结 511.16 实践题目 51第2章 SQL Server 2000的体系结构 532.1 本章导读 532.2 SQL Server 2000网络结构 532.2.1 SQL Server 2000的C/S模式 542.2.2 客户机的结构 542.2.3 服务器的结构 552.3 SQL Server 2000服务器的引擎结构 572.3.1 SQL Server 2000引擎工作流程 572.3.2 SQL Server 2000引擎的设计 592.4 SQL Server 2000服务器的内存结构 612.4.1 为什么要设计内存 612.4.2 如何为SQL Server 2000服务器分配内存 612.4.3 SQL Server 2000服务器内存有什么内容 622.4.4 如何快速访问SQL Server 2000服务器内存 622.4.5 如何替换SQL Server 2000服务器内存页面 632.4.6 SQL Server 2000服务器日志缓冲池如何管理 632.5 SQL Server 2000服务器的存储结构 642.5.1 SQL Server 2000服务器的物理文件 642.5.2 页面(Page):SQL Server 2000数据文件的存储单位 642.5.3 页面是如何存储数据的 652.5.4 DBCC PAGE:如何查看页面的数据 652.5.5 如何查询数据库的ID和名称 662.5.6 如何查询数据文件的ID和名称 672.5.7 一个查询数据页面信息的实例 672.5.8 内存是如何管理数据页面的 712.5.9 页头:物理页面是如何管理的 712.5.10 如何查询ID所属的数据对象 722.5.11 槽(Slot):数据记录(行)在数据页面中如何存储 732.5.12 盘区(Extent):SQL Server 2000是如何分配存储空间的 742.5.13 如何提高盘区的空间利用率 742.5.14 GAM:SQL Server 2000的盘区是如何管理的 752.5.15 SGAM:SQL Server 2000的混合盘区是如何管理的 762.5.16 SQL Server 2000如何为数据对象分配盘区 772.5.17 数据文件的页面结构是怎样的 772.5.18 如何查询数据文件的页面数 782.5.19 如何查询数据库的页面数 782.5.20 如何查询数据库的盘区数 782.5.21 如何查询数据对象的盘区数 792.5.22 LOB数据是如何存储的 802.5.23 如何将小的LOB数据保存在数据页面内 802.5.24 日志文件的存储空间是如何管理的 812.6 SQL Server 2000服务器的进程结构 812.6.1 什么是SQL Server 2000进程 812.6.2 什么是SQL Server 2000线程 812.6.3 什么是SQL Server 2000纤程 822.6.4 SQL语句是怎样使用CPU资源的 822.6.5 线程或者纤程分配越多效率就越高吗 832.6.6 什么是线程或者纤程的执行优先级 832.7 实验:SQL Server 2000如何管理表 832.7.1 创建测试用数据表 832.7.2 分析日志内容 842.7.3 验证系统表中产生的信息 872.7.4 实验结论 882.8 实验:对数据页面存储参数的深入研究 892.8.1 pminlen参数的含义 892.8.2 m_freecnt参数的含义 902.8.3 数据页面空间是如何分配的 902.9 实验:揭秘定长记录(行)的存储空间 912.9.1 向定长数据表中录入数据 912.9.2 用DBCC PAGE查看定长记录的存储 942.9.3 数据页面的空间分配 952.9.4 总结定长行存储空间的计算方法 952.10 实验:揭秘变长记录(行)的存储空间 962.10.1 向变长数据表中录入数据 962.10.2 用DBCC PAGE查看变长记录的存储空间 982.10.3 数据页面的空间分配 992.10.4 总结变长行存储空间的计算方法 992.10.5 总结计算表行存储空间的方法 1002.11 实验:为什么包含LOB类型的记录可以跨越页面 1002.11.1 LOB对象记录的存储机制 1012.11.2 研究LOB类型的表的存储 1022.11.3 实验结论 1042.12 实验:将LOB数据和普通数据存储在同一个页面 1052.12.1 将LOB数据和普通数据存储在同一页面 1052.12.2 将LOB数据和普通数据分开存储 1062.13 实验:NULL值是否占用存储空间 1062.13.1 定长和变长字段都取NULL值 1072.13.2 定长字段取NULL值、变长字段取NOT NULL值 1082.13.3 定长字段取NOT NULL值、变长字段取NULL值 1092.13.4 定长和变长字段都取NOT NULL值 1102.13.5 实验结论 1112.14 疑难解析 1112.14.1 为什么页面可以存储的数据容量参数不一致 1112.14.2 能不能将特定的数据始终保留在内存中 1112.14.3 最多可以为SQL Server 2000分配多少内存 1112.14.4 如何判断SQL Server 2000内存够不够用 1112.14.5 什么是Read Ahead(先读) 1122.14.6 什么是旋转木马扫描(Merry-Go-Round Scan) 1122.14.7 同步VS.异步:数据和日志文件的写机制区别 1132.14.8 什么时机使用纤程 1132.14.9 线程数和连接数有无关系 1142.14.10 什么是零散收集I/O 1142.14.11 什么是异步I/O 1142.14.12 什么是TDS 1142.14.13 什么是Latch 1152.15 本章小结 1152.16 实践题目 115第3章 管理和配置服务器 1183.1 本章导读 1183.2 服务器的管理和配置工具 1183.2.1 MMC和企业管理器是什么关系 1193.2.2 如何配置企业管理器 1193.2.3 为什么查询分析器查询的对象名无效 1213.2.4 查询分析器显示的执行计划有什么意义 1223.2.5 查询分析器显示的服务器跟踪有什么意义 1233.2.6 查询分析器显示的客户统计有什么意义 1233.2.7 什么是查询分析器的模板(Template) 1243.3 服务器组 1253.3.1 什么是服务器组 1253.3.2 什么是基于服务器组的管理结构 1253.4 注册服务器 1253.4.1 什么是服务器的注册 1253.4.2 什么情况下需要注册服务器 1263.4.3 怎样注册一个服务器 1263.5 暂停、启动和关闭服务器 1273.5.1 什么时机需要暂停服务器 1283.5.2 如何暂停服务器 1283.5.3 如何关闭服务器 1283.5.4 关闭和暂停服务器有什么区别 1293.5.5 如何启动服务器 1293.5.6 在企业管理器中管理服务器 1303.6 配置服务器 1303.6.1 怎样查看服务器的环境信息 1303.6.2 什么是服务器的排序规则 1313.6.3 哪些服务可以自动启动 1313.6.4 什么是服务器的错误报告功能 1323.6.5 如何配置使用动态内存的服务器 1323.6.6 如何配置一个使用固定内存的服务器 1333.6.7 SQL Server 2000服务器可以使用哪些CPU 1333.6.8 如何设置CPU的最大线程数 1333.6.9 是否提升SQL Server 2000线程的优先级 1343.6.10 使用线程还是纤程 1343.6.11 是否启用多CPU做并行查询 1343.6.12 如何更改服务器的身份验证方式 1343.6.13 如何对服务器进行审核 1353.6.14 如何查看服务器的审核信息 1353.6.15 谁可以启动服务器 1363.6.16 如何限制并发连接的用户数 1373.6.17 如何在服务器之间执行分布式事务 1373.6.18 什么是用户的默认语言 1383.6.19 如何控制服务器的行为 1383.6.20 服务器如何解释两位数年份 1393.6.21 什么是索引填充因子 1393.6.22 如何设置磁带备份和还原参数 1413.6.23 什么是恢复间隔 1413.6.24 创建数据库的文件存放在哪里 1423.6.25 如何查询服务器的当前配置参数 1423.6.26 如何查询服务器的当前运行参数 1423.7 多服务器环境的管理和配置 1433.7.1 创建和使用链接服务器 1433.7.2 创建和使用远程服务器 1453.8 疑难解析 1463.8.1 注册名为Local如何处理 1463.8.2 如何设置服务器的内存大小 1463.8.3 为什么服务器占用内存太多 1463.8.4 什么是服务器的错误日志 1473.9 本章小结 1473.10 实践题目 148第4章 管理和配置数据库 1494.1 本章导读 1494.2 默认的4个系统数据库 1504.2.1 master数据库有什么作用 1504.2.2 model数据库有什么作用 1504.2.3 msdb数据库有什么作用 1504.2.4 tempdb数据库有什么作用 1504.2.5 4个系统数据库是如何启动的 1514.3 创建用户数据库 1524.3.1 谁可以创建用户数据库 1524.3.2 如何命名用户数据库 1524.3.3 创建用户数据库会产生哪些操作系统文件 1524.3.4 为什么要评估数据文件的初始大小 1534.3.5 粗略评估数据文件初始大小的案例 1534.3.6 创建用户数据库的案例 1534.4 配置用户数据库 1554.4.1 数据库工作在什么状态 1554.4.2 数据库当前空间利用率是多少 1564.4.3 怎样添加次要数据文件 1564.4.4 数据文件之间怎样存储数据 1564.4.5 怎样添加多个日志文件 1574.4.6 日志文件之间怎样存储数据 1574.4.7 什么是文件组 1584.4.8 什么是默认的文件组 1584.4.9 如何使用文件组 1584.4.10 如何创建文件组 1594.4.11 如何限制用户对数据库的访问 1594.4.12 什么是数据库的单用户模式 1604.4.13 如何选择数据库的故障还原模型(恢复模型) 1604.4.14 选项设置参数有什么含义 1614.4.15 什么是数据库的兼容性 1624.4.16 如何设置用户访问数据库的权限 1624.5 分离和附加用户数据库 1634.5.1 如何分离数据库 1634.5.2 如何附加数据库 1634.6 脱机和联机用户数据库 1644.6.1 如何脱机数据库 1644.6.2 如何联机数据库 1654.7 维护用户数据库 1654.7.1 什么是数据库的维护计划 1654.7.2 创建数据库维护计划 1654.8 收缩用户数据库 1684.8.1 为什么要收缩数据库 1684.8.2 什么是自动收缩和手动收缩 1694.8.3 收缩数据文件和日志文件有什么不同 1694.8.4 收缩操作是如何执行的 1694.8.5 收缩数据库的案例 1694.9 删除用户数据库 1704.10 实验:tempdb数据库的数据存放在内存还是硬盘上 1714.11 实验:数据文件组的比例填充写机制 1734.11.1 测试比例填充写机制的方法 1734.11.2 研究数据页面分配方法 1744.12 实验:日志文件的循环写机制 1764.13 疑难解析 1764.13.1 文件必须按照指定的扩展名命名吗 1764.13.2 能不能重新命名数据库 1774.13.3 如何删除数据文件 1774.13.4 如何删除日志文件 1784.13.5 为什么分区上无法创建文件 1784.13.6 如何查看数据库空间使用情况 1784.13.7 如何使用tempdb数据库 1784.13.8 为什么恢复Master数据库提示必须单用户模式 1794.13.9 Tempdb数据库可以恢复吗 1794.13.10 如何在Tempdb数据库中创建临时表 1794.13.11 在企业管理器中看不到Tempdb数据库的临时表 1794.13.12 为什么对Tempdb数据库的操作执行较快 1804.13.13 如何更改Tempdb数据库文件的存储路径 1804.14 本章小结 1814.15 实践题目 181第5章 DBCC命令 1825.1 本章导读 1825.2 DBCC帮助类命令 1835.2.1 DBCC HELP (‘?‘) 1835.2.2 DBCC HELP (‘命令‘) 1835.2.3 DBCC USEROPTIONS 1835.3 DBCC状态验证类命令 1835.3.1 DBCC CHECKALLOC 1835.3.2 DBCC CHECKCATALOG 1845.3.3 DBCC CHECKCONSTRINTS 1855.3.4 DBCC CHECKDB 1855.3.5 DBCC CHECKFILEGROUP 1865.3.6 DBCC CHECKTABLE 1875.3.7 DBCC CHECKIDENT 1885.4 DBCC维护类命令 1885.4.1 DBCC CLEANTABLE 1885.4.2 DBCC DBREINDEX 1895.4.3 DBCC UPDATEUSAGE 1905.4.4 DBCC INDEXDEFRAG 1915.4.5 DBCC PINTABLE 1925.4.6 DBCC UNPINTABLE 1935.4.7 DBCC SHRINKDATABASE 1935.4.8 DBCC SHRINKFILE 1955.5 DBCC性能调节类命令 1975.5.1 DBCC dllname(FREE) 1975.5.2 DBCC DROPCLEANBUFFERS 1975.5.3 DBCC FREEPROCCACHE 1985.5.4 DBCC INPUTBUFFER 1985.5.5 DBCC OPENTRAN 1995.5.6 DBCC OUTPUTBUFFER 1995.5.7 DBCC SHOW_STATISTICS 2005.5.8 DBCC SHOWCONTIG 2005.5.9 DBCC SQLPERF 2015.5.10 DBCC CACHESTATS 2045.5.11 DBCC CURSORSTATS 2055.5.12 DBCC MEMORYSTATS 2055.5.13 DBCC SQLMGRSTATS 2065.6 DBCC未公开的命令 2065.6.1 DBCC ERRLOG 2065.6.2 DBCC FLUSHPROCINDB 2075.6.3 DBCC BUFFER 2075.6.4 DBCC DBINFO 2075.6.5 DBCC DBTABLE 2085.6.6 DBCC IND 2085.6.7 DBCC LOG 2085.6.8 DBCC PROCBUF 2095.6.9 DBCC PRTIPAGE 2105.6.10 DBCC PSS 2105.6.11 DBCC RESOURCE 2115.6.12 DBCC TAB 2115.7 DBCC跟踪标记 2125.7.1 什么是跟踪标记 2125.7.2 DBCC TRACEON 2125.7.3 DBCC TRACEOFF 2125.7.4 DBCC TRACESTATUS 212第6章 数据三套车:表、索引和视图 2136.1 本章导读 2136.2 数据类型:SQL Server 2000如何表示数据 2136.2.1 SQL Server 2000的基本数据类型 2136.2.2 使用整数型数据类型需要注意什么 2146.2.3 使用货币数据类型需要注意什么 2156.2.4 如何录入货币数据类型的数据 2156.2.5 使用精确数字数据类型需要注意什么 2156.2.6 使用浮点数字数据类型需要注意什么 2166.2.7 使用日期/时间数字数据类型需要注意什么 2166.2.8 如何指定日期/时间数据类型的格式 2166.2.9 使用字符型数据类型时需要注意什么 2176.2.10 使用Unicode字符型数据类型时需要注意什么 2176.2.11 使用二进制数据类型时需要注意什么 2176.2.12 如何创建用户定义的数据类型 2186.3 表 2196.3.1 SQL Server 2000表的分类 2196.3.2 如何设计表 2196.3.3 设计表结构时为什么要避免NULL值 2206.3.4 如何选择主码列 2206.3.5 什么是IDENTITY(标识符)列 2206.3.6 什么是GUID(全局惟一标识符)列 2216.3.7 创建表 2216.3.8 修改表结构 2236.3.9 删除表 2256.3.10 SQL Server 2000如何管理表 2256.3.11 表的数据存储在哪个数据页面 2286.3.12 文本和图像数据是如何存储的 2296.3.13 如何计算表需要的存储空间 2316.4 索引 2326.4.1 表扫描还是索引扫描:SQL Server 2000如何访问数据 2326.4.2 索引对数据库是不是必须的 2326.4.3 索引的原理 2336.4.4 从堆到B+树:索引文件结构的变迁 2336.4.5 SQL Server 2000的索引类型 2346.4.6 时间VS.空间:选择稠密索引还是稀疏索引 2356.4.7 探究聚集索引的奥秘 2366.4.8 行定位器:探究非聚集索引的奥秘 2436.4.9 IAM页面:探究堆集的奥秘 2446.4.10 什么是页的分裂 2456.4.11 索引填充因子:避免页分裂的重要参数 2466.4.12 如何估计B+树索引的大小 2466.4.13 如何查看索引的实际大小 2476.4.14 在【企业管理器】中如何创建索引 2496.4.15 用Transact-SQL语句如何创建索引 2506.4.16 DBCC IND:如何查看索引分配的页面 2516.4.17 DBCC SHOWCONTIG:如何检测索引的碎片 2526.4.18 DBCC INDEXDEFRAG:如何整理索引的碎片 2546.4.19 选择性和密度:选择索引的奥秘 2556.4.20 统计信息:影响索引性能的因素 2566.4.21 用索引优化向导设计索引 2576.4.22 不是每个索引都有美好结局:总结创建索引的经验 2596.5 视图 2606.5.1 视图是什么 2606.5.2 为什么要使用视图 2606.5.3 SQL Server 2000中创建视图的规则 2616.5.4 创建视图 2616.5.5 通过视图操作表的数据 2626.6 疑难解析 2636.6.1 为什么非聚集索引适合返回少数值的查询 2636.6.2 为什么聚集索引适合范围查询 2646.6.3 SQL Server 2000中表的规格参数 2646.6.4 索引是否只对SELECT语句起作用 2646.6.5 视图上能不能建立索引 2656.6.6 如何创建覆盖索引 2656.6.7 什么是数据热点 2656.6.8 创建的聚集索引如何避免产生数据热点 2656.6.9 如何选择建立聚集索引的列 2666.6.10 如何设计聚集索引和非聚集索引 2666.6.11 如何设计索引的填充因子 2666.6.12 什么是表变量 2676.6.13 表变量VS.临时表 2676.6.14 视图到底有没有自己的数据 2686.7 本章小结 2686.8 实践题目 268第7章 功能VS.效率:SQL详解 2707.1 本章导读 2707.2 SQL基础 2707.2.1 SQL的特点 2707.2.2 SQL的组成 2727.2.3 SQL中如何表示数据对象 2737.3 用SQL定义数据 2737.3.1 Create Database:创建数据库 2747.3.2 Alter Database:修改数据库 2747.3.3 Drop Database:删除数据库 2757.3.4 Create Table:创建表 2757.3.5 Alter Table:修改表 2777.3.6 Drop Table:删除表 2777.4 用SQL查询单表数据 2777.4.1 创建实例数据库 2777.4.2 查询所有记录 2807.4.3 查询指定字段的记录 2807.4.4 查询中过滤相同的记录 2817.4.5 带表达式的查询 2817.4.6 显示列名的带表达式的查询 2817.4.7 指定查询路径的查询 2817.4.8 指定查询结果的查询 2817.4.9 更改列标题显示的查询 2827.4.10 【Where】条件查询 2827.4.11 组合条件查询 2847.4.12 用Order By对查询结果排序 2847.4.13 用Group By对查询结果分组 2857.4.14 用Having对查询结果筛选 2857.4.15 用Compute对查询结果汇总 2867.4.16 用Compute By对查询结果分类汇总 2867.4.17 用Into存储查询结果 2877.5 用SQL查询多表数据(连接查询) 2877.5.1 连接查询的语法结构 2877.5.2 连接查询的分类 2887.5.3 笛卡尔积连接 2887.5.4 等值连接 2887.5.5 自然连接 2897.5.6 非等值连接 2897.5.7 自身连接 2897.5.8 内连接 2897.5.9 外连接 2907.5.10 复合连接 2917.6 用SQL进行函数查询 2927.6.1 聚合函数 2927.6.2 日期和时间函数 2937.6.3 数学函数 2967.6.4 字符串函数 2987.7 用SQL进行嵌套查询 3017.7.1 什么是嵌套查询 3017.7.2 什么是子查询 3017.7.3 简单嵌套查询 3027.7.4 带in的嵌套查询 3027.7.5 带not in的嵌套查询 3037.7.6 带some的嵌套查询 3037.7.7 带any的嵌套查询 3047.7.8 带all的嵌套查询 3057.7.9 带exists的嵌套查询 3057.8 用SQL操纵数据 3067.8.1 Insert:数据录入 3067.8.2 Update:数据修改 3067.8.3 Delete:数据删除 3077.9 设计高效的SQL语句 3077.9.1 SQL语句是怎样被执行的 3077.9.2 SQL语句是怎样被优化的 3087.9.3 SET STATISTICS IO:查询SQL语句的读写代价 3087.9.4 SET STATISTICS TIME:查询SQL语句的执行时间 3107.9.5 SET SHOWPLAN_TEXT ON :查询SQL语句的执行计划 3117.9.6 SET NOCOUNT ON:减少SQL语句的网络流量 3117.9.7 编程查询单条SQL语句的执行时间 3127.9.8 编程查询成批的SQL语句的执行时间 3137.9.9 SET SHOWPLAN_ALL:详解SQL语句的执行计划 3137.9.10 SEEK VS.SCAN:从执行计划判断是否需要优化SQL 3157.9.11 连接VS.子查询:一样的结果、不一样的效率 3167.9.12 SQL优化与数据库性能的关系 3177.9.13 人工优化VS.智能优化:SQL优化技术的发展 3187.9.14 用SQL Expert设计优化的SQL语句 3187.10 疑难解析 3217.10.1 在SQL语句中如何转换数据类型 3217.10.2 设计SQL语句的经验 3217.11 本章小结 3227.12 实践题目 322第8章 数据完整性:约束、规则和默认 3238.1 本章导读 3238.2 SQL Server 2000的数据完整性机制 3238.2.1 什么是数据完整性 3238.2.2 SQL Server 2000的数据完整性机制 3248.2.3 SQL Server 2000的约束(CONSTRAINT) 3248.2.4 SQL Server 2000的规则(RULE) 3258.2.5 SQL Server 2000的默认(DEFAULT) 3258.3 创建约束 3268.3.1 创建NOT NULL约束 3268.3.2 创建PRIMARY KEY约束 3268.3.3 创建FOREIGN KEY约束 3278.3.4 创建UNIQUE约束 3288.3.5 创建CHECK约束 3288.4 创建规则 3298.4.1 在【企业管理器】中创建规则 3298.4.2 将规则绑定到列 3298.5 创建默认 3308.5.1 在【企业管理器】中创建默认 3308.5.2 将默认绑定到列 3318.6 疑难解析 3318.6.1 创建UNIQUE约束的注意事项 3318.6.2 创建CHECK约束的注意事项 3328.7 本章小结 3328.8 实践题目 332第9章 数据安全性:角色、用户和权限 3349.1 本章导读 3349.2 SQL Server 2000的数据安全性机制 3349.2.1 SQL Server 2000的数据安全性机制 3349.2.2 SQL Server 2000的身份验证机制 3359.2.3 SQL Server 2000的角色机制 3369.2.4 SQL Server 2000的权限(许可)机制 3379.3 管理服务器角色 3389.3.1 管理角色 3389.3.2 创建数据库角色 3399.4 管理用户账户(登录) 3419.4.1 创建登录 3419.4.2 管理登录的权限 3429.5 审核用户活动(AUDIT) 3429.5.1 启动服务器的审核功能 3439.5.2 利用【事件探查器】进行审核 3439.6 疑难解析 3469.6.1 账户和密码保存在哪里 3469.6.2 如何选择身份验证机制 3469.6.3 应用程序角色和标准角色有什么区别 3469.6.4 什么时机使用应用程序角色 3479.6.5 为什么【企业管理器】中无法添加Windows用户组 3479.6.6 如何设计SQL Server 2000服务器的安全体系 3479.6.7 如何使用sa账户 3479.6.8 什么是dbo用户 3479.6.9 什么是数据库对象所有者 3489.7 本章小结 348第10章 数据并发性:事务和锁 34910.1 本章导读 34910.2 SQL Server 2000的事务机制 34910.2.1 SQL Server 2000的并发问题 34910.2.2 什么是事务(Transaction) 35110.2.3 事务的状态 35210.2.4 SQL Server 2000事务模式 35310.2.5 SQL Server 2000事务控制语句 35410.2.6 SQL Server 2000的平面事务 35410.2.7 SQL Server 2000的嵌套事务 35410.2.8 SQL Server 2000的分布式事务 35610.2.9 效率VS.一致性:事务的调度机制 35810.2.10 一致性VS.并发性:事务的隔离性级别 35810.2.11 什么是SQL Server 2000批 35910.2.12 事务中不能使用的Transact-SQL语句 35910.3 SQL Server 2000的锁机制 35910.3.1 并发问题解决机制 35910.3.2 锁:预先预防冲突的悲观并发控制机制 36010.3.3 SQL Server 2000锁的粒度 36110.3.4 SQL Server 2000锁的类型(模式) 36110.3.5 锁持有度 36310.3.6 锁拥有者 36310.3.7 查询锁信息 36310.3.8 锁的兼容性 36510.3.9 SQL Server 2000的动态锁机制 36510.3.10 在【企业管理器】中查看锁 36610.3.11 死锁的检测和预防 36610.3.12 SQL Server 2000的死锁检测和结束机制 36710.3.13 用【事件探查器】检测死锁 36810.4 SQL Server 2000的事务编程 36810.4.1 设置和关闭隐性事务模式 36810.4.2 定义本地事务 37010.4.3 提交事务 37110.4.4 回滚事务 37210.4.5 利用保存点保存本地事务 37310.4.6 设置事务的隔离性级别 37310.5 疑难解析 37410.5.1 本地事务什么时机会升级为分布式事务 37410.5.2 编写前台应用程序时如何使用事务 37410.5.3 在利用ADO编写前台应用程序时如何使用事务 37510.5.4 编写前台应用程序时如何使用隐性事务 37510.5.5 编写前台应用程序事务的原则 37610.5.6 Log Explorer:明明白白学日志的工具 37710.5.7 Select语句会不会产生日志 37910.5.8 Insert语句产生了什么事务日志 37910.5.9 Update语句产生了什么事务日志 38010.5.10 Delete语句产生了什么事务 38110.6 本章小结 381第11章 数据库备份和恢复 38311.1 本章导读 38311.2 基于日志的数据库恢复机制 38411.2.1 日志对数据库是必须的吗 38411.2.2 日志的作用 38411.2.3 SQL Server 2000日志的特点 38511.2.4 日志记录:日志文件的内容单位 38511.2.5 UndoVS.Redo:基于日志的数据库恢复机制 38511.2.6 LSN:维系数据和日志的纽带 38611.2.7 WAL:先写日志的恢复机制 38811.3 SQL Server 2000的常见故障和恢复机制 39011.3.1 Undo:事务故障及其恢复机制 39011.3.2 Undo+Redo:系统故障及其恢复机制 39111.3.3 Redo:介质故障及其恢复机制 39111.4 SQL Server 2000的日志检查点机制 39211.4.1 检查点:日志的驿站 39211.4.2 为什么检查点能提高恢复的效率 39311.4.3 MinLSN:如何选择最小恢复LSN 39411.4.4 什么情况下产生检查点 39411.4.5 SQL Server 2000的自动检查点机制 39511.4.6 CHECKPOINT:手动产生检查点 39511.5 安全VS.空间:SQL Server 2000数据库的恢复模型 39611.5.1 完全恢复模型 39611.5.2 大容量日志记录恢复模型 39711.5.3 简单恢复模型 39711.5.4 3种恢复模型的比较 39711.5.5 设置SQL Server 2000数据库的恢复模型 39811.5.6 不同恢复模型下的检查点操作 39811.6 SQL Server 2000的备份机制 40011.6.1 SQL Server 2000的备份类型 40011.6.2 不同的恢复模型支持的备份类型 40111.6.3 SQL Server 2000的备份设备 40111.6.4 用SP_SPACEUSED估计备份的大小 40311.7 用【企业管理器】备份与恢复 40411.7.1 完全数据库备份 40411.7.2 完全数据库恢复 40511.7.3 事务日志备份 40611.7.4 事务日志恢复 40711.7.5 差异数据库备份 40811.7.6 差异数据库恢复 40911.7.7 文件和文件组备份 41011.7.8 文件和文件组恢复 41111.8 用Transact-SQL备份与恢复 41211.8.1 用于数据库备份的Transact-SQL语句 41211.8.2 用于文件或文件组备份的Transact-SQL语句 41411.8.3 用于日志备份的Transact-SQL语句 41511.8.4 截断事务日志Transact-SQL语句 41611.8.5 恢复完全数据库备份的Transact-SQL语句 41611.8.6 恢复事务日志备份的Transact-SQL语句 41711.9 设计和实施一个完整的数据库备份与恢复方案 41811.9.1 技术VS.代价:如何制定备份与恢复方案 41811.9.2 选择SQL Server 2000数据库的恢复模型 42011.9.3 适合绝大部分数据库的两种备份与恢复方案 42111.9.4 剖析一个完整的数据库备份与恢复方案 42111.9.5 实施一个完整的数据库备份方案 42211.9.6 实施灾难数据库恢复方案 42511.10 疑难解析 42611.10.1 仅有.BAK文件时如何恢复 42611.10.2 为什么无法进行事务日志备份和文件备份 42711.10.3 为什么无法创建差异数据库备份 42711.10.4 备份或者恢复过程发生中断如何处理 42811.10.5 什么时机需要备份Master数据库 42911.10.6 需不需要备份tempdb数据库 42911.10.7 当前日志和备份日志有什么关系 42911.10.8 仅有数据文件、没有日志文件时如何恢复 42911.10.9 DBCC LOGINFO查看VLF 43111.11 本章小结 43211.12 实践题目 432第12章 智能管理:代理服务 43412.1 本章导读 43412.2 SQL Server 2000的代理服务机制 43412.2.1 SQL Server 2000代理服务的结构 43412.2.2 SQL Server 2000代理服务的运行环境 43512.2.3 配置SQL Server 2000代理服务的属性 43512.3 一个基于代理服务实现的智能作业 43712.3.1 创建警报 43712.3.2 创建操作员 43812.3.3 创建作业 43912.4 本章小结 44112.5 实践题目 442第13章 服务器性能监控、调整和优化 44313.1 本章导读 44313.2 可能导致性能瓶颈的因素 44413.2.1 服务器资源 44413.2.2 网络 44413.2.3 数据库设计 44413.2.4 应用系统设计 44413.3 服务器性能监控和调整工具 44513.3.1 Windows的【性能监控器】 44513.3.2 Windows的【任务管理器】 44613.3.3 SQL Server 2000的【事件探查器】 44713.3.4 SQL Server 2000的【查询分析器】 44913.3.5 特殊的系统存储过程 44913.3.6 特殊的DBCC命令 44913.3.7 特殊的全局变量 45013.3.8 SQL Server 2000的【索引调节向导】 45313.4 监控和调整I/O性能 45313.4.1 磁盘I/O对服务器性能的影响 45313.4.2 监控磁盘I/O性能的计数器 45313.4.3 磁盘I/O是否是性能瓶颈 45413.4.4 可能导致磁盘I/O性能瓶颈的原因 45413.4.5 顺序I/O VS.随机I/O:SQL Server 2000的I/O类型 45513.4.6 调整I/O性能的方法 45513.5 监控和调整内存性能 45613.5.1 物理内存VS.虚拟内存 45613.5.2 内存页面错误:内存性能低下的原因 45613.5.3 监控内存性能的计数器 45713.5.4 内存是不是性能瓶颈 45713.5.5 调整内存性能的方法 45813.6 监控和调整CPU性能 45813.6.1 进程VS.线程VS.纤程:分配CPU资源的单位 45813.6.2 用户模式VS.特权模式 45913.6.3 监控CPU性能的计数器 45913.6.4 CPU是不是性能的瓶颈 45913.6.5 监控消耗CPU资源进程的计数器 46013.6.6 监控消耗CPU资源线程的计数器 46013.6.7 监控进程和线程的意义 46013.6.8 更多CPU VS.更快的CPU 46113.7 监控和调整网络性能 46113.7.1 监控网络性能的计数器 46113.7.2 调整网络性能的方法 46113.8 调整和优化数据库设计 46213.8.1 监控数据库性能的计数器 46213.8.2 优化数据库设计的方法 46413.9 调整和优化应用系统设计 46413.9.1 监控应用系统性能的计数器 46413.9.2 优化应用系统设计的方法 46513.10 设计和实现一个优化的SQL Server 2000服务器 46513.10.1 数据和日志文件分开存放在不同磁盘上 46513.10.2 tempdb数据库单独存放在不同磁盘上 46513.10.3 避免热点数据的发生 46613.10.4 数据类型要少 46613.10.5 监控和整理空间碎片 46613.10.6 使用主数据文件和次要数据文件 46613.10.7 利用文件组改善性能 46613.10.8 重视自动增长和自动收缩可能导致的性能问题 46713.10.9 分离系统数据和用户数据 46713.10.10 优化索引设计 46713.10.11 定期更新统计信息 46713.10.12 定期的一致性检查 46713.11 疑难解析 46713.11.1 整数VS.浮点运算能力:配置SQL Server 2000系统的CPU 46713.11.2 查询密集VS.事务密集:配置SQL Server 2000系统的内存 46813.11.3 容量VS.吞吐量:配置SQL Server 2000系统的硬盘 46813.12 本章小结 468第14章 SQL Server 2000高级管理专题 47014.1 本章导读 47014.2 数据转换服务DTS 47014.2.1 什么是DTS服务 47014.2.2 使用DTS向导转换数据 47114.2.3 创建DTS包 47414.2.4 DTS包调度执行失败原因及解决方法 47714.3 全文索引 47814.3.1 基表查询VS.全文查询 47814.3.2 什么是全文目录 47914.3.3 什么是全文索引 47914.3.4 启用全文检索服务 47914.3.5 定义全文索引 48014.3.6 利用全文索引检索数据 48214.4 分布式数据复制 48414.4.1 备份VS.复制 48414.4.2 分布式数据复制的优点 48414.4.3 什么时机需要使用分布式数据复制 48514.4.4 SQL Server 2000分布式数据复制的机制 48514.4.5 拉订阅(请求订阅)VS.推订阅(强制订阅) 48514.4.6 SQL Server 2000的分布式数据复制类型 48614.4.7 SQL Server 2000的分布式数据复制代理 48714.4.8 配置发布、订阅和分发服务器 48814.4.9 使用【复制监视器】 49114.4.10 创建及管理发布 49214.4.11 创建订阅 49514.5 本章小结 499第15章 专业的SQL Server 2000管理工具 50015.1 本章导读 50015.2 Quest Central 50115.2.1 Quest Central简介 50115.2.2 Quest Central for SQL Server简介 50115.2.3 注册SQL Server 2000服务器 50215.2.4 自动发现未注册的SQL Server 2000服务器 50315.2.5 比较两个SQL Server 2000对象 50415.2.6 Knowledge Xpert:SQL Server 2000知识宝典 50515.2.7 SQL Tuning:设计优化的SQL语句 50615.2.8 Space Management:可视化的空间管理工具 50715.2.9 Database Analysis:专业数据库性能分析工具 50815.2.10 Performance Analysis:实时诊断和历史分析工具 50815.3 Spotlight 50915.3.1 Spotlight简介 50915.3.2 用Spotlight监控服务器总体性能 50915.3.3 用Spotlight监控I/O 51015.3.4 用Spotlight监控Sessions 51115.3.5 用Spotlight监控Lock 51115.3.6 用Spotlight监控有无资源阻塞 51215.3.7 用Spotlight监控物理文件的I/O 51215.3.8 用Spotlight监控内存总体性能 51315.3.9 用Spotlight监控数据库空间使用情况 51315.4 Data Factory 51415.4.1 Data Factory简介 51415.4.2 利用Data Factory产生数据 51415.5 Benchmark Factory 51615.5.1 Benchmarka Factory简介 51615.5.2 数据库压力测试工业标准 51715.5.3 用Benchmark Factory测试数据库压力 51715.6 本章小结 520 第二部分Transact-SQL编程 第16章 Transact-SQL编程 52316.1 本章导读 52316.2 Transact-SQL VS. SQL 52316.2.1 什么是Transact-SQL 52316.2.2 Transact-SQL VS. SQL 52416.2.3 Transact-SQL程序的结构 52416.2.4 Transact-SQL程序的数据类型 52516.2.5 Transact-SQL程序的批处理 52516.2.6 应用程序中如何使用Transact-SQL程序 52616.2.7 Transact-SQL程序的运算符 52616.3 变量 52716.3.1 Transact-SQL的变量类型 52716.3.2 Transact-SQL的全局变量 52816.3.3 创建和使用局部变量 52916.4 函数 53016.4.1 Convert函数 53016.4.2 创建和使用自定义函数 53116.5 流程控制语句 53316.5.1 程序块语句(BEGIN…END) 53316.5.2 判断语句(IF…ELSE) 53416.5.3 检测语句(IF…EXISTS) 53616.5.4 循环语句(WHILE) 53616.5.5 分支判断语句(CASE…WHEN) 53716.5.6 无条件退出语句(RETURN) 53816.5.7 延期执行语句(WAITFOR) 54016.5.8 跳转语句(GOTO) 54116.6 功能性语句 54216.6.1 输出语句(PRINT) 54216.6.2 错误处理语句(RAISEERROR) 54316.6.3 选项设置语句(SET) 54416.7 游标(Cursor) 54516.7.1 什么是游标 54516.7.2 游标的生命周期 54516.7.3 声明游标 54616.7.4 打开游标 54716.7.5 读取游标 54716.7.6 关闭游标 54816.7.7 释放游标 54816.7.8 完整的游标实例 54816.7.9 游标的执行效率很差吗 54916.8 本章小结 550第17章 存储过程和触发器 55117.1 本章导读 55117.2 存储过程基础 55117.2.1 为什么要设计存储过程 55117.2.2 什么是存储过程 55217.2.3 存储过程的作用 55217.2.4 存储过程有什么优点 55217.2.5 SQL Server 2000存储过程的分类 55317.3 创建、执行和管理存储过程 55317.3.1 在【企业管理器】中创建存储过程 55317.3.2 创建存储过程的Transact-SQL语法 55617.3.3 执行存储过程 55717.3.4 创建带参数和返回值的存储过程 55917.3.5 执行带参数和返回值的存储过程 56017.3.6 删除存储过程 56017.3.7 执行带参数的存储过程的等效语句 56017.4 触发器基础 56117.4.1 什么是触发器 56117.4.2 SQL Server 2000的触发器类型 56117.4.3 SQL Server 2000的触发器工作原理 56217.4.4 SQL Server 2000触发器的优点 56317.4.5 什么时机使用触发器 56317.5 创建和管理触发器 56317.5.1 创建触发器的Transact-SQL语法 56317.5.2