内容简介 确保Oracle系统的高性能和持续可用性,是数据库管理人员最为关心的问题。本书以经过实践验证的Oracle系统优化的技巧作为主线,内容涵盖了Oracle8i和Oracle9i,全面阐述了确保整个Oracle 系统24×7运行和可用的关键技术。本书内容按6个部分组织。第1部分介绍有关Oracle配置的基础知识;第2部分介绍如何设计快速可支持的应用程序;第3部分深入讨论性能管理和优化技术;第4部分探讨备份、还原和恢复的最佳方式;第5部分阐述高可用性解决方案;第6部分介绍如何维护Oracle系统。本书适合于Oracle开发人员和数据库管理员(DBA)阅读。本书的配套网站提供了本书所涉及的技术更新信息、有用资源的链接以及本书部分示例的完整源代码。
前 言 本书的目标是帮助公司机构部署Oracle 8i和Oracle 9i(包括第二版)系统,同时满足最终用户对性能和可用性的关键需求。要满足这两项需求,就需要以一种整体的方法来设计和建立端到端的Oracle系统,这一整体方法就是本书的核心。通常,与服务器无关的组件都未能得到足够的重视。例如,考虑这样一种场景,其中Oracle最终用户应用程序使用本地配置文件(tnsnames.ora)来定位Oracle数据库,如果在周末数据库重定位到了一个新的服务器,但忽略了修改配置文件,那么最终用户在周一的早上就无法连接到数据库,从最终用户的角度看,数据库似乎关闭了。在最坏的情况下,这样的停机将影响公司机构的基本运转。基于集中式命名服务的适当网络配置是成功获得可用性的关键因素。要满足性能和可用性需求,从初始安装到产品支持,Oracle配置的各个方面都一样重要。 本书技术概述 Oracle提供了真正的灵活性,这既是优点也是缺点。说它是优点是因为您总能够(或几乎总能够)达到目标。说它是缺点是因为在满足一个直接需求的时候,您有太多的可选方案,您需要评估各种可用的方案,这样就会延迟部署时间。例如,如果需要高可用性的Oracle系统,您是选择Oracle复制、实时应用群集(Real Application Clusters, RAC)或者Oracle Data Guard,还是三者结合使用呢? 相比之下,Microsoft的SQL Server提供部署向导进行指定的部署,减少了用户的部署选择,使数据库管理员(DBA)无需花太多时间在不需要复杂特性的配置上,从而加快应用程序的交付。Oracle的确比以前提供了更多的向导来帮助用户选择解决问题的正确方法,特别是在Oracle 9i第二版中,但是仍未提供Microsoft的“向导完成一切”(wizard-for-everything)的方法。能真正给用户带来帮助的是提供关于如何选择正确方案的信息。 本书介绍了在各个重要的方面选择真正行之有效的方法来减少部署时间。在某些情况下,方案选择基于针对可用特性的定性的需求讨论,其他情况下,则需要提供逐步的、手把手的示例或代码段。本书尽量避免冗长的代码,同时尽量使代码示例是自包含的。 Oracle服务器命令行示例基于Sun Solaris,这是目前在UNIX上进行商业化Oracle部署最常用的平台。这些命令行示例仅是作说明之用,不表示对Sun平台的个人喜好。实际上,由于大多数UNIX平台的POSIX一致性,这些示例能和大多数部署Oracle的常用UNIX系统进行交互操作,例如,几乎所有示例都能无需修改就运行于Linux上。Oracle体系结构的开放性意味着存在许多满足性能和可用性需求的第三方工具。例如,VERITAS能为Oracle提供增强的性能和可用性,这些将在第20章中介绍。本书推荐或介绍的第三方工具都基于一组精心选择的独立于供应商的需求,同时也介绍了Oracle自身提供的工具,以进行比较。在某些情况下,Oracle提供了最好的工具,比如Oracle Change Manager(本书的配套Web站点上有介绍该工具的单独的白皮书),但这并不表示没有其他工具能完成同样的任务。 在为部署Oracle的操作系统选择第三方软件时,最重要的是一组完整的需求。一旦有了清晰的需求,用户通常可以找到几种不同价格级别的可用选择。如果需求正确,用户就可以选择一种符合预算的解决方案。 前面已经强调了Oracle 9i与Oracle 8i相比的不同特性或改进。Oracle 9i提供了许多新的、可以提高性能和可用性的特性,包括: 可恢复的空间管理:当缺少空间时,允许操作挂起而不是终止,这样,处理可以在第一次运行时完成,而不是采用传统而费时的先终止再重复执行的方式。 闪回(flashback)查询:允许查看以前某时刻的数据,而无需昂贵的还原(restore)和恢复(recover)操作。 由DBA控制的可配置撤销保持(retention):这意味着ORA01555“snapshot too old”错误将不再出现。 Oracle 9i Data Guard中的备用特性(包括第二版中期待已久的逻辑备用特性):这代表着在面临灾难时提供Oracle数据可用性(无数据丢失)的一次飞跃。 Oracle RAC:这是同时提供性能和可用性的一个重要特性。当在运行于Intel上的Linux系统中部署时,性能价格比就非常有吸引力了。 本书组织结构 本书分为6个部分,按顺序介绍从零开始建立Oracle配置时所涉及到的主题。要从本书中获得最大的收获,最好的方法是从头至尾按顺序阅读本书。关注细节很重要,就个人经验来看,缺乏对所有相关技术领域细节的关注是导致Oracle系统不能满足最终用户的性能和可用性需求的重要原因。 例如,第16章讨论性能管理工具的使用,如果缺少对端到端性能管理(见第8章)、影响性能的关键因素(见第9章)和选择性能管理工具的标准(见第16章)的理解,这些讨论将毫无意义。类似地,掌握基于标准的Oracle网络配置(见第3章)和服务器配置(见第1部分)的知识,能更有效地执行生产任务(见第6部分),并减少服务中断时间。 在最终的分析中,本书涵盖的所有主题均被联系起来。其中一些联系是显而易见的,而另一些联系在意识到时可能已经太晚,因此需要预先了解。例如,不记入日志(NOLOGGING)操作的使用可提高生产系统的性能,如果用户在不了解NOLOGGING操作副作用的情况下运行备用数据库,在发生灾难之后需要激活备用数据库时,备用数据库可能变得不可用。再举个例子,在发生了要求用户重新安装Oracle软件的灾难时,如果用户无法找到CD(或者这些CD已经被毁),用户就遇到问题了。如果可能,用户也许可以从磁带上恢复,但是假如用户遵循第1章中的建议,在冗余站点的磁盘上保存整个Oracle软件库,那么这些软件在任何时候都可用。因此,说哪些章节中的内容比其他章节的更重要是不合适的,但这样更为方便。 下面是本书所有章节及各章所涉及的主题的列表。第1部分介绍Oracle配置的基础知识: 第1章:安装Oracle。所讨论的主题包括UNIX配置,通过网络文件系统(NFS)安装Oracle,用Oracle Installer进行自动安装,以及用Microsoft System Management Server安装客户端。 第2章:创建数据库。所讨论的主题包括基于Oracle管理文件(OMF)的具有可管理性的新型布局方案,Oracle 9i自动撤销管理和服务器参数文件,提高性能的廉价磁盘冗余阵列(RAID)布局,原始分区和文件系统,以及存储区网络(SAN)和网络附加存储(NAS)的好处。 第3章:配置Oracle网络。所讨论的主题包括联网基础知识,动态注册,网络故障转换和负载平衡,运行Oracle Names的完整说明,运行轻量型目录访问协议(LDAP)要考虑的事项,以及共享服务器和透明网关配置。 第4章:环境标准和工具。所讨论的主题包括如何设置标准登录环境,如何用可下载的Perl脚本来停止和启动Oracle服务,以及适合于DBA的Apache Web服务器基础知识介绍。 第5章:保护数据库。所讨论的主题包括几种登录身份验证,密码管理策略,通过Oracle 9i企业用户和Oracle Internet Directory降低用户管理开销,应用程序安全性,以及如何用可下载的脚本执行安全审核。 第2部分介绍如何设计快速可支持的应用程序。 第6章:设计可支持的应用程序。所讨论的主题包括提供跟踪工具,错误报告和日志记录,运行时应用程序配置,以及利用Oracle 9i的可恢复操作来避免服务中断。 第7章:选择第三方软件。所讨论的主题包括购买第三方软件时所有需要考虑的问题,以保证所购买的第三方软件能满足用户当前和将来的需要。 第3部分介绍性能管理和优化技术。 第8章:端到端性能管理。所讨论的主题包括端到端性能管理的挑战(包括一个三层应用的详细例子),识别和解决性能问题的开销,事务处理时间的测量和收集,以及投资回报的估计。 第9章:SQL优化基础。所讨论的主题包括优化及其在应用程序生命周期中的位置,Oracle统计量和事件,如何查看Oracle缓冲区高速缓存及控制其内容,如何检测全表扫描及执行全表扫描的SQL,通过SQL执行计划来查看和单步调试,并行操作,识别需要优化的SQL,利用提示(hint)和存储概要(stored outline)来提高SQL执行速度(改写或不改写代码),优化SQL网络性能,以及根据Oracle 9i第二版提供的信息来定义服务器内存需求。 第10章:收集和使用优化器统计量。所讨论的主题包括基本的表和索引统计,列统计和数据偏差,ANALYZE命令,用DBMS_STATS进行统计收集,Oracle 9i中的系统统计,以及统计表。 第11章:分区。所讨论的主题包括分区性能和可用性特性概述,使用范围、列表、散列和复合方法来创建分区的示例,分区索引技术,以及全局索引的可用性考虑。 第12章:管理索引。所讨论的主题包括估计索引管理的开销,理解索引类型,识别需要索引的列,包括Oracle 9i的跳跃式扫描(skip scan),识别Oracle 8i和Oracle 9i中的未用的索引,决定何时重建索引,以及建立基于函数的索引。 第13章:管理空间增长。所讨论的主题包括收集空间增长信息,用Microsoft Excel图表来显示空间增长信息,识别浪费的空间,最小化空间浪费,测定行迁移和行链的影响,纠正空间浪费。 第14章:压力测试和基准测试。所讨论的主题包括如何运行基本的压力测试,TPC-C基准测试概述,以及使用基准测试来比较运行于两个操作系统上的Oracle。 第15章:服务器整合和资源管理。所讨论的主题包括服务器整合概述,使用Oracle的配置文件(profile)对单个Oracle会话的资源进行控制,使用Oracle Resource Manager对Oracle实例的资源进行控制,使用Solaris Resource Manager(SRM)在Sun服务器上进行资源控制,以及使用IBM zSeries主机进行服务器协作。 第16章:选择和使用性能管理工具。所讨论的主题包括性能管理所涉及的角色及其责任的定义,设定性能目标和工具需求,Oracle Expert和Precise/Indepth的使用及二者的比较。 第4部分介绍备份、还原和恢复的最佳方式。 第17章:Oracle恢复基础。所讨论的主题包括系统改变号(SCN),从实例崩溃中恢复,从介质故障中恢复,用LogMiner使用和查看Oracle重做日志,以及使用Oracle 9i中的闪回查询进行无需还原的恢复。 第18章:使用RMAN执行备份和恢复。所讨论的主题包括备份和恢复需求,RMAN如何解决自编脚本的风险问题,使用RMAN进行简单备份的示例,使用备份目录进行备份,使用RMAN DUPLICATE命令复制数据库,管理磁盘上的归档重做日志,使用RMAN和Legato NetWorker,最大化备份吞吐量,执行RMAN还原,以及备份和还原疑难解答。 第19章:基于导出导入的备份和还原。所讨论的主题包括使用导出前检查来降低导入出错几率,使用导出参数文件,国家语言支持(NLS)考虑,使用Oracle 9i的闪回查询导出到某一时刻,使用直接路径最优化导出性能,利用UNIX文件压缩来控制导出文件大小,使用可移动表空间来加速还原,以及最优化导入性能,包括一个导入基准测试。 第5部分介绍高可用性解决方案。 第20章:Oracle高可用性的VERITAS解决方案。所讨论的主题包括Oracle Disk Manager,VERITAS的Oracle HA产品及其特性的概述,包括VERITAS File System(VxFS)和Volume Manager,Storage Rollback,VERITAS Cluster Server(VCS),FlashSnap,和VERITAS Volume Replication Facility(VVRF)。 第21章:Oracle复制。所讨论的主题包括用于灾难恢复的多主复制和备用数据库比较,同步和异步复制,冲突解决和通知,复制环境中与序列相关的问题,多主配置的前提条件,以及使用Oracle Enterprise Manager(OEM)来建立和执行多主配置。 第22章:Oracle实时应用群集。所讨论的主题包括RAC所解决的Oracle 并行服务器(OPS)中的功能缺陷问题,RAC配置组件,高速缓存融合(cache fusion)改进,安装改进和可管理性增强,互连配置,RAC和单个实例配置的参数区别,两个节点的群集的完整初始化参数集,具有负载平衡和故障转移功能的客户端网络配置,如何选择Oracle操作系统,以及在Linux上运行RAC。 第23章:使用备用数据库保护数据。所讨论的主题包括在Oracle 8i中创建和运行物理备用数据库,使用Oracle 9i Data Guard创建和运行物理备用数据库,使用Oracle 9i Data Guard创建和运行逻辑备用数据库,以及使用Oracle 9i的Data Guard Manager和broker(代理)改进备用 管理。 第6部分介绍如何维护Oracle系统。 第24章:健康检查与监控指南。所讨论的主题包括物理布局的健康检查,表空间和回滚段定义的健康检查,定义监控需求,利用数据库作业来实现监控,用UNIX的sendmail从数据库内部发送警报信息,用OEM和Oracle智能代理(OIA)实现监控,用工具控制语言(Tcl)创建定制的监控脚本,以及执行Fixit Job(修复任务)。 第25章:审核技术。所讨论的主题包括数据库审核跟踪,重新部署审核跟踪和更改所有权,理解审核会话标识符,选择审核方案,识别可疑的活动,使用审核跟踪来跟踪输入/输出(I/O)趋势,使用触发器来审核数据内容的变更,以及用Oracle 9i中的DBMS_FGA包通过细粒度的访问控制来审核SELECT语句。 第26章:迁移和升级。所讨论的主题包括迁移前提条件核对清单,用Oracle数据迁移助理(ODMA)执行迁移和迁移后的任务。 第27章:有效利用Oracle支持。所讨论的主题包括通过Web报告问题的优缺点,客户在支持过程中的角色的Oracle支持服务(OSS)观点,升级过程,用Oracle的STATSPACK和Remote Diagnostic Agent(远程诊断助理)实现支持标准化,具有可支持性的可选Oracle产品集。 第28章:Oracle DBMS疑难解答。所讨论的主题包括理解UNIX系统日志,识别Oracle共享内存,UNIX内核跟踪,Oracle和操作系统的网络跟踪,Oracle的事件跟踪,以及操作系统的性能诊断。 本书读者对象 本书强调的一个主题就是,DBA和开发人员均对系统是否满足性能和可用性目标具有重大影响。在一个开发人员和DBA僵硬划分各自角色和责任的机构中,交付的产品应用程序通常无法满足最终用户需求。 作者曾经做过专业Oracle DBA和Oracle公司的产品开发人员,因此对这两者都很了解。最好的方式就是组织机构雇佣具有复合技能的Oracle专业人员,其中一部分偏重开发,而另一部分偏重DBA产品支持。本书的第二个目标是,试图通过使开发人员和DBA了解对方所完成的任务来打破二者之间的传统界限。根据作者的经验,DBA和开发人员之间的不良关系通常是由于缺乏对对方所做工作的了解而引起的。 因此,本书是针对不同级别的DBA和开发人员的。在很多方面,Oracle方面的“高级”一词是一种误用。Oracle所提供的范围非常广泛,需要了解的内容很多,但大部分并不复杂。任何理解Oracle基础的人都能理解并受益于本书,Oracle自己提供的“概念指南”是最好的基础参考。挑战来自于如何部署基于许多不同可用技术的系统。本书重点关注的是如何快速部署具有内置性能和可用性的系统。 所需工具 本书包含了许多SQL示例代码,您需要合适的工具来执行这些代码。DbCool是一个可配合本书使用的工具,它用于运行书中所有SQL代码并生成所有SQL输出。DbCool的一个优点是所有SQL输出列宽可根据输出数据自动调节。另一优点是输出结果可在客户端上分组和排序,而无需重新执行原始SQL。使用DbCool不需要您的任何付出,因为它是免费的,运行于Windows平台上。SQL*Plus和iSQL*Plus在许多地场合下也可使用,但在需求与行模式输出不兼容时无效,例如单步调试SQL执行方案。书中所有SQL示例都包含语句结束符,用于在SQL*Plus中提交SQL或PL/SQL。 某些示例是基于C代码的,您需要一个C编译器来从源代码中建立共享库。所有代码可通过免费的Gnu C编译器(gcc)编译。 本书在讲述某些高级Oracle特性时,需要您能访问运行Oracle企业版的Oracle数据库。书中需要用到企业版时会在文中注明。 本书配套网站 本书的配套网站包含了本书所涉及的技术的更新信息、有用资源的链接以及书中所引用示例的几个完整的源代码,包括: dbcool_perl.tar:包含第4章中实现基于Perl的Oracle管理脚本所需的所有脚本。 Dbcool_mon.sql:一个收集Oracle事件和统计量的PL/SQL包。 Dbcool_tkprof.sql和dbcool_tkprof.c:一个允许从客户端应用程序执行TKPROF的PL/SQL包和外部过程。 Dbcool_audit.pl:一个提供基本数据库安全审核的Perl脚本。 Dbcool_rman_gen.pl和dbcool_legato_gen.pl:为Oracle RMAN备份和Legato Networker for Oracle备份生成不同备份类型集的Perl脚本。 Dbcool_space.sql和dbcool_space.xls:一个收集数据库空间统计量的PL/SQL包和一个产生JPEG图像的Excel电子数据表,用来描绘基于所收集的统计量的空间增长图表。 Dbcool_utl.sql和dbcool_utl.c:在SQL中执行UNIX风格的模式匹配的PL/SQL包和外部C代码,显示数据库服务器文件系统空间信息。详细描述参见本书配套网站的相关文章。 Dbcool_gen_standby.pl:帮助生成物理和逻辑备用数据库的Perl脚本。 Dbcool_arch_to_standby.pl:从主服务器向备用服务器复制归档重做日志的Perl脚本。 Dbcool_ora_healthcheck.pl:检查数据库与布局标准的一致性及其他问题的Perl脚本。 Dbcool_2pc_pending.pl:通知致命严重问题的OEM的Perl脚