首页>参考读物>计算机科学与技术>数据库

Oracle高效设计
作者 : Thomas Kyte
译者 : 钟鸣 郝玉洁 等
丛书名 : Oracle技术丛书
出版日期 : 2005-12-30
ISBN : 7-111-17811-4
定价 : 68.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 496
开本 : 16开
原书名 : Effective Oracle by Design:Design and Build High-Performance Oracle Applications
原出版社: McGraw-Hill
属性分类: 店面
包含CD :
绝版 : 未绝版
图书简介

本书通过翔实的代码实例,讲解如何用主动且高效的方法开发和调试完全依赖数据库的优化Oracle应用程序。理论知识、系统设计和实际问题紧密结合。语言流畅且浅显易懂,对问题的解释全面深入,是一本关于Oracle技术的高级手册。适合各种层次的数据库设计人员和DBA参考。

本书特色
  ■使用SQL*Plus、TKPROF、STATSPACK、JDeveloper以及其他工具
  ■利用Oracle的可伸缩的体系结构实现
  ■使用SPFILE、Oracle管理文件,以及自动段空间管理实现高效管理
  ■使用ARCHIVELOG模式、RMAN和数据保护完成数据库备份与恢复
  ■通过绑定变量和尽可能少做分析来改进语句处理
  ■充分利用基于成本的优化程序 (CBO)
  ■产生高效设计模式的数据结构选择
  ■编写高效的SQL语句和高效的PL/SQL代码
  ■跟随Oracle权威人士学习开发高效应用程序的正确方法

图书特色

图书前言

本书读者群为Oracle的开发团队,即对整个系统性能有100%控制权的团体。这个团队包括数据建模人员、程序开发人员和DBA。一个流行的神话是DBA负责应用系统性能的方方面面,并且能完全控制系统的性能。可以用赛车来说明这种老观念的谬误。DBA好比赛车场修理处人员,他负责换轮胎,保证给车加满油并让它正常工作。如果你给这位赛车场修理处人员(DBA)一辆Lincoln Navigator(一种极为巨大的卡车),并告诉他你打算用这车去参加方程式大赛,结果会怎样呢?DBA可以保证这辆卡车跑得尽可能快,但他不能让这辆卡车在急转弯时还能保持每小时100多公里的速度。除非把车扔了重新设计制造,否则一旦车辆设计制造出来,DBA能做的事就很少了(这里的车就是应用程序)。
  本书主要面向对如何用Oracle设计和建造具有可伸缩性的系统还没有把握的读者群。本书不是一本初学者指南。它是针对那些已经知道如何输入SQL语句、如何使用SQL*Plus的Oracle开发人员的。我们讲授如何编写“好的”SQL,但不讲授SQL基础知识。讲授如何编写“好的”Oracle应用程序,而不讲授如何编写应用程序。
  再举一个例子来说明本书将会提供什么信息。假如开发人员是医生,应用程序是病人。有多种医生:
  急诊室(ER)医生 这些医生对患者进行“筛选”,区分绝症病人与可以救治的病人,在路上进行急救保持病人尽可能长时间存活。他们将会收到吸烟、具有不良饮食习惯又不锻炼的心脏病人,并且要稳定这些病人的病情。
  手术室(OR)医生 病人在经过筛选且ER医生做过临时性处理后,由OR医生接收。OR医生经过艰苦的手术不仅要挽救病人的生命,而且还要尽可能使他恢复正常。他们给心脏病人做搭桥手术,尽量清理病人的动脉。
  物理治疗专家(PT) 在OR医生完成手术后,病人就开始了漫长且痛苦的康复过程(不必说花费昂贵),这时就是PT的事了。
  预防医生 这些医生尽量使病人不打扰上述三种医生。他们劝病人停止抽烟、吃有益于健康的食品、加强锻炼,并且编制一个有很多步骤的程序帮助他们保持良好状态。如果他们工作得当,除非意外事故(比如车祸),否则病人将永远不会再打扰ER、OR或者PT医生。
  目前还需要各种医生,因为确实会发生事故。但是,最重要的医生或许是最后面的这种预防医生,他们尽力让病人不需要其他三种医生。
  本人相信(实际如此),大多数人和书最关注前三种医生。他们极相信“英雄”开发人员——ER或OR医生。或许正因为这一点,良好的设计和实现一般是吃力不讨好的事情。ER和OR把病人从死亡的边缘拉了回来,获得了所有的声誉(做一些奇迹般的事情,挽救系统也是这样)。他们在最后一刻被召集起来,努力挽救病人的生命,并且得到丰厚的报酬;另一方面,物理治疗专家就不那么幸运了,他们接手ER/OR医生处理过的系统,负责维持其运转。
  我完全可以站在ER的立场说话,因为事实上我就是那些被召集起来并使系统好起来的“英雄”中的一员。我可以撰写这样一本书,确实,也有人曾经告诉我,应该写这样一本书,但我没有写。
  因为我们所缺少的是包括预防医生培训在内的综合方法。这方面的书籍有一些,我喜欢的有Guy Harrison的《Oracle SQL High Performance Tuning,2nd Edition》(Prentice Hall, 2001)和Jonathan Lewis的《Practical Oracle 8i Building Efficient Databases》(Addison Wesley, 2001)。这些书籍,包括我自己的《Expert One on One Oracle》(Wrox Press, 2001),致力于消除对英雄的需求。请注意,消防人员在救火时是英雄,但我们都希望永远不要和他们打交道。
  本书作为一个指南,提供了进行性能调整的所有结构和方法,讨论的内容包括:
  ●开始设计前的调整。
  ●针对特定性能目标进行设计,并不断测试。
  ●反复试验(保证每个功能项按要求工作,并了解软件的性能,许多性能问题与不了解数据库如何工作有直接的关系)。
  ●实际的事故。研究ER/OR医生的角色,但这不是本书的最终目标之一。因为你所学到的作为一个预防医生的知识应该有助于限制那些更光彩的医生角色。
  大多数书籍的重点完全放在如何当英雄上,本书则不然,本书的重点在于如何成为一个可靠的系统生产者。它着重建造一个完好的系统而不是修补破碎的系统。我们相信,时间会证明建造完好系统的人才是真正的英雄。

