书籍详情
深入浅出:SQL Server 2000系统管理与应用开发
作者:赵松涛著
出版社:人民邮电出版社
出版时间:2006-01-01
ISBN:9787115142849
定价:¥75.00
购买这本书可以去
内容简介
内容简介目录内容提要本书是作者多年从事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
作者简介
赵松涛,海军少校,工程师,计算机专业硕士。从事高校教学5年,从事计算机网络和数据库系统管理、应用开发6年。目前,在一线从事网络管理。SQLServer和Oracle数据库的系统管理、应用开发和教学培训工作。从2001年至今,先后独立和合作出版了8本有关网络和数据库的图书。曾经为大型企业、高校做数据系统管理培训,受到学员好评。——写书是个良心活,品书如品人。——我相信,用心做事,写出了自己的东西,读者是可以看见作者鲜活的思想和灵魂的。
目录
目 录
第一部分 SQL Server 2000系统管理
第1章 构建SQL SERVER 2000网络 3
1.1 本章导读 3
1.2 初识计算机网络 3
1.2.1 计算机网络的定义 3
1.2.2 计算机网络的发展历程 4
1.2.3 计算机网络的分类 5
1.2.4 计算机网络的拓朴结构 5
1.2.5 网络中的计算机通信的原理 6
1.2.6 TCP/IP 7
1.2.7 客户机/服务器模式 9
1.2.8 端口 9
1.2.9 配置计算机的IP地址 10
1.2.10 查看计算机的端口使用情况 10
1.3 初识数据库 11
1.3.1 数据库系统 11
1.3.2 数据库 11
1.3.3 数据库管理系统 12
1.3.4 数据库应用系统 12
1.3.5 数据库系统相关人员 12
1.3.6 关系模型 12
1.3.7 关系型数据库 13
1.3.8 关系型数据表的关联关系 13
1.3.9 关系型数据的完整性 14
1.4 初识关系型网络数据库 16
1.4.1 关系型网络数据库的特点 16
1.4.2 关系型网络数据库的工作模式 16
1.5 初识SQL Server 2000 17
1.5.1 SQL Server 2000的产品版本 17
1.5.2 安装环境需求 18
1.5.3 实例(Instance) 19
1.5.4 服务账户 19
1.5.5 身份验证模式 20
1.5.6 客户机许可模式 20
1.5.7 SQL Server 2000网络采用的通信协议 21
1.6 构建SQL Server 2000服务器和客户机 21
1.6.1 构建SQL Server 2000服务器 21
1.6.2 构建SQL Server 2000客户机 25
1.7 实验:远程客户机能否通过共享内存访问服务器 25
1.7.1 在服务器上配置共享内存 26
1.7.2 在本地客户机上配置共享内存 28
1.7.3 在远程客户机上配置共享内存 29
1.7.4 实验结论 29
1.8 实验:配置命名管道的SQL Server 2000网络 29
1.8.1 在服务器上配置命名管道 30
1.8.2 在本地客户机上配置命名管道 31
1.8.3 在远程客户机上配置命名管道 32
1.8.4 实验结论 33
1.9 实验:配置TCP/IP的SQL Server 2000网络 33
1.9.1 在服务器上配置TCP/IP 33
1.9.2 在本地客户机上配置TCP/IP 34
1.9.3 在远程客户机上配置TCP/IP 35
1.9.4 实验结论 35
1.10 实验:明明白白配置TCP/IP的端口 35
1.10.1 更改服务器的端口 35
1.10.2 客户机上如何进行配置 36
1.10.3 什么是动态决定端口 36
1.10.4 实验结论 37
1.11 实验:配置多协议的SQL Server 2000网络 38
1.11.1 在服务器上配置多协议 38
1.11.2 在本地客户机上配置多协议 39
1.11.3 在远程客户机上配置多协议 39
1.11.4 实验结论 39
1.12 实验:Winsock代理设置的含义 40
1.12.1 什么是代理服务 40
1.12.2 什么是Winsock代理 41
1.12.3 在服务器上设置Winsock代理 41
1.12.4 在客户机上配置Winsock代理 42
1.12.5 实验结论 42
1.13 实验:为什么强制协议加密导致服务器无法启动 42
1.13.1 在服务器上配置强制协议加密 43
1.13.2 实验结论 43
1.14 疑难解析 44
1.14.1 Windows XP上可以安装什么SQL Server 2000版本 44
1.14.2 Windows 2003上如何安装SQL Server 2000企业版 44
1.14.3 启动提示“1069错误(由于登录失败而无法启动服务)”如何解决 44
1.14.4 服务器的1433端口没有启动如何解决 45
1.14.5 如何下载SQL Server 2000的SP3 45
1.14.6 如何远程管理Internet上的SQL Server 2000服务器 45
1.14.7 如何卸载SQL Server 2000 46
1.14.8 排除SQL Server 2000网络连接故障 46
1.14.9 排除SQL Server 2000连接超时故障 47
1.14.10 什么是数据字典 47
1.14.11 DBA都有什么职责 47
1.14.12 DBA日常如何工作 48
1.14.13 什么是数据库的模型 49
1.14.14 什么是IPC机制 49
1.14.15 什么是网络库(Net-Library) 50
1.14.16 什么是关系型数据库的范式 50
1.15 本章小结 51
1.16 实践题目 51
第2章 SQL SERVER 2000的体系结构 53
2.1 本章导读 53
2.2 SQL Server 2000网络结构 53
2.2.1 SQL Server 2000的C/S模式 54
2.2.2 客户机的结构 54
2.2.3 服务器的结构 55
2.3 SQL Server 2000服务器的引擎结构 57
2.3.1 SQL Server 2000引擎工作流程 57
2.3.2 SQL Server 2000引擎的设计 59
2.4 SQL Server 2000服务器的内存结构 61
2.4.1 为什么要设计内存 61
2.4.2 如何为SQL Server 2000服务器分配内存 61
2.4.3 SQL Server 2000服务器内存有什么内容 62
2.4.4 如何快速访问SQL Server 2000服务器内存 62
2.4.5 如何替换SQL Server 2000服务器内存页面 63
2.4.6 SQL Server 2000服务器日志缓冲池如何管理 63
2.5 SQL Server 2000服务器的存储结构 64
2.5.1 SQL Server 2000服务器的物理文件 64
2.5.2 页面(Page)—SQL Server 2000数据文件的存储单位 64
2.5.3 页面是如何存储数据的 65
2.5.4 DBCC PAGE—如何查看页面的数据 65
2.5.5 如何查询数据库的ID和名称 66
2.5.6 如何查询数据文件的ID和名称 66
2.5.7 一个查询数据页面信息的实例 67
2.5.8 内存是如何管理数据页面的 71
2.5.9 页头—物理页面是如何管理的 71
2.5.10 如何查询ID所属的数据对象 72
2.5.11 槽(Slot)—数据记录(行)在数据页面中如何存储 73
2.5.12 盘区(Extent)—SQL Server 2000是如何分配存储空间的 74
2.5.13 如何提高盘区的空间利用率 74
2.5.14 GAM—SQL Server 2000的盘区是如何管理的 75
2.5.15 SGAM—SQL Server 2000的混合盘区是如何管理的 76
2.5.16 SQL Server 2000如何为数据对象分配盘区 77
2.5.17 数据文件的页面结构是怎样的 77
2.5.18 如何查询数据文件的页面数 78
2.5.19 如何查询数据库的页面数 78
2.5.20 如何查询数据库的盘区数 78
2.5.21 如何查询数据对象的盘区数 79
2.5.22 LOB数据是如何存储的 80
2.5.23 如何将小的LOB数据保存在数据页面内 80
2.5.24 日志文件的存储空间是如何管理的 80
2.6 SQL Server 2000服务器的进程结构 81
2.6.1 什么是SQL Server 2000进程 81
2.6.2 什么是SQL Server 2000线程 81
2.6.3 什么是SQL Server 2000纤程 82
2.6.4 SQL语句是怎样使用CPU资源的 82
2.6.5 线程或者纤程分配越多效率就越高吗 82
2.6.6 什么是线程或者纤程的执行优先级 82
2.7 实验:SQL Server 2000如何管理表 83
2.7.1 创建测试用数据表 83
2.7.2 分析日志内容 84
2.7.3 验证系统表中产生的信息 87
2.7.4 实验结论 88
2.8 实验:对数据页面存储参数的深入研究 88
2.8.1 pminlen参数的含义 89
2.8.2 m_freecnt参数的含义 89
2.8.3 数据页面空间是如何分配的 90
2.9 实验:揭秘定长记录(行)的存储空间 90
2.9.1 向定长数据表中录入数据 91
2.9.2 用DBCC PAGE查看定长记录的存储 93
2.9.3 数据页面的空间分配 94
2.9.4 总结定长行存储空间的计算方法 95
2.10 实验:揭秘变长记录(行)的存储空间 96
2.10.1 向变长数据表中录入数据 96
2.10.2 用DBCC PAGE查看变长记录的存储空间 97
2.10.3 数据页面的空间分配 98
2.10.4 总结变长行存储空间的计算方法 99
2.10.5 总结计算表行存储空间的方法 99
2.11 实验:为什么包含LOB类型的记录可以跨越页面 100
2.11.1 LOB对象记录的存储机制 100
2.11.2 研究LOB类型的表的存储 101
2.11.3 实验结论 104
2.12 实验:将LOB数据和普通数据存储在同一个页面 104
2.12.1 将LOB数据和普通数据存储在同一页面 104
2.12.2 将LOB数据和普通数据分开存储 105
2.13 实验:NULL值是否占用存储空间 105
2.13.1 定长和变长字段都取NULL值 106
2.13.2 定长字段取NULL值、变长字段取NOT NULL值 107
2.13.3 定长字段取NOT NULL值、变长字段取NULL值 108
2.13.4 定长和变长字段都取NOT NULL值 109
2.13.5 实验结论 110
2.14 疑难解析 110
2.14.1 为什么页面可以存储的数据容量参数不一致 110
2.14.2 能不能将特定的数据始终保留在内存中 110
2.14.3 最多可以为SQL Server 2000分配多少内存 110
2.14.4 如何判断SQL Server 2000内存够不够用 111
2.14.5 什么是Read Ahead(先读) 111
2.14.6 什么是旋转木马扫描(Merry-Go-Round Scan) 111
2.14.7 同步VS.异步—数据和日志文件的写机制区别 112
2.14.8 什么时机使用纤程 112
2.14.9 线程数和连接数有无关系 113
2.14.10 什么是零散收集I/O 113
2.14.11 什么是异步I/O 114
2.14.12 什么是TDS 114
2.14.13 什么是Latch 114
2.15 本章小结 114
2.16 实践题目 115
第3章 管理和配置服务器 118
3.1 本章导读 118
3.2 服务器的管理和配置工具 118
3.2.1 MMC和企业管理器是什么关系 119
3.2.2 如何配置企业管理器 119
3.2.3 为什么查询分析器查询的对象名无效 121
3.2.4 查询分析器显示的执行计划有什么意义 122
3.2.5 查询分析器显示的服务器跟踪有什么意义 123
3.2.6 查询分析器显示的客户统计有什么意义 123
3.2.7 什么是查询分析器的模板(Template) 124
3.3 服务器组 125
3.3.1 什么是服务器组 125
3.3.2 什么是基于服务器组的管理结构 125
3.4 注册服务器 125
3.4.1 什么是服务器的注册 125
3.4.2 什么情况下需要注册服务器 126
3.4.3 怎样注册一个服务器 126
3.5 暂停、启动和关闭服务器 127
3.5.1 什么时机需要暂停服务器 128
3.5.2 如何暂停服务器 128
3.5.3 如何关闭服务器 128
3.5.4 关闭和暂停服务器有什么区别 129
3.5.5 如何启动服务器 129
3.5.6 在企业管理器中管理服务器 130
3.6 配置服务器 130
3.6.1 怎样查看服务器的环境信息 130
3.6.2 什么是服务器的排序规则 131
3.6.3 哪些服务可以自动启动 131
3.6.4 什么是服务器的错误报告功能 132
3.6.5 如何配置使用动态内存的服务器 132
3.6.6 如何配置一个使用固定内存的服务器 133
3.6.7 SQL Server 2000服务器可以使用哪些CPU 133
3.6.8 如何设置CPU的最大线程数 133
3.6.9 是否提升SQL Server 2000线程的优先级 134
3.6.10 使用线程还是纤程 134
3.6.11 是否启用多CPU做并行查询 134
3.6.12 如何更改服务器的身份验证方式 134
3.6.13 如何对服务器进行审核 135
3.6.14 如何查看服务器的审核信息 135
3.6.15 谁可以启动服务器 136
3.6.16 如何限制并发连接的用户数 137
3.6.17 如何在服务器之间执行分布式事务 137
3.6.18 什么是用户的默认语言 138
3.6.19 如何控制服务器的行为 138
3.6.20 服务器如何解释两位数年份 139
3.6.21 什么是索引填充因子 139
3.6.22 如何设置磁带备份和还原参数 141
3.6.23 什么是恢复间隔 141
3.6.24 创建数据库的文件存放在哪里 142
3.6.25 如何查询服务器的当前配置参数 142
3.6.26 如何查询服务器的当前运行参数 142
3.7 多服务器环境的管理和配置 143
3.7.1 创建和使用链接服务器 143
3.7.2 创建和使用远程服务器 145
3.8 疑难解析 146
3.8.1 注册名为Local如何处理 146
3.8.2 如何设置服务器的内存大小 146
3.8.3 为什么服务器占用内存太多 146
3.8.4 什么是服务器的错误日志 147
3.9 本章小结 147
3.10 实践题目 148
第4章 管理和配置数据库 149
4.1 本章导读 149
4.2 默认的4个系统数据库 150
4.2.1 master数据库有什么作用 150
4.2.2 model数据库有什么作用 150
4.2.3 msdb数据库有什么作用 150
4.2.4 tempdb数据库有什么作用 150
4.2.5 4个系统数据库是如何启动的 151
4.3 创建用户数据库 152
4.3.1 谁可以创建用户数据库 152
4.3.2 如何命名用户数据库 152
4.3.3 创建用户数据库会产生哪些操作系统文件 152
4.3.4 为什么要评估数据文件的初始大小 153
4.3.5 粗略评估数据文件初始大小的案例 153
4.3.6 创建用户数据库的案例 153
4.4 配置用户数据库 155
4.4.1 数据库工作在什么状态 155
4.4.2 数据库当前空间利用率是多少 156
4.4.3 怎样添加次要数据文件 156
4.4.4 数据文件之间怎样存储数据 156
4.4.5 怎样添加多个日志文件 157
4.4.6 日志文件之间怎样存储数据 157
4.4.7 什么是文件组 158
4.4.8 什么是默认的文件组 158
4.4.9 如何使用文件组 158
4.4.10 如何创建文件组 159
4.4.11 如何限制用户对数据库的访问 159
4.4.12 什么是数据库的单用户模式 160
4.4.13 如何选择数据库的故障还原模型(恢复模型) 160
4.4.14 选项设置参数有什么含义 161
4.4.15 什么是数据库的兼容性 162
4.4.16 如何设置用户访问数据库的权限 162
4.5 分离和附加用户数据库 163
4.5.1 如何分离数据库 163
4.5.2 如何附加数据库 163
4.6 脱机和联机用户数据库 164
4.6.1 如何脱机数据库 164
4.6.2 如何联机数据库 165
4.7 维护用户数据库 165
4.7.1 什么是数据库的维护计划 165
4.7.2 创建数据库维护计划 165
4.8 收缩用户数据库 168
4.8.1 为什么要收缩数据库 168
4.8.2 什么是自动收缩和手动收缩 169
4.8.3 收缩数据文件和日志文件有什么不同 169
4.8.4 收缩操作是如何执行的 169
4.8.5 收缩数据库的案例 169
4.9 删除用户数据库 170
4.10 实验:tempdb数据库的数据存放在内存还是硬盘上 171
4.11 实验:数据文件组的比例填充写机制 173
4.11.1 测试比例填充写机制的方法 173
4.11.2 研究数据页面分配方法 174
4.12 实验:日志文件的循环写机制 176
4.13 疑难解析 176
4.13.1 文件必须按照指定的扩展名命名吗 176
4.13.2 能不能重新命名数据库 177
4.13.3 如何删除数据文件 177
4.13.4 如何删除日志文件 178
4.13.5 为什么分区上无法创建文件 178
4.13.6 如何查看数据库空间使用情况 178
4.13.7 如何使用tempdb数据库 178
4.13.8 为什么恢复Master数据库提示必须单用户模式 179
4.13.9 Tempdb数据库可以恢复吗 179
4.13.10 如何在Tempdb数据库中创建临时表 179
4.13.11 在企业管理器中看不到Tempdb数据库的临时表 179
4.13.12 为什么对Tempdb数据库的操作执行较快 180
4.13.13 如何更改Tempdb数据库文件的存储路径 180
4.14 本章小结 181
4.15 实践题目 181
第5章 DBCC命令 182
5.1 本章导读 182
5.2 DBCC帮助类命令 183
5.2.1 DBCC HELP (‘?’) 183
5.2.2 DBCC HELP (‘命令’) 183
5.2.3 DBCC USEROPTIONS 183
5.3 DBCC状态验证类命令 183
5.3.1 DBCC CHECKALLOC 183
5.3.2 DBCC CHECKCATALOG 184
5.3.3 DBCC CHECKCONSTRINTS 185
5.3.4 DBCC CHECKDB 185
5.3.5 DBCC CHECKFILEGROUP 186
5.3.6 DBCC CHECKTABLE 187
5.3.7 DBCC CHECKIDENT 188
5.4 DBCC维护类命令 188
5.4.1 DBCC CLEANTABLE 188
5.4.2 DBCC DBREINDEX 189
5.4.3 DBCC UPDATEUSAGE 190
5.4.4 DBCC INDEXDEFRAG 191
5.4.5 DBCC PINTABLE 192
5.4.6 DBCC UNPINTABLE 193
5.4.7 DBCC SHRINKDATABASE 193
5.4.8 DBCC SHRINKFILE 195
5.5 DBCC性能调节类命令 197
5.5.1 DBCC dllname(FREE) 197
5.5.2 DBCC DROPCLEANBUFFERS 197
5.5.3 DBCC FREEPROCCACHE 198
5.5.4 DBCC INPUTBUFFER 198
5.5.5 DBCC OPENTRAN 199
5.5.6 DBCC OUTPUTBUFFER 199
5.5.7 DBCC SHOW_STATISTICS 200
5.5.8 DBCC SHOWCONTIG 200
5.5.9 DBCC SQLPERF 201
5.5.10 DBCC CACHESTATS 204
5.5.11 DBCC CURSORSTATS 205
5.5.12 DBCC MEMORYSTATS 205
5.5.13 DBCC SQLMGRSTATS 206
5.6 DBCC未公开的命令 206
5.6.1 DBCC ERRLOG 206
5.6.2 DBCC FLUSHPROCINDB 207
5.6.3 DBCC BUFFER 207
5.6.4 DBCC DBINFO 207
5.6.5 DBCC DBTABLE 208
5.6.6 DBCC IND 208
5.6.7 DBCC LOG 208
5.6.8 DBCC PROCBUF 209
5.6.9 DBCC PRTIPAGE 210
5.6.10 DBCC PSS 210
5.6.11 DBCC RESOURCE 211
5.6.12 DBCC TAB 211
5.7 DBCC跟踪标记 212
5.7.1 什么是跟踪标记 212
5.7.2 DBCC TRACEON 212
5.7.3 DBCC TRACEOFF 212
5.7.4 DBCC TRACESTATUS 212
第6章 数据三套车—表、索引和视图 213
6.1 本章导读 213
6.2 数据类型—SQL Server 2000如何表示数据 213
6.2.1 SQL Server 2000的基本数据类型 213
6.2.2 使用整数型数据类型需要注意什么 214
6.2.3 使用货币数据类型需要注意什么 215
6.2.4 如何录入货币数据类型的数据 215
6.2.5 使用精确数字数据类型需要注意什么 215
6.2.6 使用浮点数字数据类型需要注意什么 216
6.2.7 使用日期/时间数字数据类型需要注意什么 216
6.2.8 如何指定日期/时间数据类型的格式 216
6.2.9 使用字符型数据类型时需要注意什么 217
6.2.10 使用Unicode字符型数据类型时需要注意什么 217
6.2.11 使用二进制数据类型时需要注意什么 217
6.2.12 如何创建用户定义的数据类型 218
6.3 表 219
6.3.1 SQL Server 2000表的分类 219
6.3.2 如何设计表 219
6.3.3 设计表结构时为什么要避免NULL值 220
6.3.4 如何选择主码列 220
6.3.5 什么是IDENTITY(标识符)列 220
6.3.6 什么是GUID(全局惟一标识符)列 221
6.3.7 创建表 221
6.3.8 修改表结构 223
6.3.9 删除表 225
6.3.10 SQL Server 2000如何管理表 225
6.3.11 表的数据存储在哪个数据页面 228
6.3.12 文本和图像数据是如何存储的 229
6.3.13 如何计算表需要的存储空间 231
6.4 索引 232
6.4.1 表扫描还是索引扫描—SQL Server 2000如何访问数据 232
6.4.2 索引对数据库是不是必须的 232
6.4.3 索引的原理 233
6.4.4 从堆到B+树—索引文件结构的变迁 233
6.4.5 SQL Server 2000的索引类型 234
6.4.6 时间VS.空间—选择稠密索引还是稀疏索引 235
6.4.7 探究聚集索引的奥秘 236
6.4.8 行定位器—探究非聚集索引的奥秘 243
6.4.9 IAM页面—探究堆集的奥秘 244
6.4.10 什么是页的分裂 245
6.4.11 索引填充因子—避免页分裂的重要参数 246
6.4.12 如何估计B+树索引的大小 246
6.4.13 如何查看索引的实际大小 247
6.4.14 在【企业管理器】中如何创建索引 249
6.4.15 用Transact-SQL语句如何创建索引 250
6.4.16 DBCC IND—如何查看索引分配的页面 251
6.4.17 DBCC SHOWCONTIG—如何检测索引的碎片 252
6.4.18 DBCC INDEXDEFRAG—如何整理索引的碎片 254
6.4.19 选择性和密度—选择索引的奥秘 255
6.4.20 统计信息—影响索引性能的因素 256
6.4.21 用索引优化向导设计索引 257
6.4.22 不是每个索引都有美好结局—总结创建索引的经验 259
6.5 视图 260
6.5.1 视图是什么 260
6.5.2 为什么要使用视图 260
6.5.3 SQL Server 2000中创建视图的规则 261
6.5.4 创建视图 261
6.5.5 通过视图操作表的数据 262
6.6 疑难解析 263
6.6.1 为什么非聚集索引适合返回少数值的查询 263
6.6.2 为什么聚集索引适合范围查询 264
6.6.3 SQL Server 2000中表的规格参数 264
6.6.4 索引是否只对SELECT语句起作用 264
6.6.5 视图上能不能建立索引 265
6.6.6 如何创建覆盖索引 265
6.6.7 什么是数据热点 265
6.6.8 创建的聚集索引如何避免产生数据热点 265
6.6.9 如何选择建立聚集索引的列 266
6.6.10 如何设计聚集索引和非聚集索引 266
6.6.11 如何设计索引的填充因子 266
6.6.12 什么是表变量 267
6.6.13 表变量VS.临时表 267
6.6.14 视图到底有没有自己的数据 268
6.7 本章小结 268
6.8 实践题目 268
第7章 功能VS.效率—SQL详解 270
7.1 本章导读 270
7.2 SQL基础 270
7.2.1 SQL的特点 270
7.2.2 SQL的组成 272
7.2.3 SQL中如何表示数据对象 273
7.3 用SQL定义数据 273
7.3.1 Create Database—创建数据库 274
7.3.2 Alter Database—修改数据库 274
7.3.3 Drop Database—删除数据库 275
7.3.4 Create Table—创建表 275
7.3.5 Alter Table—修改表 277
7.3.6 Drop Table—删除表 277
7.4 用SQL查询单表数据 277
7.4.1 创建实例数据库 277
7.4.2 查询所有记录 280
7.4.3 查询指定字段的记录 280
7.4.4 查询中过滤相同的记录 281
7.4.5 带表达式的查询 281
7.4.6 显示列名的带表达式的查询 281
7.4.7 指定查询路径的查询 281
7.4.8 指定查询结果的查询 281
7.4.9 更改列标题显示的查询 282
7.4.10 【Where】条件查询 282
7.4.11 组合条件查询 284
7.4.12 用Order By对查询结果排序 284
7.4.13 用Group By对查询结果分组 285
7.4.14 用Having对查询结果筛选 285
7.4.15 用Compute对查询结果汇总 286
7.4.16 用Compute By对查询结果分类汇总 286
7.4.17 用Into存储查询结果 287
7.5 用SQL查询多表数据(连接查询) 287
7.5.1 连接查询的语法结构 287
7.5.2 连接查询的分类 288
7.5.3 笛卡尔积连接 288
7.5.4 等值连接 288
7.5.5 自然连接 289
7.5.6 非等值连接 289
7.5.7 自身连接 289
7.5.8 内连接 289
7.5.9 外连接 290
7.5.10 复合连接 291
7.6 用SQL进行函数查询 292
7.6.1 聚合函数 292
7.6.2 日期和时间函数 293
7.6.3 数学函数 296
7.6.4 字符串函数 298
7.7 用SQL进行嵌套查询 301
7.7.1 什么是嵌套查询 301
7.7.2 什么是子查询 301
7.7.3 简单嵌套查询 302
7.7.4 带in的嵌套查询 302
7.7.5 带not in的嵌套查询 303
7.7.6 带some的嵌套查询 303
7.7.7 带any的嵌套查询 304
7.7.8 带all的嵌套查询 305
7.7.9 带exists的嵌套查询 305
7.8 用SQL操纵数据 306
7.8.1 Insert—数据录入 306
7.8.2 Update—数据修改 306
7.8.3 Delete—数据删除 307
7.9 设计高效的SQL语句 307
7.9.1 SQL语句是怎样被执行的 307
7.9.2 SQL语句是怎样被优化的 308
7.9.3 SET STATISTICS IO—查询SQL语句的读写代价 308
7.9.4 SET STATISTICS TIME—查询SQL语句的执行时间 310
7.9.5 SET SHOWPLAN_TEXT ON—查询SQL语句的执行计划 311
7.9.6 SET NOCOUNT ON—减少SQL语句的网络流量 311
7.9.7 编程查询单条SQL语句的执行时间 312
7.9.8 编程查询成批的SQL语句的执行时间 313
7.9.9 SET SHOWPLAN_ALL—详解SQL语句的执行计划 313
7.9.10 SEEK VS.SCAN—从执行计划判断是否需要优化SQL 315
7.9.11 连接VS.子查询—一样的结果、不一样的效率 316
7.9.12 SQL优化与数据库性能的关系 317
7.9.13 人工优化VS.智能优化—SQL优化技术的发展 318
7.9.14 用SQL Expert设计优化的SQL语句 318
7.10 疑难解析 321
7.10.1 在SQL语句中如何转换数据类型 321
7.10.2 设计SQL语句的经验 321
7.11 本章小结 322
7.12 实践题目 322
第8章 数据完整性—约束、规则和默认 323
8.1 本章导读 323
8.2 SQL Server 2000的数据完整性机制 323
8.2.1 什么是数据完整性 323
8.2.2 SQL Server 2000的数据完整性机制 324
8.2.3 SQL Server 2000的约束(CONSTRAINT) 324
8.2.4 SQL Server 2000的规则(RULE) 325
8.2.5 SQL Server 2000的默认(DEFAULT) 325
8.3 创建约束 326
8.3.1 创建NOT NULL约束 326
8.3.2 创建PRIMARY KEY约束 326
8.3.3 创建FOREIGN KEY约束 327
8.3.4 创建UNIQUE约束 328
8.3.5 创建CHECK约束 328
8.4 创建规则 329
8.4.1 在【企业管理器】中创建规则 329
8.4.2 将规则绑定到列 329
8.5 创建默认 330
8.5.1 在【企业管理器】中创建默认 330
8.5.2 将默认绑定到列 331
8.6 疑难解析 331
8.6.1 创建UNIQUE约束的注意事项 331
8.6.2 创建CHECK约束的注意事项 332
8.7 本章小结 332
8.8 实践题目 332
第9章 数据安全性—角色、用户和权限 334
9.1 本章导读 334
9.2 SQL Server 2000的数据安全性机制 334
9.2.1 SQL Server 2000的数据安全性机制 334
9.2.2 SQL Server 2000的身份验证机制 335
9.2.3 SQL Server 2000的角色机制 336
9.2.4 SQL Server 2000的权限(许可)机制 337
9.3 管理服务器角色 338
9.3.1 管理角色 338
9.3.2 创建数据库角色 339
9.4 管理用户账户(登录) 341
9.4.1 创建登录 341
9.4.2 管理登录的权限 342
9.5 审核用户活动(AUDIT) 342
9.5.1 启动服务器的审核功能 343
9.5.2 利用【事件探查器】进行审核 343
9.6 疑难解析 346
9.6.1 账户和密码保存在哪里 346
9.6.2 如何选择身份验证机制 346
9.6.3 应用程序角色和标准角色有什么区别 346
9.6.4 什么时机使用应用程序角色 347
9.6.5 为什么【企业管理器】中无法添加Windows用户组 347
9.6.6 如何设计SQL Server 2000服务器的安全体系 347
9.6.7 如何使用sa账户 347
9.6.8 什么是dbo用户 347
9.6.9 什么是数据库对象所有者 348
9.7 本章小结 348
第10章 数据并发性—事务和锁 349
10.1 本章导读 349
10.2 SQL Server 2000的事务机制 349
10.2.1 SQL Server 2000的并发问题 349
10.2.2 什么是事务(Transaction) 351
10.2.3 事务的状态 352
10.2.4 SQL Server 2000事务模式 353
10.2.5 SQL Server 2000事务控制语句 354
10.2.6 SQL Server 2000的平面事务 354
10.2.7 SQL Server 2000的嵌套事务 354
10.2.8 SQL Server 2000的分布式事务 356
10.2.9 效率VS.一致性—事务的调度机制 358
10.2.10 一致性VS.并发性—事务的隔离性级别 358
10.2.11 什么是SQL Server 2000批 359
10.2.12 事务中不能使用的Transact-SQL语句 359
10.3 SQL Server 2000的锁机制 359
10.3.1 并发问题解决机制 359
10.3.2 锁—预先预防冲突的悲观并发控制机制 360
10.3.3 SQL Server 2000锁的粒度 361
10.3.4 SQL Server 2000锁的类型(模式) 361
10.3.5 锁持有度 363
10.3.6 锁拥有者 363
10.3.7 查询锁信息 363
10.3.8 锁的兼容性 365
10.3.9 SQL Server 2000的动态锁机制 365
10.3.10 在【企业管理器】中查看锁 366
10.3.11 死锁的检测和预防 366
10.3.12 SQL Server 2000的死锁检测和结束机制 367
10.3.13 用【事件探查器】检测死锁 368
10.4 SQL Server 2000的事务编程 368
10.4.1 设置和关闭隐性事务模式 368
10.4.2 定义本地事务 370
10.4.3 提交事务 371
10.4.4 回滚事务 372
10.4.5 利用保存点保存本地事务 373
10.4.6 设置事务的隔离性级别 373
10.5 疑难解析 374
10.5.1 本地事务什么时机会升级为分布式事务 374
10.5.2 编写前台应用程序时如何使用事务 374
10.5.3 在利用ADO编写前台应用程序时如何使用事务 375
10.5.4 编写前台应用程序时如何使用隐性事务 375
10.5.5 编写前台应用程序事务的原则 376
10.5.6 Log Explorer—明明白白学日志的工具 377
10.5.7 Select语句会不会产生日志 379
10.5.8 Insert语句产生了什么事务日志 379
10.5.9 Update语句产生了什么事务日志 380
10.5.10 Delete语句产生了什么事务 381
10.6 本章小结 381
第11章 数据库备份和恢复 383
11.1 本章导读 383
11.2 基于日志的数据库恢复机制 384
11.2.1 日志对数据库是必须的吗 384
11.2.2 日志的作用 384
11.2.3 SQL Server 2000日志的特点 385
11.2.4 日志记录—日志文件的内容单位 385
11.2.5 UndoVS.Redo—基于日志的数据库恢复机制 385
11.2.6 LSN—维系数据和日志的纽带 386
11.2.7 WAL—先写日志的恢复机制 388
11.3 SQL Server 2000的常见故障和恢复机制 390
11.3.1 Undo—事务故障及其恢复机制 390
11.3.2 Undo+Redo—系统故障及其恢复机制 391
11.3.3 Redo—介质故障及其恢复机制 391
11.4 SQL Server 2000的日志检查点机制 392
11.4.1 检查点—日志的驿站 392
11.4.2 为什么检查点能提高恢复的效率 393
11.4.3 MinLSN—如何选择最小恢复LSN 394
11.4.4 什么情况下产生检查点 394
11.4.5 SQL Server 2000的自动检查点机制 395
11.4.6 CHECKPOINT—手动产生检查点 395
11.5 安全VS.空间—SQL Server 2000数据库的恢复模型 396
11.5.1 完全恢复模型 396
11.5.2 大容量日志记录恢复模型 397
11.5.3 简单恢复模型 397
11.5.4 3种恢复模型的比较 397
11.5.5 设置SQL Server 2000数据库的恢复模型 398
11.5.6 不同恢复模型下的检查点操作 398
11.6 SQL Server 2000的备份机制 400
11.6.1 SQL Server 2000的备份类型 400
11.6.2 不同的恢复模型支持的备份类型 401
11.6.3 SQL Server 2000的备份设备 401
11.6.4 用SP_SPACEUSED估计备份的大小 403
11.7 用【企业管理器】备份与恢复 404
11.7.1 完全数据库备份 404
11.7.2 完全数据库恢复 405
11.7.3 事务日志备份 406
11.7.4 事务日志恢复 407
11.7.5 差异数据库备份 408
11.7.6 差异数据库恢复 409
11.7.7 文件和文件组备份 410
11.7.8 文件和文件组恢复 411
11.8 用Transact-SQL备份与恢复 412
11.8.1 用于数据库备份的Transact-SQL语句 412
11.8.2 用于文件或文件组备份的Transact-SQL语句 414
11.8.3 用于日志备份的Transact-SQL语句 415
11.8.4 截断事务日志Transact-SQL语句 416
11.8.5 恢复完全数据库备份的Transact-SQL语句 416
11.8.6 恢复事务日志备份的Transact-SQL语句 417
11.9 设计和实施一个完整的数据库备份与恢复方案 418
11.9.1 技术VS.代价—如何制定备份与恢复方案 418
11.9.2 选择SQL Server 2000数据库的恢复模型 420
11.9.3 适合绝大部分数据库的两种备份与恢复方案 421
11.9.4 剖析一个完整的数据库备份与恢复方案 421
11.9.5 实施一个完整的数据库备份方案 422
11.9.6 实施灾难数据库恢复方案 425
11.11 疑难解析 426
11.11.1 仅有.BAK文件时如何恢复 426
11.11.2 为什么无法进行事务日志备份和文件备份 427
11.11.3 为什么无法创建差异数据库备份 427
11.11.4 备份或者恢复过程发生中断如何处理 428
11.11.5 什么时机需要备份Master数据库 429
11.11.6 需不需要备份tempdb数据库 429
11.11.7 当前日志和备份日志有什么关系 429
11.11.8 仅有数据文件、没有日志文件时如何恢复 429
11.11.9 DBCC LOGINFO查看VLF 431
11.11 本章小结 432
11.12 实践题目 432
第12章 智能管理—代理服务 434
12.1 本章导读 434
12.2 SQL Server 2000的代理服务机制 434
12.2.1 SQL Server 2000代理服务的结构 434
12.2.2 SQL Server 2000代理服务的运行环境 435
12.2.3 配置SQL Server 2000代理服务的属性 435
12.3 一个基于代理服务实现的智能作业 437
12.3.1 创建警报 437
12.3.2 创建操作员 438
12.3.3 创建作业 439
12.4 本章小结 441
12.5 实践题目 442
第13章 服务器性能监控、调整和优化 443
13.1 本章导读 443
13.2 可能导致性能瓶颈的因素 444
13.2.1 服务器资源 444
13.2.2 网络 444
13.2.3 数据库设计 444
13.2.4 应用系统设计 444
13.3 服务器性能监控和调整工具 445
13.3.1 Windows的【性能监控器】 445
13.3.2 Windows的【任务管理器】 446
13.3.3 SQL Server 2000的【事件探查器】 447
13.3.4 SQL Server 2000的【查询分析器】 449
13.3.5 特殊的系统存储过程 449
13.3.6 特殊的DBCC命令 449
13.3.7 特殊的全局变量 450
13.3.8 SQL Server 2000的【索引调节向导】 453
13.4 监控和调整I/O性能 453
13.4.1 磁盘I/O对服务器性能的影响 453
13.4.2 监控磁盘I/O性能的计数器 453
13.4.3 磁盘I/O是否是性能瓶颈 454
13.4.4 可能导致磁盘I/O性能瓶颈的原因 454
13.4.5 顺序I/O VS.随机I/O—SQL Server 2000的I/O类型 455
13.4.6 调整I/O性能的方法 455
13.5 监控和调整内存性能 456
13.5.1 物理内存VS.虚拟内存 456
13.5.2 内存页面错误—内存性能低下的原因 456
13.5.3 监控内存性能的计数器 457
13.5.4 内存是不是性能瓶颈 457
13.5.5 调整内存性能的方法 458
13.6 监控和调整CPU性能 458
13.6.1 进程VS.线程VS.纤程—分配CPU资源的单位 458
13.6.2 用户模式VS.特权模式 459
13.6.3 监控CPU性能的计数器 459
13.6.4 CPU是不是性能的瓶颈 459
13.6.5 监控消耗CPU资源进程的计数器 460
13.6.6 监控消耗CPU资源线程的计数器 460
13.6.7 监控进程和线程的意义 460
13.6.8 更多CPU VS.更快的CPU 461
13.7 监控和调整网络性能 461
13.7.1 监控网络性能的计数器 461
13.7.2 调整网络性能的方法 461
13.8 调整和优化数据库设计 462
13.8.1 监控数据库性能的计数器 462
13.8.2 优化数据库设计的方法 464
13.9 调整和优化应用系统设计 464
13.9.1 监控应用系统性能的计数器 464
13.9.2 优化应用系统设计的方法 465
13.10 设计和实现一个优化的SQL Server 2000服务器 465
13.10.1 数据和日志文件分开存放在不同磁盘上 465
13.10.2 tempdb数据库单独存放在不同磁盘上 465
13.10.3 避免热点数据的发生 466
13.10.4 数据类型要少 466
13.10.5 监控和整理空间碎片 466
13.10.6 使用主数据文件和次要数据文件 466
13.10.7 利用文件组改善性能 466
13.10.8 重视自动增长和自动收缩可能导致的性能问题 467
13.10.9 分离系统数据和用户数据 467
13.10.10 优化索引设计 467
13.10.11 定期更新统计信息 467
13.10.12 定期的一致性检查 467
13.11 疑难解析 467
13.11.1 整数VS.浮点运算能力—配置SQL Server 2000系统的CPU 467
13.11.2 查询密集VS.事务密集—配置SQL Server 2000系统的内存 468
13.11.2 容量VS.吞吐量—配置SQL Server 2000系统的硬盘 468
13.12 本章小结 468
第14章 SQL SERVER 2000高级管理专题 470
14.1 本章导读 470
14.2 数据转换服务DTS 470
14.2.1 什么是DTS服务 470
14.2.2 使用DTS向导转换数据 471
14.2.3 创建DTS包 474
14.2.4 DTS包调度执行失败原因及解决方法 477
14.3 全文索引 478
14.3.1 基表查询VS.全文查询 478
14.3.2 什么是全文目录 479
14.3.3 什么是全文索引 479
14.3.4 启用全文检索服务 479
14.3.5 定义全文索引 480
14.3.6 利用全文索引检索数据 482
14.4 分布式数据复制 484
14.4.1 备份VS.复制 484
14.4.2 分布式数据复制的优点 484
14.4.3 什么时机需要使用分布式数据复制 485
14.4.4 SQL Server 2000分布式数据复制的机制 485
14.4.5 拉订阅(请求订阅)VS.推订阅(强制订阅) 485
14.4.6 SQL Server 2000的分布式数据复制类型 486
14.4.7 SQL Server 2000的分布式数据复制代理 487
14.4.8 配置发布、订阅和分发服务器 488
14.4.9 使用【复制监视器】 491
14.4.10 创建及管理发布 492
14.4.11 创建订阅 495
14.5 本章小结 499
第15章 专业的SQL SERVER 2000管理工具 500
15.1 本章导读 500
15.2 Quest Central 501
15.2.1 Quest Central简介 501
15.2.2 Quest Central for SQL Server简介 501
15.2.3 注册SQL Server 2000服务器 502
15.2.4 自动发现未注册的SQL Server 2000服务器 503
15.2.5 比较两个SQL Server 2000对象 504
15.2.6 Knowledge Xpert —SQL Server 2000知识宝典 505
15.2.7 SQL Tuning—设计优化的SQL语句 506
15.2.8 Space Management—可视化的空间管理工具 507
15.2.9 Database Analysis—专业数据库性能分析工具 508
15.2.10 Performance Analysis—实时诊断和历史分析工具 508
15.3 Spotlight 509
15.3.1 Spotlight简介 509
15.3.2 用Spotlight监控服务器总体性能 509
15.3.3 用Spotlight监控I/O 510
15.3.4 用Spotlight监控Sessions 511
15.3.5 用Spotlight监控Lock 511
15.3.6 用Spotlight监控有无资源阻塞 512
15.3.7 用Spotlight监控物理文件的I/O 512
15.3.8 用Spotlight监控内存总体性能 513
15.3.9 用Spotlight监控数据库空间使用情况 513
15.4 Data Factory 514
15.4.1 Data Factory简介 514
15.4.2 利用Data Factory产生数据 514
15.5 Benchmark Factory 516
15.5.1 Benchmarka Factory简介 516
15.5.2 数据库压力测试工业标准 517
15.5.3 用Benchmark Factory测试数据库压力 517
15.6 本章小结 520
第二部分 Transact-SQL编程
第16章 TRANSACT-SQL编程 523
16.1 本章导读 523
16.2 Transact-SQL VS. SQL 523
16.2.1 什么是Transact-SQL 523
16.2.2 Transact-SQL VS. SQL 524
16.2.3 Transact-SQL程序的结构 524
16.2.4 Transact-SQL程序的数据类型 525
16.2.5 Transact-SQL程序的批处理 525
16.2.6 应用程序中如何使用Transact-SQL程序 526
16.2.7 Transact-SQL程序的运算符 526
16.3 变量 527
16.3.1 Transact-SQL的变量类型 527
16.3.2 Transact-SQL的全局变量 528
16.3.3 创建和使用局部变量 529
16.4 函数 530
16.4.1 Convert函数 530
16.4.2 创建和使用自定义函数 531
16.5 流程控制语句 533
16.5.1 程序块语句(BEGIN…END) 533
16.5.2 判断语句(IF…ELSE) 534
16.5.3 检测语句(IF…EXISTS) 536
16.5.4 循环语句(WHILE) 536
16.5.5 分支判断语句(CASE…WHEN) 537
16.5.6 无条件退出语句(RETURN) 538
16.5.7 延期执行语句(WAITFOR) 540
16.5.8 跳转语句(GOTO) 541
16.6 功能性语句 542
16.6.1 输出语句(PRINT) 542
16.6.2 错误处理语句(RAISEERROR) 543
16.6.3 选项设置语句(SET) 544
16.7 游标(Cursor) 545
16.7.1 什么是游标 545
16.7.2 游标的生命周期 545
16.7.3 声明游标 546
16.7.4 打开游标 547
16.7.5 读取游标 547
16.7.6 关闭游标 548
16.7.7 释放游标 548
16.7.8 完整的游标实例 548
16.7.9 游标的执行效率很差吗 549
16.8 本章小结 550
第17章 存储过程和触发器 551
17.1 本章导读 551
17.2 存储过程基础 551
17.2.1 为什么要设计存储过程 551
17.2.2 什么是存储过程 552
17.2.3 存储过程的作用 552
17.2.4 存储过程有什么优点 552
17.2.5 SQL Server 2000存储过程的分类 553
17.3 创建、执行和管理存储过程 553
17.3.1 在【企业管理器】中创建存储过程 553
17.3.2 创建存储过程的Transact-SQL语法 556
17.3.3 执行存储过程 557
17.3.4 创建带参数和返回值的存储过程 559
17.3.5 执行带参数和返回值的存储过程 560
17.3.6 删除存储过程 560
17.3.7 执行带参数的存储过程的等效语句 560
17.4 触发器基础 561
17.4.1 什么是触发器 561
17.4.2 SQL Server 2000的触发器类型 561
17.4.3 SQL Server 2000的触发器工作原理 562
17.4.4 SQL Server 2000触发器的优点 563
17.4.5 什么时机使用触发器 563
17.5 创建和管理触发器 563
17.5.1 创建触发器的Transact-SQL语法 563
17.5.2 在【企业管理器】中创建触发器 564
17.5.3 删除触发器 565
17.5.4 触发器和约束的区别 565
17.5.5 触发器中是否可以使用Inserted和Deleted表 565
17.6 本章小结 566
17.7 实践题目 566
第三部分 VB+SQL Server 2000应用开发
第18章 SQL SERVER 2000应用开发基础 571
18.1 本章导读 571
18.2 两种SQL Server 2000数据库项目模式 572
18.2.1 C/S模式的数据库项目 572
18.2.2 B/S模式的数据库项目 572
18.3 SQL Server 2000项目开发流程 573
18.3.1 可行性研究 573
18.3.2 需求分析 574
18.3.3 概要设计 574
18.3.4 详细设计前台应用系统 575
18.3.5 详细设计数据库系统 575
18.3.6 代码设计 576
18.3.7 测试维护 576
18.3.8 撰写规范的项目开发文档 576
18.4 构建VB+SQL Server 2000项目开发环境 577
18.4.1 确保SQL Server 2000服务器正常工作 577
18.4.2 测试开发机和SQL Server 2000服务器的连接 578
18.5 VB+SQL Server 2000项目开发关键技术 580
18.5.1 什么是ActiveX控件 580
18.5.2 ADO—开发数据库项目的积木 581
18.5.3 SQL—ADO操纵SQL Server 2000数据库的语言 581
18.5.4 ODBC接口 581
18.5.5 OLEDB接口 582
18.5.6 完整的ADO程序结构 583
18.5.7 连接池—影响程序效率的黑马 583
18.6 本章小结 585
第19章 VB数据库项目开发关键 586
19.1 本章导读 586
19.2 完整的VB数据库项目开发流程 586
19.2.1 建立数据库工程 587
19.2.2 设计步骤 587
19.2.3 剖析工程的结构 592
19.2.4 设置工程的属性 592
19.2.5 编译工程 593
19.2.6 打包和发布工程 594
19.3 3种VB数据库项目编程技术 596
19.3.1 如何引用ADODB对象 596
19.3.2 使用表名的VB数据库项目编程技术 597
19.3.3 使用SQL语句的VB数据库项目编程技术 600
19.3.4 使用存储过程的VB数据库项目编程技术 600
19.3.5 3种VB数据库项目编程技术比较 603
19.4 3种VB数据库项目接口技术 603
19.4.1 ODBC接口技术 603
19.4.2 OLEDB接口技术 606
19.4.3 OLEDB-ODBC接口技术 606
19.4.4 3种接口技术比较 606
19.5 3种质量的VB数据库项目代码 607
19.5.1 代码级别的VB数据库项目 607
19.5.2 模块级别的VB数据库项目 607
19.5.3 类模块级别的VB数据库项目 608
19.6 ODBC API数据库项目开发 608
19.6.1 间接的ODBC接口技术 608
19.6.2 使用ODBC API的直接接口技术 608
19.6.3 剖析ODBC API的编程机制 609
19.6.4 开发一个完整的ODBC API数据库项目 612
19.6.5 剖析ODBC API数据库项目的结构 616
19.6.6 ODBC API不是效率的神话 617
19.7 VB和SQL Server 2000数据类型的转换 617
19.7.1 SQL Server 2000的数据类型 617
19.7.2 VB的数据类型 618
19.7.3 VB和SQL Server 2000数据类型的转换 619
19.8 VB数据库项目常用函数 619
19.8.1 常用字符和数值转换函数 619
19.8.2 常用的字符串函数 620
19.8.3 常用的日期型函数 622
19.8.4 常用的数据类型转换函数 623
19.9 本章小结 624
第20章 基于ADO的VB数据库应用开发 626
20.1 本章导读 626
20.2 基于ADODC的数据库应用开发 626
20.2.1 使用通用数据链接文件的ADODC 626
20.2.2 使用文件DSN的ADODC 628
20.2.3 使用系统DSN的ADODC 631
20.2.4 使用连接字符串的ADODC 632
20.2.5 ADODC连接SQL Server 2000数据库方法比较 633
20.2.6 ADODC编程 633
20.3 ADO的体系结构 635
20.3.1 客户机内存VS.服务器内存—ADO数据在哪里 635
20.3.2 内存中的ADO数据 635
20.3.3 ADODC的体系结构 637
20.3.4 ADODB的体系结构 637
20.3.5 ADODC和ADODB的体系结构比较 638
20.4 Connection对象编程 638
20.4.1 设计Connection对象工程 639
20.4.2 Connection对象的编程结构 640
20.4.3 Connection对象的编程要素 640
20.5 Recordset对象编程 641
20.5.1 设计Recordset对象工程 641
20.5.2 Recordset对象的编程结构 642
20.5.3 Open—Recordset对象如何提取数据 643
20.5.4 Cursor—让Recordset数据自由移动的指针 645
20.5.5 CursorLocation—Cursor存放在客户机还是服务器 645
20.5.6 CursorType—移动数据有区别 648
20.5.7 LockType—确保数据的安全 650
20.5.8 Recordset对象的编程方法 654
20.5.9 Recordset对象的编程属性 654
20.5.10 一个Recordset对象编程的完整实例 655
20.6 Command对象编程 657
20.6.1 无Command对象如何执行SQL 658
20.6.2 使用Command对象如何执行SQL 658
20.6.3 Command和Recordset对象执行SQL方法的比较 660
20.7 本章小结 661
第21章 控件—显示数据的艺术 662
21.1 本章导读 662
21.2 ADODC控件 662
21.2.1 BOFAction—到达首记录如何处理 663
21.2.2 EOFAction—到达尾记录如何处理 663
21.2.3 CacheSize—客户机内存上有多少记录 663
21.2.4 CommandTimeout—ADO判断错误命令的最长时间 663
21.2.5 CommandType—用什么命令提取数据 664
21.2.6 ConnectionString—数据库在哪里 664
21.2.7 ConnectionTimeout—ADO连接等待的最长时间 664
21.2.8 CursorLocation—Cursor放在客户机还是服务器上 664
21.2.9 CursorType—移动Recordset数据有区别 664
21.2.10 LockType—怎样确保数据的安全 665
21.2.11 MaxRecords—最大的数据记录数目 665
21.2.12 Mode—连接信息的更改权限 665
21.2.13 Password—访问数据库的密码 665
21.2.14 UserName—访问数据库的账户 665
21.2.15 RecordSource—访问数据库的账户 666
21.3 DataList控件 666
21.3.1 编写一个使用DataList控件的程序 666
21.3.2 RowSource—指定DataList控件的数据来源 667
21.3.3 ListField—指定DataList控件显示的数据 667
21.3.4 BoundColumn—指定DataList控件返回的数据 668
21.3.5 ADODC控件和DataList控件是如何连接的 668
21.3.6 DataList控件的主要方法 668
21.4 DataCombo控件 668
21.4.1 编写一个使用DataCombo控件的程序 668
21.4.2 DataCombo控件的主要属性 670
21.4.3 DataCombo控件的主要方法 670
21.4.4 ADODC控件和DataCombo控件是如何连接的 670
21.5 DataGrid控件 670
21.5.1 编写一个使用DataGrid控件的程序 671
21.5.2 DataGrid控件的主要属性 673
21.5.3 DataGrid控件的布局艺术 673
21.5.4 给DataGrid控件添加数据列 674
21.6 本章小结 674
第22章 报表—打印数据的艺术 675
22.1 本章导读 675
22.2 数据环境—报表数据之源 675
22.2.1 设计一个数据环境对象 676
22.2.2 在程序中使用数据环境对象 678
22.2.3 数据环境对象的主要属性 679
22.2.4 数据环境对象的主要方法 680
22.2.5 对数据环境对象编程 680
22.3 报表的设计艺术 683
22.3.1 设计一个空白报表 683
22.3.2 报表设计器 685
22.3.3 向空白报表中添加数据 686
22.3.4 设计列表式报表 687
22.3.5 在报表中打印时间、日期和页码 689
22.3.6 报表数据对齐 689
22.3.7 设计数据的打印格式 689
22.3.8 打印数据的自动换行 690
22.3.9 避免不恰当的数据分页 690
22.3.10 控制报表组成部分是否分页 691
22.3.11 设置打印的报表大小 691
22.3.12 如何控制报表的预览 692
22.3.13 如何控制报表的打印 692
22.3.14 如何控制报表的导出 693
22.3.15 利用RptFunction控件设计统计报表 693
22.4 分组统计报表的设计艺术 695
22.4.1 设计工程结构 695
22.4.2 在数据环境中建立数据分组 696
22.4.3 设计分组统计报表 697
22.4.4 分组统计报表的设计步骤 701
22.5 利用【水晶报表】设计报表 701
22.5.1 利用【水晶报表】设计报表 701
22.5.2 在VB程序中调用设计的报表 704
22.5.3 实践中发现的问题 706
22.6 本章小结 707
第一部分 SQL Server 2000系统管理
第1章 构建SQL SERVER 2000网络 3
1.1 本章导读 3
1.2 初识计算机网络 3
1.2.1 计算机网络的定义 3
1.2.2 计算机网络的发展历程 4
1.2.3 计算机网络的分类 5
1.2.4 计算机网络的拓朴结构 5
1.2.5 网络中的计算机通信的原理 6
1.2.6 TCP/IP 7
1.2.7 客户机/服务器模式 9
1.2.8 端口 9
1.2.9 配置计算机的IP地址 10
1.2.10 查看计算机的端口使用情况 10
1.3 初识数据库 11
1.3.1 数据库系统 11
1.3.2 数据库 11
1.3.3 数据库管理系统 12
1.3.4 数据库应用系统 12
1.3.5 数据库系统相关人员 12
1.3.6 关系模型 12
1.3.7 关系型数据库 13
1.3.8 关系型数据表的关联关系 13
1.3.9 关系型数据的完整性 14
1.4 初识关系型网络数据库 16
1.4.1 关系型网络数据库的特点 16
1.4.2 关系型网络数据库的工作模式 16
1.5 初识SQL Server 2000 17
1.5.1 SQL Server 2000的产品版本 17
1.5.2 安装环境需求 18
1.5.3 实例(Instance) 19
1.5.4 服务账户 19
1.5.5 身份验证模式 20
1.5.6 客户机许可模式 20
1.5.7 SQL Server 2000网络采用的通信协议 21
1.6 构建SQL Server 2000服务器和客户机 21
1.6.1 构建SQL Server 2000服务器 21
1.6.2 构建SQL Server 2000客户机 25
1.7 实验:远程客户机能否通过共享内存访问服务器 25
1.7.1 在服务器上配置共享内存 26
1.7.2 在本地客户机上配置共享内存 28
1.7.3 在远程客户机上配置共享内存 29
1.7.4 实验结论 29
1.8 实验:配置命名管道的SQL Server 2000网络 29
1.8.1 在服务器上配置命名管道 30
1.8.2 在本地客户机上配置命名管道 31
1.8.3 在远程客户机上配置命名管道 32
1.8.4 实验结论 33
1.9 实验:配置TCP/IP的SQL Server 2000网络 33
1.9.1 在服务器上配置TCP/IP 33
1.9.2 在本地客户机上配置TCP/IP 34
1.9.3 在远程客户机上配置TCP/IP 35
1.9.4 实验结论 35
1.10 实验:明明白白配置TCP/IP的端口 35
1.10.1 更改服务器的端口 35
1.10.2 客户机上如何进行配置 36
1.10.3 什么是动态决定端口 36
1.10.4 实验结论 37
1.11 实验:配置多协议的SQL Server 2000网络 38
1.11.1 在服务器上配置多协议 38
1.11.2 在本地客户机上配置多协议 39
1.11.3 在远程客户机上配置多协议 39
1.11.4 实验结论 39
1.12 实验:Winsock代理设置的含义 40
1.12.1 什么是代理服务 40
1.12.2 什么是Winsock代理 41
1.12.3 在服务器上设置Winsock代理 41
1.12.4 在客户机上配置Winsock代理 42
1.12.5 实验结论 42
1.13 实验:为什么强制协议加密导致服务器无法启动 42
1.13.1 在服务器上配置强制协议加密 43
1.13.2 实验结论 43
1.14 疑难解析 44
1.14.1 Windows XP上可以安装什么SQL Server 2000版本 44
1.14.2 Windows 2003上如何安装SQL Server 2000企业版 44
1.14.3 启动提示“1069错误(由于登录失败而无法启动服务)”如何解决 44
1.14.4 服务器的1433端口没有启动如何解决 45
1.14.5 如何下载SQL Server 2000的SP3 45
1.14.6 如何远程管理Internet上的SQL Server 2000服务器 45
1.14.7 如何卸载SQL Server 2000 46
1.14.8 排除SQL Server 2000网络连接故障 46
1.14.9 排除SQL Server 2000连接超时故障 47
1.14.10 什么是数据字典 47
1.14.11 DBA都有什么职责 47
1.14.12 DBA日常如何工作 48
1.14.13 什么是数据库的模型 49
1.14.14 什么是IPC机制 49
1.14.15 什么是网络库(Net-Library) 50
1.14.16 什么是关系型数据库的范式 50
1.15 本章小结 51
1.16 实践题目 51
第2章 SQL SERVER 2000的体系结构 53
2.1 本章导读 53
2.2 SQL Server 2000网络结构 53
2.2.1 SQL Server 2000的C/S模式 54
2.2.2 客户机的结构 54
2.2.3 服务器的结构 55
2.3 SQL Server 2000服务器的引擎结构 57
2.3.1 SQL Server 2000引擎工作流程 57
2.3.2 SQL Server 2000引擎的设计 59
2.4 SQL Server 2000服务器的内存结构 61
2.4.1 为什么要设计内存 61
2.4.2 如何为SQL Server 2000服务器分配内存 61
2.4.3 SQL Server 2000服务器内存有什么内容 62
2.4.4 如何快速访问SQL Server 2000服务器内存 62
2.4.5 如何替换SQL Server 2000服务器内存页面 63
2.4.6 SQL Server 2000服务器日志缓冲池如何管理 63
2.5 SQL Server 2000服务器的存储结构 64
2.5.1 SQL Server 2000服务器的物理文件 64
2.5.2 页面(Page)—SQL Server 2000数据文件的存储单位 64
2.5.3 页面是如何存储数据的 65
2.5.4 DBCC PAGE—如何查看页面的数据 65
2.5.5 如何查询数据库的ID和名称 66
2.5.6 如何查询数据文件的ID和名称 66
2.5.7 一个查询数据页面信息的实例 67
2.5.8 内存是如何管理数据页面的 71
2.5.9 页头—物理页面是如何管理的 71
2.5.10 如何查询ID所属的数据对象 72
2.5.11 槽(Slot)—数据记录(行)在数据页面中如何存储 73
2.5.12 盘区(Extent)—SQL Server 2000是如何分配存储空间的 74
2.5.13 如何提高盘区的空间利用率 74
2.5.14 GAM—SQL Server 2000的盘区是如何管理的 75
2.5.15 SGAM—SQL Server 2000的混合盘区是如何管理的 76
2.5.16 SQL Server 2000如何为数据对象分配盘区 77
2.5.17 数据文件的页面结构是怎样的 77
2.5.18 如何查询数据文件的页面数 78
2.5.19 如何查询数据库的页面数 78
2.5.20 如何查询数据库的盘区数 78
2.5.21 如何查询数据对象的盘区数 79
2.5.22 LOB数据是如何存储的 80
2.5.23 如何将小的LOB数据保存在数据页面内 80
2.5.24 日志文件的存储空间是如何管理的 80
2.6 SQL Server 2000服务器的进程结构 81
2.6.1 什么是SQL Server 2000进程 81
2.6.2 什么是SQL Server 2000线程 81
2.6.3 什么是SQL Server 2000纤程 82
2.6.4 SQL语句是怎样使用CPU资源的 82
2.6.5 线程或者纤程分配越多效率就越高吗 82
2.6.6 什么是线程或者纤程的执行优先级 82
2.7 实验:SQL Server 2000如何管理表 83
2.7.1 创建测试用数据表 83
2.7.2 分析日志内容 84
2.7.3 验证系统表中产生的信息 87
2.7.4 实验结论 88
2.8 实验:对数据页面存储参数的深入研究 88
2.8.1 pminlen参数的含义 89
2.8.2 m_freecnt参数的含义 89
2.8.3 数据页面空间是如何分配的 90
2.9 实验:揭秘定长记录(行)的存储空间 90
2.9.1 向定长数据表中录入数据 91
2.9.2 用DBCC PAGE查看定长记录的存储 93
2.9.3 数据页面的空间分配 94
2.9.4 总结定长行存储空间的计算方法 95
2.10 实验:揭秘变长记录(行)的存储空间 96
2.10.1 向变长数据表中录入数据 96
2.10.2 用DBCC PAGE查看变长记录的存储空间 97
2.10.3 数据页面的空间分配 98
2.10.4 总结变长行存储空间的计算方法 99
2.10.5 总结计算表行存储空间的方法 99
2.11 实验:为什么包含LOB类型的记录可以跨越页面 100
2.11.1 LOB对象记录的存储机制 100
2.11.2 研究LOB类型的表的存储 101
2.11.3 实验结论 104
2.12 实验:将LOB数据和普通数据存储在同一个页面 104
2.12.1 将LOB数据和普通数据存储在同一页面 104
2.12.2 将LOB数据和普通数据分开存储 105
2.13 实验:NULL值是否占用存储空间 105
2.13.1 定长和变长字段都取NULL值 106
2.13.2 定长字段取NULL值、变长字段取NOT NULL值 107
2.13.3 定长字段取NOT NULL值、变长字段取NULL值 108
2.13.4 定长和变长字段都取NOT NULL值 109
2.13.5 实验结论 110
2.14 疑难解析 110
2.14.1 为什么页面可以存储的数据容量参数不一致 110
2.14.2 能不能将特定的数据始终保留在内存中 110
2.14.3 最多可以为SQL Server 2000分配多少内存 110
2.14.4 如何判断SQL Server 2000内存够不够用 111
2.14.5 什么是Read Ahead(先读) 111
2.14.6 什么是旋转木马扫描(Merry-Go-Round Scan) 111
2.14.7 同步VS.异步—数据和日志文件的写机制区别 112
2.14.8 什么时机使用纤程 112
2.14.9 线程数和连接数有无关系 113
2.14.10 什么是零散收集I/O 113
2.14.11 什么是异步I/O 114
2.14.12 什么是TDS 114
2.14.13 什么是Latch 114
2.15 本章小结 114
2.16 实践题目 115
第3章 管理和配置服务器 118
3.1 本章导读 118
3.2 服务器的管理和配置工具 118
3.2.1 MMC和企业管理器是什么关系 119
3.2.2 如何配置企业管理器 119
3.2.3 为什么查询分析器查询的对象名无效 121
3.2.4 查询分析器显示的执行计划有什么意义 122
3.2.5 查询分析器显示的服务器跟踪有什么意义 123
3.2.6 查询分析器显示的客户统计有什么意义 123
3.2.7 什么是查询分析器的模板(Template) 124
3.3 服务器组 125
3.3.1 什么是服务器组 125
3.3.2 什么是基于服务器组的管理结构 125
3.4 注册服务器 125
3.4.1 什么是服务器的注册 125
3.4.2 什么情况下需要注册服务器 126
3.4.3 怎样注册一个服务器 126
3.5 暂停、启动和关闭服务器 127
3.5.1 什么时机需要暂停服务器 128
3.5.2 如何暂停服务器 128
3.5.3 如何关闭服务器 128
3.5.4 关闭和暂停服务器有什么区别 129
3.5.5 如何启动服务器 129
3.5.6 在企业管理器中管理服务器 130
3.6 配置服务器 130
3.6.1 怎样查看服务器的环境信息 130
3.6.2 什么是服务器的排序规则 131
3.6.3 哪些服务可以自动启动 131
3.6.4 什么是服务器的错误报告功能 132
3.6.5 如何配置使用动态内存的服务器 132
3.6.6 如何配置一个使用固定内存的服务器 133
3.6.7 SQL Server 2000服务器可以使用哪些CPU 133
3.6.8 如何设置CPU的最大线程数 133
3.6.9 是否提升SQL Server 2000线程的优先级 134
3.6.10 使用线程还是纤程 134
3.6.11 是否启用多CPU做并行查询 134
3.6.12 如何更改服务器的身份验证方式 134
3.6.13 如何对服务器进行审核 135
3.6.14 如何查看服务器的审核信息 135
3.6.15 谁可以启动服务器 136
3.6.16 如何限制并发连接的用户数 137
3.6.17 如何在服务器之间执行分布式事务 137
3.6.18 什么是用户的默认语言 138
3.6.19 如何控制服务器的行为 138
3.6.20 服务器如何解释两位数年份 139
3.6.21 什么是索引填充因子 139
3.6.22 如何设置磁带备份和还原参数 141
3.6.23 什么是恢复间隔 141
3.6.24 创建数据库的文件存放在哪里 142
3.6.25 如何查询服务器的当前配置参数 142
3.6.26 如何查询服务器的当前运行参数 142
3.7 多服务器环境的管理和配置 143
3.7.1 创建和使用链接服务器 143
3.7.2 创建和使用远程服务器 145
3.8 疑难解析 146
3.8.1 注册名为Local如何处理 146
3.8.2 如何设置服务器的内存大小 146
3.8.3 为什么服务器占用内存太多 146
3.8.4 什么是服务器的错误日志 147
3.9 本章小结 147
3.10 实践题目 148
第4章 管理和配置数据库 149
4.1 本章导读 149
4.2 默认的4个系统数据库 150
4.2.1 master数据库有什么作用 150
4.2.2 model数据库有什么作用 150
4.2.3 msdb数据库有什么作用 150
4.2.4 tempdb数据库有什么作用 150
4.2.5 4个系统数据库是如何启动的 151
4.3 创建用户数据库 152
4.3.1 谁可以创建用户数据库 152
4.3.2 如何命名用户数据库 152
4.3.3 创建用户数据库会产生哪些操作系统文件 152
4.3.4 为什么要评估数据文件的初始大小 153
4.3.5 粗略评估数据文件初始大小的案例 153
4.3.6 创建用户数据库的案例 153
4.4 配置用户数据库 155
4.4.1 数据库工作在什么状态 155
4.4.2 数据库当前空间利用率是多少 156
4.4.3 怎样添加次要数据文件 156
4.4.4 数据文件之间怎样存储数据 156
4.4.5 怎样添加多个日志文件 157
4.4.6 日志文件之间怎样存储数据 157
4.4.7 什么是文件组 158
4.4.8 什么是默认的文件组 158
4.4.9 如何使用文件组 158
4.4.10 如何创建文件组 159
4.4.11 如何限制用户对数据库的访问 159
4.4.12 什么是数据库的单用户模式 160
4.4.13 如何选择数据库的故障还原模型(恢复模型) 160
4.4.14 选项设置参数有什么含义 161
4.4.15 什么是数据库的兼容性 162
4.4.16 如何设置用户访问数据库的权限 162
4.5 分离和附加用户数据库 163
4.5.1 如何分离数据库 163
4.5.2 如何附加数据库 163
4.6 脱机和联机用户数据库 164
4.6.1 如何脱机数据库 164
4.6.2 如何联机数据库 165
4.7 维护用户数据库 165
4.7.1 什么是数据库的维护计划 165
4.7.2 创建数据库维护计划 165
4.8 收缩用户数据库 168
4.8.1 为什么要收缩数据库 168
4.8.2 什么是自动收缩和手动收缩 169
4.8.3 收缩数据文件和日志文件有什么不同 169
4.8.4 收缩操作是如何执行的 169
4.8.5 收缩数据库的案例 169
4.9 删除用户数据库 170
4.10 实验:tempdb数据库的数据存放在内存还是硬盘上 171
4.11 实验:数据文件组的比例填充写机制 173
4.11.1 测试比例填充写机制的方法 173
4.11.2 研究数据页面分配方法 174
4.12 实验:日志文件的循环写机制 176
4.13 疑难解析 176
4.13.1 文件必须按照指定的扩展名命名吗 176
4.13.2 能不能重新命名数据库 177
4.13.3 如何删除数据文件 177
4.13.4 如何删除日志文件 178
4.13.5 为什么分区上无法创建文件 178
4.13.6 如何查看数据库空间使用情况 178
4.13.7 如何使用tempdb数据库 178
4.13.8 为什么恢复Master数据库提示必须单用户模式 179
4.13.9 Tempdb数据库可以恢复吗 179
4.13.10 如何在Tempdb数据库中创建临时表 179
4.13.11 在企业管理器中看不到Tempdb数据库的临时表 179
4.13.12 为什么对Tempdb数据库的操作执行较快 180
4.13.13 如何更改Tempdb数据库文件的存储路径 180
4.14 本章小结 181
4.15 实践题目 181
第5章 DBCC命令 182
5.1 本章导读 182
5.2 DBCC帮助类命令 183
5.2.1 DBCC HELP (‘?’) 183
5.2.2 DBCC HELP (‘命令’) 183
5.2.3 DBCC USEROPTIONS 183
5.3 DBCC状态验证类命令 183
5.3.1 DBCC CHECKALLOC 183
5.3.2 DBCC CHECKCATALOG 184
5.3.3 DBCC CHECKCONSTRINTS 185
5.3.4 DBCC CHECKDB 185
5.3.5 DBCC CHECKFILEGROUP 186
5.3.6 DBCC CHECKTABLE 187
5.3.7 DBCC CHECKIDENT 188
5.4 DBCC维护类命令 188
5.4.1 DBCC CLEANTABLE 188
5.4.2 DBCC DBREINDEX 189
5.4.3 DBCC UPDATEUSAGE 190
5.4.4 DBCC INDEXDEFRAG 191
5.4.5 DBCC PINTABLE 192
5.4.6 DBCC UNPINTABLE 193
5.4.7 DBCC SHRINKDATABASE 193
5.4.8 DBCC SHRINKFILE 195
5.5 DBCC性能调节类命令 197
5.5.1 DBCC dllname(FREE) 197
5.5.2 DBCC DROPCLEANBUFFERS 197
5.5.3 DBCC FREEPROCCACHE 198
5.5.4 DBCC INPUTBUFFER 198
5.5.5 DBCC OPENTRAN 199
5.5.6 DBCC OUTPUTBUFFER 199
5.5.7 DBCC SHOW_STATISTICS 200
5.5.8 DBCC SHOWCONTIG 200
5.5.9 DBCC SQLPERF 201
5.5.10 DBCC CACHESTATS 204
5.5.11 DBCC CURSORSTATS 205
5.5.12 DBCC MEMORYSTATS 205
5.5.13 DBCC SQLMGRSTATS 206
5.6 DBCC未公开的命令 206
5.6.1 DBCC ERRLOG 206
5.6.2 DBCC FLUSHPROCINDB 207
5.6.3 DBCC BUFFER 207
5.6.4 DBCC DBINFO 207
5.6.5 DBCC DBTABLE 208
5.6.6 DBCC IND 208
5.6.7 DBCC LOG 208
5.6.8 DBCC PROCBUF 209
5.6.9 DBCC PRTIPAGE 210
5.6.10 DBCC PSS 210
5.6.11 DBCC RESOURCE 211
5.6.12 DBCC TAB 211
5.7 DBCC跟踪标记 212
5.7.1 什么是跟踪标记 212
5.7.2 DBCC TRACEON 212
5.7.3 DBCC TRACEOFF 212
5.7.4 DBCC TRACESTATUS 212
第6章 数据三套车—表、索引和视图 213
6.1 本章导读 213
6.2 数据类型—SQL Server 2000如何表示数据 213
6.2.1 SQL Server 2000的基本数据类型 213
6.2.2 使用整数型数据类型需要注意什么 214
6.2.3 使用货币数据类型需要注意什么 215
6.2.4 如何录入货币数据类型的数据 215
6.2.5 使用精确数字数据类型需要注意什么 215
6.2.6 使用浮点数字数据类型需要注意什么 216
6.2.7 使用日期/时间数字数据类型需要注意什么 216
6.2.8 如何指定日期/时间数据类型的格式 216
6.2.9 使用字符型数据类型时需要注意什么 217
6.2.10 使用Unicode字符型数据类型时需要注意什么 217
6.2.11 使用二进制数据类型时需要注意什么 217
6.2.12 如何创建用户定义的数据类型 218
6.3 表 219
6.3.1 SQL Server 2000表的分类 219
6.3.2 如何设计表 219
6.3.3 设计表结构时为什么要避免NULL值 220
6.3.4 如何选择主码列 220
6.3.5 什么是IDENTITY(标识符)列 220
6.3.6 什么是GUID(全局惟一标识符)列 221
6.3.7 创建表 221
6.3.8 修改表结构 223
6.3.9 删除表 225
6.3.10 SQL Server 2000如何管理表 225
6.3.11 表的数据存储在哪个数据页面 228
6.3.12 文本和图像数据是如何存储的 229
6.3.13 如何计算表需要的存储空间 231
6.4 索引 232
6.4.1 表扫描还是索引扫描—SQL Server 2000如何访问数据 232
6.4.2 索引对数据库是不是必须的 232
6.4.3 索引的原理 233
6.4.4 从堆到B+树—索引文件结构的变迁 233
6.4.5 SQL Server 2000的索引类型 234
6.4.6 时间VS.空间—选择稠密索引还是稀疏索引 235
6.4.7 探究聚集索引的奥秘 236
6.4.8 行定位器—探究非聚集索引的奥秘 243
6.4.9 IAM页面—探究堆集的奥秘 244
6.4.10 什么是页的分裂 245
6.4.11 索引填充因子—避免页分裂的重要参数 246
6.4.12 如何估计B+树索引的大小 246
6.4.13 如何查看索引的实际大小 247
6.4.14 在【企业管理器】中如何创建索引 249
6.4.15 用Transact-SQL语句如何创建索引 250
6.4.16 DBCC IND—如何查看索引分配的页面 251
6.4.17 DBCC SHOWCONTIG—如何检测索引的碎片 252
6.4.18 DBCC INDEXDEFRAG—如何整理索引的碎片 254
6.4.19 选择性和密度—选择索引的奥秘 255
6.4.20 统计信息—影响索引性能的因素 256
6.4.21 用索引优化向导设计索引 257
6.4.22 不是每个索引都有美好结局—总结创建索引的经验 259
6.5 视图 260
6.5.1 视图是什么 260
6.5.2 为什么要使用视图 260
6.5.3 SQL Server 2000中创建视图的规则 261
6.5.4 创建视图 261
6.5.5 通过视图操作表的数据 262
6.6 疑难解析 263
6.6.1 为什么非聚集索引适合返回少数值的查询 263
6.6.2 为什么聚集索引适合范围查询 264
6.6.3 SQL Server 2000中表的规格参数 264
6.6.4 索引是否只对SELECT语句起作用 264
6.6.5 视图上能不能建立索引 265
6.6.6 如何创建覆盖索引 265
6.6.7 什么是数据热点 265
6.6.8 创建的聚集索引如何避免产生数据热点 265
6.6.9 如何选择建立聚集索引的列 266
6.6.10 如何设计聚集索引和非聚集索引 266
6.6.11 如何设计索引的填充因子 266
6.6.12 什么是表变量 267
6.6.13 表变量VS.临时表 267
6.6.14 视图到底有没有自己的数据 268
6.7 本章小结 268
6.8 实践题目 268
第7章 功能VS.效率—SQL详解 270
7.1 本章导读 270
7.2 SQL基础 270
7.2.1 SQL的特点 270
7.2.2 SQL的组成 272
7.2.3 SQL中如何表示数据对象 273
7.3 用SQL定义数据 273
7.3.1 Create Database—创建数据库 274
7.3.2 Alter Database—修改数据库 274
7.3.3 Drop Database—删除数据库 275
7.3.4 Create Table—创建表 275
7.3.5 Alter Table—修改表 277
7.3.6 Drop Table—删除表 277
7.4 用SQL查询单表数据 277
7.4.1 创建实例数据库 277
7.4.2 查询所有记录 280
7.4.3 查询指定字段的记录 280
7.4.4 查询中过滤相同的记录 281
7.4.5 带表达式的查询 281
7.4.6 显示列名的带表达式的查询 281
7.4.7 指定查询路径的查询 281
7.4.8 指定查询结果的查询 281
7.4.9 更改列标题显示的查询 282
7.4.10 【Where】条件查询 282
7.4.11 组合条件查询 284
7.4.12 用Order By对查询结果排序 284
7.4.13 用Group By对查询结果分组 285
7.4.14 用Having对查询结果筛选 285
7.4.15 用Compute对查询结果汇总 286
7.4.16 用Compute By对查询结果分类汇总 286
7.4.17 用Into存储查询结果 287
7.5 用SQL查询多表数据(连接查询) 287
7.5.1 连接查询的语法结构 287
7.5.2 连接查询的分类 288
7.5.3 笛卡尔积连接 288
7.5.4 等值连接 288
7.5.5 自然连接 289
7.5.6 非等值连接 289
7.5.7 自身连接 289
7.5.8 内连接 289
7.5.9 外连接 290
7.5.10 复合连接 291
7.6 用SQL进行函数查询 292
7.6.1 聚合函数 292
7.6.2 日期和时间函数 293
7.6.3 数学函数 296
7.6.4 字符串函数 298
7.7 用SQL进行嵌套查询 301
7.7.1 什么是嵌套查询 301
7.7.2 什么是子查询 301
7.7.3 简单嵌套查询 302
7.7.4 带in的嵌套查询 302
7.7.5 带not in的嵌套查询 303
7.7.6 带some的嵌套查询 303
7.7.7 带any的嵌套查询 304
7.7.8 带all的嵌套查询 305
7.7.9 带exists的嵌套查询 305
7.8 用SQL操纵数据 306
7.8.1 Insert—数据录入 306
7.8.2 Update—数据修改 306
7.8.3 Delete—数据删除 307
7.9 设计高效的SQL语句 307
7.9.1 SQL语句是怎样被执行的 307
7.9.2 SQL语句是怎样被优化的 308
7.9.3 SET STATISTICS IO—查询SQL语句的读写代价 308
7.9.4 SET STATISTICS TIME—查询SQL语句的执行时间 310
7.9.5 SET SHOWPLAN_TEXT ON—查询SQL语句的执行计划 311
7.9.6 SET NOCOUNT ON—减少SQL语句的网络流量 311
7.9.7 编程查询单条SQL语句的执行时间 312
7.9.8 编程查询成批的SQL语句的执行时间 313
7.9.9 SET SHOWPLAN_ALL—详解SQL语句的执行计划 313
7.9.10 SEEK VS.SCAN—从执行计划判断是否需要优化SQL 315
7.9.11 连接VS.子查询—一样的结果、不一样的效率 316
7.9.12 SQL优化与数据库性能的关系 317
7.9.13 人工优化VS.智能优化—SQL优化技术的发展 318
7.9.14 用SQL Expert设计优化的SQL语句 318
7.10 疑难解析 321
7.10.1 在SQL语句中如何转换数据类型 321
7.10.2 设计SQL语句的经验 321
7.11 本章小结 322
7.12 实践题目 322
第8章 数据完整性—约束、规则和默认 323
8.1 本章导读 323
8.2 SQL Server 2000的数据完整性机制 323
8.2.1 什么是数据完整性 323
8.2.2 SQL Server 2000的数据完整性机制 324
8.2.3 SQL Server 2000的约束(CONSTRAINT) 324
8.2.4 SQL Server 2000的规则(RULE) 325
8.2.5 SQL Server 2000的默认(DEFAULT) 325
8.3 创建约束 326
8.3.1 创建NOT NULL约束 326
8.3.2 创建PRIMARY KEY约束 326
8.3.3 创建FOREIGN KEY约束 327
8.3.4 创建UNIQUE约束 328
8.3.5 创建CHECK约束 328
8.4 创建规则 329
8.4.1 在【企业管理器】中创建规则 329
8.4.2 将规则绑定到列 329
8.5 创建默认 330
8.5.1 在【企业管理器】中创建默认 330
8.5.2 将默认绑定到列 331
8.6 疑难解析 331
8.6.1 创建UNIQUE约束的注意事项 331
8.6.2 创建CHECK约束的注意事项 332
8.7 本章小结 332
8.8 实践题目 332
第9章 数据安全性—角色、用户和权限 334
9.1 本章导读 334
9.2 SQL Server 2000的数据安全性机制 334
9.2.1 SQL Server 2000的数据安全性机制 334
9.2.2 SQL Server 2000的身份验证机制 335
9.2.3 SQL Server 2000的角色机制 336
9.2.4 SQL Server 2000的权限(许可)机制 337
9.3 管理服务器角色 338
9.3.1 管理角色 338
9.3.2 创建数据库角色 339
9.4 管理用户账户(登录) 341
9.4.1 创建登录 341
9.4.2 管理登录的权限 342
9.5 审核用户活动(AUDIT) 342
9.5.1 启动服务器的审核功能 343
9.5.2 利用【事件探查器】进行审核 343
9.6 疑难解析 346
9.6.1 账户和密码保存在哪里 346
9.6.2 如何选择身份验证机制 346
9.6.3 应用程序角色和标准角色有什么区别 346
9.6.4 什么时机使用应用程序角色 347
9.6.5 为什么【企业管理器】中无法添加Windows用户组 347
9.6.6 如何设计SQL Server 2000服务器的安全体系 347
9.6.7 如何使用sa账户 347
9.6.8 什么是dbo用户 347
9.6.9 什么是数据库对象所有者 348
9.7 本章小结 348
第10章 数据并发性—事务和锁 349
10.1 本章导读 349
10.2 SQL Server 2000的事务机制 349
10.2.1 SQL Server 2000的并发问题 349
10.2.2 什么是事务(Transaction) 351
10.2.3 事务的状态 352
10.2.4 SQL Server 2000事务模式 353
10.2.5 SQL Server 2000事务控制语句 354
10.2.6 SQL Server 2000的平面事务 354
10.2.7 SQL Server 2000的嵌套事务 354
10.2.8 SQL Server 2000的分布式事务 356
10.2.9 效率VS.一致性—事务的调度机制 358
10.2.10 一致性VS.并发性—事务的隔离性级别 358
10.2.11 什么是SQL Server 2000批 359
10.2.12 事务中不能使用的Transact-SQL语句 359
10.3 SQL Server 2000的锁机制 359
10.3.1 并发问题解决机制 359
10.3.2 锁—预先预防冲突的悲观并发控制机制 360
10.3.3 SQL Server 2000锁的粒度 361
10.3.4 SQL Server 2000锁的类型(模式) 361
10.3.5 锁持有度 363
10.3.6 锁拥有者 363
10.3.7 查询锁信息 363
10.3.8 锁的兼容性 365
10.3.9 SQL Server 2000的动态锁机制 365
10.3.10 在【企业管理器】中查看锁 366
10.3.11 死锁的检测和预防 366
10.3.12 SQL Server 2000的死锁检测和结束机制 367
10.3.13 用【事件探查器】检测死锁 368
10.4 SQL Server 2000的事务编程 368
10.4.1 设置和关闭隐性事务模式 368
10.4.2 定义本地事务 370
10.4.3 提交事务 371
10.4.4 回滚事务 372
10.4.5 利用保存点保存本地事务 373
10.4.6 设置事务的隔离性级别 373
10.5 疑难解析 374
10.5.1 本地事务什么时机会升级为分布式事务 374
10.5.2 编写前台应用程序时如何使用事务 374
10.5.3 在利用ADO编写前台应用程序时如何使用事务 375
10.5.4 编写前台应用程序时如何使用隐性事务 375
10.5.5 编写前台应用程序事务的原则 376
10.5.6 Log Explorer—明明白白学日志的工具 377
10.5.7 Select语句会不会产生日志 379
10.5.8 Insert语句产生了什么事务日志 379
10.5.9 Update语句产生了什么事务日志 380
10.5.10 Delete语句产生了什么事务 381
10.6 本章小结 381
第11章 数据库备份和恢复 383
11.1 本章导读 383
11.2 基于日志的数据库恢复机制 384
11.2.1 日志对数据库是必须的吗 384
11.2.2 日志的作用 384
11.2.3 SQL Server 2000日志的特点 385
11.2.4 日志记录—日志文件的内容单位 385
11.2.5 UndoVS.Redo—基于日志的数据库恢复机制 385
11.2.6 LSN—维系数据和日志的纽带 386
11.2.7 WAL—先写日志的恢复机制 388
11.3 SQL Server 2000的常见故障和恢复机制 390
11.3.1 Undo—事务故障及其恢复机制 390
11.3.2 Undo+Redo—系统故障及其恢复机制 391
11.3.3 Redo—介质故障及其恢复机制 391
11.4 SQL Server 2000的日志检查点机制 392
11.4.1 检查点—日志的驿站 392
11.4.2 为什么检查点能提高恢复的效率 393
11.4.3 MinLSN—如何选择最小恢复LSN 394
11.4.4 什么情况下产生检查点 394
11.4.5 SQL Server 2000的自动检查点机制 395
11.4.6 CHECKPOINT—手动产生检查点 395
11.5 安全VS.空间—SQL Server 2000数据库的恢复模型 396
11.5.1 完全恢复模型 396
11.5.2 大容量日志记录恢复模型 397
11.5.3 简单恢复模型 397
11.5.4 3种恢复模型的比较 397
11.5.5 设置SQL Server 2000数据库的恢复模型 398
11.5.6 不同恢复模型下的检查点操作 398
11.6 SQL Server 2000的备份机制 400
11.6.1 SQL Server 2000的备份类型 400
11.6.2 不同的恢复模型支持的备份类型 401
11.6.3 SQL Server 2000的备份设备 401
11.6.4 用SP_SPACEUSED估计备份的大小 403
11.7 用【企业管理器】备份与恢复 404
11.7.1 完全数据库备份 404
11.7.2 完全数据库恢复 405
11.7.3 事务日志备份 406
11.7.4 事务日志恢复 407
11.7.5 差异数据库备份 408
11.7.6 差异数据库恢复 409
11.7.7 文件和文件组备份 410
11.7.8 文件和文件组恢复 411
11.8 用Transact-SQL备份与恢复 412
11.8.1 用于数据库备份的Transact-SQL语句 412
11.8.2 用于文件或文件组备份的Transact-SQL语句 414
11.8.3 用于日志备份的Transact-SQL语句 415
11.8.4 截断事务日志Transact-SQL语句 416
11.8.5 恢复完全数据库备份的Transact-SQL语句 416
11.8.6 恢复事务日志备份的Transact-SQL语句 417
11.9 设计和实施一个完整的数据库备份与恢复方案 418
11.9.1 技术VS.代价—如何制定备份与恢复方案 418
11.9.2 选择SQL Server 2000数据库的恢复模型 420
11.9.3 适合绝大部分数据库的两种备份与恢复方案 421
11.9.4 剖析一个完整的数据库备份与恢复方案 421
11.9.5 实施一个完整的数据库备份方案 422
11.9.6 实施灾难数据库恢复方案 425
11.11 疑难解析 426
11.11.1 仅有.BAK文件时如何恢复 426
11.11.2 为什么无法进行事务日志备份和文件备份 427
11.11.3 为什么无法创建差异数据库备份 427
11.11.4 备份或者恢复过程发生中断如何处理 428
11.11.5 什么时机需要备份Master数据库 429
11.11.6 需不需要备份tempdb数据库 429
11.11.7 当前日志和备份日志有什么关系 429
11.11.8 仅有数据文件、没有日志文件时如何恢复 429
11.11.9 DBCC LOGINFO查看VLF 431
11.11 本章小结 432
11.12 实践题目 432
第12章 智能管理—代理服务 434
12.1 本章导读 434
12.2 SQL Server 2000的代理服务机制 434
12.2.1 SQL Server 2000代理服务的结构 434
12.2.2 SQL Server 2000代理服务的运行环境 435
12.2.3 配置SQL Server 2000代理服务的属性 435
12.3 一个基于代理服务实现的智能作业 437
12.3.1 创建警报 437
12.3.2 创建操作员 438
12.3.3 创建作业 439
12.4 本章小结 441
12.5 实践题目 442
第13章 服务器性能监控、调整和优化 443
13.1 本章导读 443
13.2 可能导致性能瓶颈的因素 444
13.2.1 服务器资源 444
13.2.2 网络 444
13.2.3 数据库设计 444
13.2.4 应用系统设计 444
13.3 服务器性能监控和调整工具 445
13.3.1 Windows的【性能监控器】 445
13.3.2 Windows的【任务管理器】 446
13.3.3 SQL Server 2000的【事件探查器】 447
13.3.4 SQL Server 2000的【查询分析器】 449
13.3.5 特殊的系统存储过程 449
13.3.6 特殊的DBCC命令 449
13.3.7 特殊的全局变量 450
13.3.8 SQL Server 2000的【索引调节向导】 453
13.4 监控和调整I/O性能 453
13.4.1 磁盘I/O对服务器性能的影响 453
13.4.2 监控磁盘I/O性能的计数器 453
13.4.3 磁盘I/O是否是性能瓶颈 454
13.4.4 可能导致磁盘I/O性能瓶颈的原因 454
13.4.5 顺序I/O VS.随机I/O—SQL Server 2000的I/O类型 455
13.4.6 调整I/O性能的方法 455
13.5 监控和调整内存性能 456
13.5.1 物理内存VS.虚拟内存 456
13.5.2 内存页面错误—内存性能低下的原因 456
13.5.3 监控内存性能的计数器 457
13.5.4 内存是不是性能瓶颈 457
13.5.5 调整内存性能的方法 458
13.6 监控和调整CPU性能 458
13.6.1 进程VS.线程VS.纤程—分配CPU资源的单位 458
13.6.2 用户模式VS.特权模式 459
13.6.3 监控CPU性能的计数器 459
13.6.4 CPU是不是性能的瓶颈 459
13.6.5 监控消耗CPU资源进程的计数器 460
13.6.6 监控消耗CPU资源线程的计数器 460
13.6.7 监控进程和线程的意义 460
13.6.8 更多CPU VS.更快的CPU 461
13.7 监控和调整网络性能 461
13.7.1 监控网络性能的计数器 461
13.7.2 调整网络性能的方法 461
13.8 调整和优化数据库设计 462
13.8.1 监控数据库性能的计数器 462
13.8.2 优化数据库设计的方法 464
13.9 调整和优化应用系统设计 464
13.9.1 监控应用系统性能的计数器 464
13.9.2 优化应用系统设计的方法 465
13.10 设计和实现一个优化的SQL Server 2000服务器 465
13.10.1 数据和日志文件分开存放在不同磁盘上 465
13.10.2 tempdb数据库单独存放在不同磁盘上 465
13.10.3 避免热点数据的发生 466
13.10.4 数据类型要少 466
13.10.5 监控和整理空间碎片 466
13.10.6 使用主数据文件和次要数据文件 466
13.10.7 利用文件组改善性能 466
13.10.8 重视自动增长和自动收缩可能导致的性能问题 467
13.10.9 分离系统数据和用户数据 467
13.10.10 优化索引设计 467
13.10.11 定期更新统计信息 467
13.10.12 定期的一致性检查 467
13.11 疑难解析 467
13.11.1 整数VS.浮点运算能力—配置SQL Server 2000系统的CPU 467
13.11.2 查询密集VS.事务密集—配置SQL Server 2000系统的内存 468
13.11.2 容量VS.吞吐量—配置SQL Server 2000系统的硬盘 468
13.12 本章小结 468
第14章 SQL SERVER 2000高级管理专题 470
14.1 本章导读 470
14.2 数据转换服务DTS 470
14.2.1 什么是DTS服务 470
14.2.2 使用DTS向导转换数据 471
14.2.3 创建DTS包 474
14.2.4 DTS包调度执行失败原因及解决方法 477
14.3 全文索引 478
14.3.1 基表查询VS.全文查询 478
14.3.2 什么是全文目录 479
14.3.3 什么是全文索引 479
14.3.4 启用全文检索服务 479
14.3.5 定义全文索引 480
14.3.6 利用全文索引检索数据 482
14.4 分布式数据复制 484
14.4.1 备份VS.复制 484
14.4.2 分布式数据复制的优点 484
14.4.3 什么时机需要使用分布式数据复制 485
14.4.4 SQL Server 2000分布式数据复制的机制 485
14.4.5 拉订阅(请求订阅)VS.推订阅(强制订阅) 485
14.4.6 SQL Server 2000的分布式数据复制类型 486
14.4.7 SQL Server 2000的分布式数据复制代理 487
14.4.8 配置发布、订阅和分发服务器 488
14.4.9 使用【复制监视器】 491
14.4.10 创建及管理发布 492
14.4.11 创建订阅 495
14.5 本章小结 499
第15章 专业的SQL SERVER 2000管理工具 500
15.1 本章导读 500
15.2 Quest Central 501
15.2.1 Quest Central简介 501
15.2.2 Quest Central for SQL Server简介 501
15.2.3 注册SQL Server 2000服务器 502
15.2.4 自动发现未注册的SQL Server 2000服务器 503
15.2.5 比较两个SQL Server 2000对象 504
15.2.6 Knowledge Xpert —SQL Server 2000知识宝典 505
15.2.7 SQL Tuning—设计优化的SQL语句 506
15.2.8 Space Management—可视化的空间管理工具 507
15.2.9 Database Analysis—专业数据库性能分析工具 508
15.2.10 Performance Analysis—实时诊断和历史分析工具 508
15.3 Spotlight 509
15.3.1 Spotlight简介 509
15.3.2 用Spotlight监控服务器总体性能 509
15.3.3 用Spotlight监控I/O 510
15.3.4 用Spotlight监控Sessions 511
15.3.5 用Spotlight监控Lock 511
15.3.6 用Spotlight监控有无资源阻塞 512
15.3.7 用Spotlight监控物理文件的I/O 512
15.3.8 用Spotlight监控内存总体性能 513
15.3.9 用Spotlight监控数据库空间使用情况 513
15.4 Data Factory 514
15.4.1 Data Factory简介 514
15.4.2 利用Data Factory产生数据 514
15.5 Benchmark Factory 516
15.5.1 Benchmarka Factory简介 516
15.5.2 数据库压力测试工业标准 517
15.5.3 用Benchmark Factory测试数据库压力 517
15.6 本章小结 520
第二部分 Transact-SQL编程
第16章 TRANSACT-SQL编程 523
16.1 本章导读 523
16.2 Transact-SQL VS. SQL 523
16.2.1 什么是Transact-SQL 523
16.2.2 Transact-SQL VS. SQL 524
16.2.3 Transact-SQL程序的结构 524
16.2.4 Transact-SQL程序的数据类型 525
16.2.5 Transact-SQL程序的批处理 525
16.2.6 应用程序中如何使用Transact-SQL程序 526
16.2.7 Transact-SQL程序的运算符 526
16.3 变量 527
16.3.1 Transact-SQL的变量类型 527
16.3.2 Transact-SQL的全局变量 528
16.3.3 创建和使用局部变量 529
16.4 函数 530
16.4.1 Convert函数 530
16.4.2 创建和使用自定义函数 531
16.5 流程控制语句 533
16.5.1 程序块语句(BEGIN…END) 533
16.5.2 判断语句(IF…ELSE) 534
16.5.3 检测语句(IF…EXISTS) 536
16.5.4 循环语句(WHILE) 536
16.5.5 分支判断语句(CASE…WHEN) 537
16.5.6 无条件退出语句(RETURN) 538
16.5.7 延期执行语句(WAITFOR) 540
16.5.8 跳转语句(GOTO) 541
16.6 功能性语句 542
16.6.1 输出语句(PRINT) 542
16.6.2 错误处理语句(RAISEERROR) 543
16.6.3 选项设置语句(SET) 544
16.7 游标(Cursor) 545
16.7.1 什么是游标 545
16.7.2 游标的生命周期 545
16.7.3 声明游标 546
16.7.4 打开游标 547
16.7.5 读取游标 547
16.7.6 关闭游标 548
16.7.7 释放游标 548
16.7.8 完整的游标实例 548
16.7.9 游标的执行效率很差吗 549
16.8 本章小结 550
第17章 存储过程和触发器 551
17.1 本章导读 551
17.2 存储过程基础 551
17.2.1 为什么要设计存储过程 551
17.2.2 什么是存储过程 552
17.2.3 存储过程的作用 552
17.2.4 存储过程有什么优点 552
17.2.5 SQL Server 2000存储过程的分类 553
17.3 创建、执行和管理存储过程 553
17.3.1 在【企业管理器】中创建存储过程 553
17.3.2 创建存储过程的Transact-SQL语法 556
17.3.3 执行存储过程 557
17.3.4 创建带参数和返回值的存储过程 559
17.3.5 执行带参数和返回值的存储过程 560
17.3.6 删除存储过程 560
17.3.7 执行带参数的存储过程的等效语句 560
17.4 触发器基础 561
17.4.1 什么是触发器 561
17.4.2 SQL Server 2000的触发器类型 561
17.4.3 SQL Server 2000的触发器工作原理 562
17.4.4 SQL Server 2000触发器的优点 563
17.4.5 什么时机使用触发器 563
17.5 创建和管理触发器 563
17.5.1 创建触发器的Transact-SQL语法 563
17.5.2 在【企业管理器】中创建触发器 564
17.5.3 删除触发器 565
17.5.4 触发器和约束的区别 565
17.5.5 触发器中是否可以使用Inserted和Deleted表 565
17.6 本章小结 566
17.7 实践题目 566
第三部分 VB+SQL Server 2000应用开发
第18章 SQL SERVER 2000应用开发基础 571
18.1 本章导读 571
18.2 两种SQL Server 2000数据库项目模式 572
18.2.1 C/S模式的数据库项目 572
18.2.2 B/S模式的数据库项目 572
18.3 SQL Server 2000项目开发流程 573
18.3.1 可行性研究 573
18.3.2 需求分析 574
18.3.3 概要设计 574
18.3.4 详细设计前台应用系统 575
18.3.5 详细设计数据库系统 575
18.3.6 代码设计 576
18.3.7 测试维护 576
18.3.8 撰写规范的项目开发文档 576
18.4 构建VB+SQL Server 2000项目开发环境 577
18.4.1 确保SQL Server 2000服务器正常工作 577
18.4.2 测试开发机和SQL Server 2000服务器的连接 578
18.5 VB+SQL Server 2000项目开发关键技术 580
18.5.1 什么是ActiveX控件 580
18.5.2 ADO—开发数据库项目的积木 581
18.5.3 SQL—ADO操纵SQL Server 2000数据库的语言 581
18.5.4 ODBC接口 581
18.5.5 OLEDB接口 582
18.5.6 完整的ADO程序结构 583
18.5.7 连接池—影响程序效率的黑马 583
18.6 本章小结 585
第19章 VB数据库项目开发关键 586
19.1 本章导读 586
19.2 完整的VB数据库项目开发流程 586
19.2.1 建立数据库工程 587
19.2.2 设计步骤 587
19.2.3 剖析工程的结构 592
19.2.4 设置工程的属性 592
19.2.5 编译工程 593
19.2.6 打包和发布工程 594
19.3 3种VB数据库项目编程技术 596
19.3.1 如何引用ADODB对象 596
19.3.2 使用表名的VB数据库项目编程技术 597
19.3.3 使用SQL语句的VB数据库项目编程技术 600
19.3.4 使用存储过程的VB数据库项目编程技术 600
19.3.5 3种VB数据库项目编程技术比较 603
19.4 3种VB数据库项目接口技术 603
19.4.1 ODBC接口技术 603
19.4.2 OLEDB接口技术 606
19.4.3 OLEDB-ODBC接口技术 606
19.4.4 3种接口技术比较 606
19.5 3种质量的VB数据库项目代码 607
19.5.1 代码级别的VB数据库项目 607
19.5.2 模块级别的VB数据库项目 607
19.5.3 类模块级别的VB数据库项目 608
19.6 ODBC API数据库项目开发 608
19.6.1 间接的ODBC接口技术 608
19.6.2 使用ODBC API的直接接口技术 608
19.6.3 剖析ODBC API的编程机制 609
19.6.4 开发一个完整的ODBC API数据库项目 612
19.6.5 剖析ODBC API数据库项目的结构 616
19.6.6 ODBC API不是效率的神话 617
19.7 VB和SQL Server 2000数据类型的转换 617
19.7.1 SQL Server 2000的数据类型 617
19.7.2 VB的数据类型 618
19.7.3 VB和SQL Server 2000数据类型的转换 619
19.8 VB数据库项目常用函数 619
19.8.1 常用字符和数值转换函数 619
19.8.2 常用的字符串函数 620
19.8.3 常用的日期型函数 622
19.8.4 常用的数据类型转换函数 623
19.9 本章小结 624
第20章 基于ADO的VB数据库应用开发 626
20.1 本章导读 626
20.2 基于ADODC的数据库应用开发 626
20.2.1 使用通用数据链接文件的ADODC 626
20.2.2 使用文件DSN的ADODC 628
20.2.3 使用系统DSN的ADODC 631
20.2.4 使用连接字符串的ADODC 632
20.2.5 ADODC连接SQL Server 2000数据库方法比较 633
20.2.6 ADODC编程 633
20.3 ADO的体系结构 635
20.3.1 客户机内存VS.服务器内存—ADO数据在哪里 635
20.3.2 内存中的ADO数据 635
20.3.3 ADODC的体系结构 637
20.3.4 ADODB的体系结构 637
20.3.5 ADODC和ADODB的体系结构比较 638
20.4 Connection对象编程 638
20.4.1 设计Connection对象工程 639
20.4.2 Connection对象的编程结构 640
20.4.3 Connection对象的编程要素 640
20.5 Recordset对象编程 641
20.5.1 设计Recordset对象工程 641
20.5.2 Recordset对象的编程结构 642
20.5.3 Open—Recordset对象如何提取数据 643
20.5.4 Cursor—让Recordset数据自由移动的指针 645
20.5.5 CursorLocation—Cursor存放在客户机还是服务器 645
20.5.6 CursorType—移动数据有区别 648
20.5.7 LockType—确保数据的安全 650
20.5.8 Recordset对象的编程方法 654
20.5.9 Recordset对象的编程属性 654
20.5.10 一个Recordset对象编程的完整实例 655
20.6 Command对象编程 657
20.6.1 无Command对象如何执行SQL 658
20.6.2 使用Command对象如何执行SQL 658
20.6.3 Command和Recordset对象执行SQL方法的比较 660
20.7 本章小结 661
第21章 控件—显示数据的艺术 662
21.1 本章导读 662
21.2 ADODC控件 662
21.2.1 BOFAction—到达首记录如何处理 663
21.2.2 EOFAction—到达尾记录如何处理 663
21.2.3 CacheSize—客户机内存上有多少记录 663
21.2.4 CommandTimeout—ADO判断错误命令的最长时间 663
21.2.5 CommandType—用什么命令提取数据 664
21.2.6 ConnectionString—数据库在哪里 664
21.2.7 ConnectionTimeout—ADO连接等待的最长时间 664
21.2.8 CursorLocation—Cursor放在客户机还是服务器上 664
21.2.9 CursorType—移动Recordset数据有区别 664
21.2.10 LockType—怎样确保数据的安全 665
21.2.11 MaxRecords—最大的数据记录数目 665
21.2.12 Mode—连接信息的更改权限 665
21.2.13 Password—访问数据库的密码 665
21.2.14 UserName—访问数据库的账户 665
21.2.15 RecordSource—访问数据库的账户 666
21.3 DataList控件 666
21.3.1 编写一个使用DataList控件的程序 666
21.3.2 RowSource—指定DataList控件的数据来源 667
21.3.3 ListField—指定DataList控件显示的数据 667
21.3.4 BoundColumn—指定DataList控件返回的数据 668
21.3.5 ADODC控件和DataList控件是如何连接的 668
21.3.6 DataList控件的主要方法 668
21.4 DataCombo控件 668
21.4.1 编写一个使用DataCombo控件的程序 668
21.4.2 DataCombo控件的主要属性 670
21.4.3 DataCombo控件的主要方法 670
21.4.4 ADODC控件和DataCombo控件是如何连接的 670
21.5 DataGrid控件 670
21.5.1 编写一个使用DataGrid控件的程序 671
21.5.2 DataGrid控件的主要属性 673
21.5.3 DataGrid控件的布局艺术 673
21.5.4 给DataGrid控件添加数据列 674
21.6 本章小结 674
第22章 报表—打印数据的艺术 675
22.1 本章导读 675
22.2 数据环境—报表数据之源 675
22.2.1 设计一个数据环境对象 676
22.2.2 在程序中使用数据环境对象 678
22.2.3 数据环境对象的主要属性 679
22.2.4 数据环境对象的主要方法 680
22.2.5 对数据环境对象编程 680
22.3 报表的设计艺术 683
22.3.1 设计一个空白报表 683
22.3.2 报表设计器 685
22.3.3 向空白报表中添加数据 686
22.3.4 设计列表式报表 687
22.3.5 在报表中打印时间、日期和页码 689
22.3.6 报表数据对齐 689
22.3.7 设计数据的打印格式 689
22.3.8 打印数据的自动换行 690
22.3.9 避免不恰当的数据分页 690
22.3.10 控制报表组成部分是否分页 691
22.3.11 设置打印的报表大小 691
22.3.12 如何控制报表的预览 692
22.3.13 如何控制报表的打印 692
22.3.14 如何控制报表的导出 693
22.3.15 利用RptFunction控件设计统计报表 693
22.4 分组统计报表的设计艺术 695
22.4.1 设计工程结构 695
22.4.2 在数据环境中建立数据分组 696
22.4.3 设计分组统计报表 697
22.4.4 分组统计报表的设计步骤 701
22.5 利用【水晶报表】设计报表 701
22.5.1 利用【水晶报表】设计报表 701
22.5.2 在VB程序中调用设计的报表 704
22.5.3 实践中发现的问题 706
22.6 本章小结 707
猜您喜欢