作者简介

Thomas Kyte:Thomas Kyte:  Oracle专业领域世界上最权威的专家之一。他是Oracle核心技术小组 (管理、教育和健康)副主席,兼《Oracle Magazine》及其在线论坛“Ask Tom”专栏作家,撰写过多部设计和构建高性能、可伸缩Oracle应用程序的指南。他回答过数以千计的技术问题,也正是这些问题激发了他写作这本书的灵感。

译者简介

钟鸣 郝玉洁 等:暂无简介

译者序

本书是一本关于Oracle的高级手册,书中对Oracle的许多重要概念和特性进行了独到的讨论。它面向的是那些已经知道如何输入SQL语句、如何使用SQL*Plus的Oracle使用人员和开发人员。书中讲授了如何编写“好的”SQL,以及如何编写“好的”Oracle应用程序。
  本书共10章及1个附录,各章及附录的内容如下。
  第1章 构建应用程序的正确方法:讨论关于Oracle设计的最好方法的某些“软”问题。这些问题与系统设计、开发、测试、部署和维护有关,但它们并不是Oracle所特有的,只不过是从Oracle的角度提出而已。这一章是本书所有章节中涉及技术细节最少的一章,但可能是最重要的一章。
  这一章中还对Oracle的各种文档进行了排序和简介,给希望进一步钻研Oracle的各类人员(如编程人员、DBA等)提供了需要阅读的书籍清单。
  第2章 性能工具包:作者介绍了自己使用的工具并对为何使用这些工具做了一个概述。另外,还阐述了如何使用这些工具。
  第3章 体系结构选择:介绍宏观层次上的体系结构选择,它可以帮助用户获得Oracle能够达到的可伸缩性和性能。该章不深入探讨Oracle服务器进程体系结构及内存结构,不介绍如何建立分区或并行处理,而是将主要精力集中在怎样或何时使用Oracle的这些特性上。
  该章还讨论了Oracle体系结构对应用系统的作用,回答了“如何连接到数据库”、“分区能否使数据库运行得更快”等问题。
  第4章 高效的管理:介绍作者认为对数据库管理非常有用的一些特性。如SPFILE、OMF、备份与恢复、字典管理的表空间(DMT)和本地管理的表空间(LMT)、ASSM、让Oracle自动管理回退段等。
  第5章 语句处理:完整地介绍了Oracle怎样处理语句,详细讨论了主要语句类型(DDL、DML)的分析、优化和执行,包括查询语句的分析、优化和执行。讨论了绑定变量及其使用。最后,强调要尽可能地避免对语句进行分析。
  第6章 从基于成本的优化程序获得最大输出:讨论了Oracle中两个不同的优化程序,说明为什么CBO目前值得重点考虑,特别是在Oracle9i Release 2之后的版本不再支持RBO的情况下更是如此。
  该章讨论了两个对CBO影响最大的重要参数,它们分别是:OPTIMIZERINDEX COST ADJ和OPTIMIZERINDEXCACHING。该章中还介绍了影响CBO的许多其他参数,并举了许多例子。最后,介绍了10*!053跟踪事件,这是一个能帮助我们理解优化程序所做事情的工具。
  第7章 高效的模式设计:应用系统将依赖其物理实现而生存或死亡。选择错误的数据结构会使性能达不到要求,灵活性受到限制。选择正确的数据结构,将会获得良好的性能。该章将考察设计模式时需要考虑的一些东西。然后集中精力讨论表类型、某些有用的索引类型以及压缩等内容。
  第8章 高效的SQL:讨论提高查询效率的各种SQL技术,并指出,要想开发高效的SQL,必须对一些较深层次的SQL技术有所了解,如访问路径、连接、模式等。另外,为了开发高效的SQL,深刻理解要解决的问题是至关重要的。
  第9章 高效的PL/SQL程序设计:讨论为什么应该考虑在应用程序中使用PL/SQL。然后介绍一些能提供高效、高性能PL/SQL代码的重要编程技术。
  第10章 故障排除:介绍一些故障排除的经验和原则。
  附录 设置和一些脚本:给出本书许多例子中都用到的BIGTABLE的建立脚本,以及作者经常使用的一些脚本(实用程序)。
  参加本书翻译的主要成员有:钟鸣、郝玉洁。全书由刘晓霞同志审校。同时担任部分翻译及校对工作的还有常征、石永平、王君、张文、魏允韬、田晓涛、耿娜、何江华、梅刚、孙登峰、樊伟、李安娜、李晓军、苏秀玲、赵彦萍、马永良、张启斌等。
  由于译者水平有限,书中难免有错误或不当之处,敬请读者批评指正。

译 者
2005年11月24日

图书目录

第1章 构建应用程序的正确方法
 11 团队协作
 12 阅读资料文档
  121 指南的指南
  122 阅读路线
 13 避免黑盒综合症
  131 数据库独立与数据库依赖
  132 黑盒综合症的危害
 14 是数据库而不是一堆数据
  141 使用主键和外部键
  142 测试参考完整性的开销
  143 中间层检查不是万能药
 15 建立测试环境
  151 用有代表性的数据进行测试
  152 不要用单个用户进行测试
  153 不要在无菌实验室中进行测试
 16 设计出性能而不是调整出性能
  161 不要使用通用数据模型
  162 设计自己的高效数据模型
 17 开始就定义性能目标
  171 在清晰明确的标准下工作
  172 随时收集并记录标准
  173 别因为 “所有人都知道你应该做”而做某件事情
 18 测试, 测试, 再测试
  181 小基准测试
  182 大基准测试
 19 仪表化系统
  191 追踪asktomoraclecom
  192 远程调试仪表化
  193 使用DBMSAPPLICATIONINFO
  194 在PL/SQL中使用DEBUGF
  195 在应用系统中打开SQLTRACE
  196 使用业内标准的API
  197 建立自己的例程
  198 审计不仅仅是个词
 110 敢于怀疑权威
  1101 当心泛泛的 “最好”
  1102 怀疑 “法定” 和 “神话”
 111 不要走捷径
 112 保持简单
  1121 考虑备选方法
  1122 让数据库充分发挥自己的能力
 113 使用已有的功能
  1131 我们听说X特性慢
  1132 我们听说X特性复杂
  1133 我们不想
  1134 我们以前不知道
  1135 我们希望数据库独立
 114 本章小结

第2章 性能工具包
 21 SQL*Plus
  211 建立SQL*Plus
  212 定制SQL*Plus环境
  213 阅读文档
 22 EXPLAIN PLAN
  221 设置EXPLAIN PLAN
  222 使用EXPLAIN PLAN
  223 如何阅读查询计划
  224 避免EXPLAIN PLAN陷阱
  225 使用DBMSXPLAN和V$SQLPLAN
 23 AUTOTRACE
  231 建立AUTOTRACE
  232 使用AUTOTRACE
  233 格式化AUTOTRACE的输出
  234 了解AUTOTRACE的输出
  235 AUTOTRACE输出中感兴趣的内容
 24 TKPROF
  241 启用TKPROF
  242 运行TKPROF
  243 读TKPROF报告
  244 各种群体对TKPROF的使用
 25 Runstats
  251 建立Runstats
  252 使用Runstats
 26 Statspack
  261 建立Statspack
  262 使用Statspack
  263 使用Statspack易犯的错误
  264 Statspack概览
 27 DBMSPROFILER
  271 为什么要使用配置文件管理器
  272 配置文件管理器的资源
 28 JDeveloper (及调试)
 29 本章小结

第3章 体系结构选择
 31 了解共享服务器与专用服务器连接
  311 专用服务器如何工作
  312 共享服务器连接如何工作
  313 关于共享服务器配置的常见错误观点
  314 专用服务器与共享服务器小结
 32 利用集群
  321 RAC如何工作
  322 RAC的优点
  323 集群小结
 33 了解何时使用分区
  331 分区概念
  332 神秘的分区
  333 为什么使用分区
  334 分区小结
 34 知道何时使用并行操作
  341 并行神话
  342 并行管理
  343 并行查询
  344 并行DML
  345 打造自己的并行
  346 并行处理小结
 35 本章小结

第4章 高效的管理
 41 用SPFILE启动数据库
  411 PFILE的问题
  412 SPFILE如何工作
  413 让数据库使用SPFILE
  414 保存系统参数的改动
  415 PFILE过时了吗
  416 求助, 我的SPFILE坏了, 我不能启动了
  417 SPFILE小结
 42 让Oracle来管理你的数据文件
  421 何时使用OMF
  422 OMF如何工作
  423 OMF小结
 43 可靠的恢复
  431 备份准则
  432 备份和恢复小结
 44 使用本地管理的表空间
  441 为什么要废除DMT
  442 在不知道对象会变得有多大时使用系统管理的LMT
  443 在知道对象的最终尺寸时使用统一的区尺寸
  444 关于LMT的某些忠告
  445 LMT和DMT小结
 45 让Oracle管理你的段空间
  451 理解可用列表和可用列表组
  452 PCTFREE和PCTUSED怎样控制可用列表
  453 ASSM的案例
  454 ASSM小结
 46 让Oracle管理回退段
  461 设置UNDORETENTION
  462 UNDO表空间忠告
  463 UNDO表空间小结
 47 本章小章

第5章 语句处理
 51 理解SQL语句的类型
 52 语句怎样执行
  521 分析
  522 优化和行资源生成
  523 执行
  524 语句执行小结
 53 查询的处理过程
  531 快速返回的查询
  532 慢速返回的查询
  533 一致性读取
 54 DML语句的处理
 55 DDL处理
 56 使用绑定变量
  561 绑定变量的优点
  562 对Java和VB使用绑定变量
  563 每项规则都有例外
  564 绑定变量窥视
 57 尽可能少做分析
  571 分析的成本
  572 使用PL/SQL减少分析
  573 把SQL移出触发器以减少分析
  574 准备一次; 执行多次
 58 本章小结

第6章 从基于成本的优化程序获得最大输出
 61 为什么停用RBO
 62 使CBO发挥最大的作用
  621 调整OPTIMIZERINDEXCACHING和OPTIMIZER INDEXCOSTADJ参数
  622 使用SYSTEM统计数据
 63 优化CBO
  631 为升级设置COMPATIBLE
  632 设置DBFILEMULTIBLOCK READCOUNT以减少全扫描的成本
  633 设置HASHJOINENABLED控制散列连接
  634 设置OPTIMIZERDYNAMICSAMPLING动态收集统计数据
  635 设置OPTIMIZERFEATURESENABLE制特性选择
  636 设置OPTIMIZERMAX PERMUTATIONS控制排列
  637 设置OPTIMIZERMODE选择模式
  638 用QUERYREWRITEENABLED和QUERYREWRITEINTEGRITYT重写查询
  639 用BITMAPMERGEAREA SIZE、SORTAREASIZE、HAS HAREASIZE控制PGA内存
  6310 对星查询使用STAR TRANSFORMATIONENABLED
  6311 设置影响优化程序的其他几个参数
 64 使用10053事件跟踪CBO选择
 65 本章小结

第7章 高效的模式设计
 71 基本模式设计原则
  711 让数据库实现数据完整性
  712 使用正确的数据类型
  713 对最经常提的问题进行优化
 72 表类型概述
 73 B*树索引集群表
  731 创建群
  732 使用群
  733 群小结
 74 索引组织表
  741 用IOT替代关联表以节省空间
  742 利用IOT集中放置随机插入的数据
  743 IOT小结
 75 外部表
  751 建立外部表
  752 修改外部表
  753 将外部表用于直接路径装载
  754 将外部表用于并行直接路径装载
  755 将外部表用于合并
  756 处理外部表的错误
 76 索引技术
  761 使用FBI——打破常规
  762 使用域索引
 77 压缩
  771 使用索引键压缩
  772 对于只读或主要是读的表进行表压缩
  773 压缩小结
 78 本章小结

第8章 高效的SQL
 81 编写高效SQL所需的知识
 82 访问路径
  821 全扫描
  822 ROWID访问
  823 索引扫描
  824 群扫描
 83 连接概念
  831 嵌套循环
  832 散列连接
  833 排序合并连接
  834 笛卡儿连接
  835 反连接
  836 全外部连接
 84 模式问题(物理的)
 85 真正理解SQL
  851 ROWNUM伪列
  852 标量子查询
  853 分析函数
 86 不调整查询
  861 理解问题
  862 概念验证的例子
 87 其他SQL技术概览
 88 本章小结

第9章 高效的PL/SQL程序设计
 91 为什么要使用PL/QL
  911 PL/SQL是数据操纵的最高效语言
  912 PL/SQL具有可移植性和可重用性
 92 尽可能少地编写代码
  921 不用程序实现
  922 让代码行数适合于屏幕显示
 93 使用程序包
  931 程序包的优点
  932 断开依赖链
  933 程序包小结
 94 使用静态SQL
  941 静态SQL的优点
  942 寻找替换动态SQL的机会
  943 静态SQL小结
 95 批量处理
  951 使用批量处理效果很好时再使用它
  952 对ETL操作使用BULK处理
  953 批量处理小结
 96 返回数据
  961 ref游标的优点
  962 使用ref游标返回结果集
 97 使用%TYPE和%ROWTYPE
  971 基于表的记录类型
  972 基于游标的记录类型
  973 基于列的数据类型
 98 使用调用者的权限
  981 调用者权限和多模式
  982 调用者权限的条件
 99 使查找高效地工作
  991 查找的单行取
  992 查找的批量处理
  993 查找的单语句操作
  994 查找小结
 910 当心独立事务处理
  9101 独立事务处理的条件
  9102 独立事务处理会影响数据完整性
 911 选择使用隐式游标还是显式游标
  9111 将隐式游标用于单行选择
  9112 对有限行数的结果集使用隐式游标
  9113 隐式/显式游标小结
 912 本章小结

第10章 故障排除
 101 找出差异
  1011 开始收集今天的历史记录
  1012 侦探性工作
 102 一次只更改一样东西
 103 更改一样东西要有充分理由
  1031 有目标
  1032 验证你的假设
 104 能够恢复到更改前的状态
 105 建立测试用例
  1051 测试用例需求
  1052 使测试用例尽可能小
 106 本章小结
附录 设置和一些脚本

教学资源推荐
作者: (英)David Hand,Heikki Mannila,Padhraic Smyth
作者: [葡]路易斯· 托尔戈(Luís Torgo)著
作者: Jeffrey D.Ullman Jennifer Widom
作者: (美)Jiawei Han伊利诺伊大学厄巴纳-尚佩恩分校 (加)Micheline Kamber西蒙-弗雷泽大学 (加)Jian Pei西蒙-弗雷泽大学 著