Oracle DBA手记
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

代序 分享知识 收获快乐

2009年8月,我们终于完成了这本书的组稿、编辑工作,可以将它呈现给大家,在这里我想和大家分享一下为什么会有这本书,以及这本书的来龙去脉。

一、选题及出发

在2008年底,我修订了《深入浅出Oracle》一书,并更名为《深入解析Oracle》,那本书的副标题是“DBA入门、进阶与诊断案例”。多年来,很多读者提出建议:可否尽量扩展诊断案例的部分,甚至独立出版一本案例集。而要写作这样一本书,仅仅靠我个人的知识和力量,显然十分有限,所以我想到了联合更多的作者,共同来完成这样一本书。

我首先游说老杨(杨廷琨),他几年来在自己的博客上积累了1500多篇高质量的原创技术文章,而经由他自己整理提炼成文,显然会精彩纷呈。感谢老杨,他愉快地答应了我的合著要求,并全力开始了自己的写作。

在网络上,我经常能够看到大量精彩的诊断案例与故障处理过程,又常常遗憾这些文字被互联网的海量信息所淹没,于是我进一步萌生了对这些文字进行“编辑”的想法,想通过自己的阅读、学习和选择,让更多的作者能将自己的经验分享出来,想想一本全部来自第一线DBA的经验集合,将会是多么宝贵的财富啊!

于是我通过自己的网站和邮件发出约稿邀请,得到了很多朋友的积极响应,最后汇集了本书的五位作者,而我希望这只是一个合作的开始,期待以后会有更多的作者将自己的经验总结分享出来。

这本书以诊断案例和性能优化实践为主,自然也就涉及到了不同版本、不同环境的数据库,也许有些数据库版本会逐渐退出历史舞台(现在Oracle Database 11gR2也已经发布),但是经验、思路和方法会具有长久的参考价值,如果这本书中的某一章节或某一部分内容对您有所帮助、有所借鉴,那我们就会无比欣喜,这本书也就有了其存在的意义。

真正全力开始这本书的写作与组稿,是在2009年3月结束一个客户为期8天的定制培训之后,客户的DBA们强烈建议我组织一本DBA工作实践的书,不一定要多深奥,但要可以给想要或者刚刚进入这个行业的DBA们一些参考,让他们了解真实的DBA工作。这些建议和我之前的一些想法不谋而合,于是我加快了推进这本书的写作。

感谢这些朋友的建议推动了我,在这次培训中的另外一个收获就是,结识了本书的作者之一。

二、本书的内容

综合所有的稿件,我将这本书分成四篇,分别为:

1. DBA工作手记

这一篇收录了四章的内容,分别为盖国强、杨廷琨、熊军,以及邹德平的DBA工作手记。本部分概要记录了日常工作中一些经验和技巧,也包含一些对于DBA工作的探讨。记录日常、记录工作、记录思考,是这一篇的主题。

2. 诊断案例篇

这一篇包含了六章内容,详解地记录了DBA工作中遇到的一些案例及思考、处理过程。

3. SQL调优篇

这一部分包含了同SQL优化相关的实践,包含大量关于使用索引进行SQL优化的实际案例。

4. 性能优化篇

包含了一些CBO模式下的优化案例,以及存储与分页查询的优化过程。Oracle的CBO是数据库中最为复杂的部分,通过一些实际的案例分析,我们希望能够为大家展现解决问题的思路和规律。

显然,这是我们主观的划分,各篇内容也不可能包括某方面知识的全部细节,我们只是记录了工作涉及的一些案例和实践,如果其中能与读者的工作有某种契合,那就是我们工作的巨大收获。

三、作者们的话

在本书完稿之际,我邀请几位作者,各自写下一段话,作为本书的导引:

积累与分享——老杨如是说

8年的DBA经验告诉我,学习Oracle并不是一件轻松的事情。对Oracle有一定了解的人都会有同样的感受,那就是Oracle数据库包含的内容博大精深。对于一个初学者而言要学习的东西实在太多了,比如数据库的基本概念、数据库的管理操作、SQL语法、PL/SQL语句、数据库备份恢复、性能优化,等等。但即使有了这些还是不够。要成为一名合格的DBA,对Oracle的一些高级特性也应有一定的了解,比如DATA GUARD、RAC、STREAM,等等。对于Oracle的选件功能也多少应该知道一些,比如全文检索、XDB、VAULT,等等。

上面列举的还仅仅只是Oracle数据库方面的知识。如果你是开发DBA,那么对于开发相关的知识、对于程序设计和数据库结构设计,甚至对中间件技术等都要有所涉猎。如果你是管理DBA,那么还必须具备操作系统方面的知识,另外对存储的划分、网络的规划等知识也要掌握。

要学习的东西确实很多,但这还远远不够。上面所说的还只是知识范围,作为一名DBA还要不断学习各种新知识和新特性。要知道Oracle每一两年就会推出一个修订版,每三到五年会推出一个换代大版本。对于DBA来说不仅要学习大量的新知识,而且目前所掌握的有些知识和经验在以后的版本中也可能不再适用。对于DBA来说,学习应该是一个不间断的过程。如果你停滞不前就意味着你OUT了。事实上,就在我写下这篇文章的同时,Oracle数据库最新的11.2版已经可以下载了,对于DBA来说,新的学习目标又出现了。

即使你拥有了以上这些知识也并不意味着你已经成为一名高级DBA。对于高级DBA来说,知识只是必须具备条件的一部分,积累大量的分析、解决问题的经验则是另一部分。而这部分是无法通过阅读文档获取的。事实上如果靠个人解决自己碰到的问题来积累经验是需要相当长的积累时间的。何况一般初学者很难在平时工作中得到独立解决问题的机会,有时即使出现了这种机会,但由于知识积累的不足也会导致在遇到问题时无从下手。

知识确实很重要,掌握的知识越多,对细节的了解越清晰,解决问题时就越能得心应手、游刃有余。不过有时解决问题的思路更重要,前面提到了Oracle数据库包含了太多的内容,而当你吸取了这些知识后遇到问题时,如何利用这些知识来分析问题、解决问题或避免问题的出现,这就不是知识本身能解决的了。

一个困扰初学者很长时间的问题,一名高级DBA可能几分钟就可以搞定,因为很可能这个问题高级DBA在此前已经碰到过了。即使同样是从来没有遇到的新问题,当高级DBA已经解决完问题时,初学者可能还没有找到解决问题的思路,而这就是经验上的差距。

简单地说,知识告诉你一个特性是什么,以及如何使用这个特性,它的优缺点是什么;而经验告诉你这个特性何时该用,何时不该使用,在何种情况下使用能够发挥特性的优点,在何种情况下会导致这个特性的缺点。知识与经验二者同样重要,当这两个方面都积累到一定的程度时,你自然也就会成为一名高级DBA了。

说了这么多,恐怕要把初学者吓坏了,成为DBA要掌握那么多的知识,还要积累这么多的经验,听上去似乎是mission impossible。但是要知道罗马也不是一天建成的,初学者到高级DBA之路虽然漫长,只要坚定信心坚持下去,这条路也并不困难。Eygle的名言放在这里再合适不过了:

兴趣+勤奋+坚持+方法≈成功。

虽然获取大量的知识是一个漫长的过程,好在信息时代有足够方便的途径来获取知识。Oracle的官方文档、各种官方、非官方的网站、论坛以及个人Blog都是获取知识的来源,除此之外,还有很多已经出版的书籍来帮助大家解决知识获取的问题。

经验的获取则要困难一些。无论是文档、网站,还是目前出版的大部分书籍都是偏重知识的传授部分,偏重经验介绍的寥寥无几,而经验的共享确实也要比传授知识更困难一些。

正是出于以上这个原因,才促成了这样一本书的写作与出版。当Eygle联系我打算出这样一本书时,我马上就答应了。将DBA解决问题的案例集合成一本书,在国内应该是比较少见的。我们的本意是分享自己解决问题的经验,期望能给初学者带来一定的启发,起到抛砖引玉的作用。希望这种尝试能够获得预期的效果,同时希望有更多的人参与到经验分享的过程中来,也希望这种方式确实可以帮助初学者更快完成经验的积累。

感谢Eygle,是他的努力促成了这本书。本书的所有作者都是Eygle联系并约稿的,除此以外,稿件的审校和整理以及出版事宜基本上也是他一个人完成的,没有他辛苦的劳动就没有这本书。最后要感谢我的妻子,她的工作和IT不沾边,对Oracle技术更是毫无了解,但她在我写作过程中帮我审校了所有拼写上和语法上的错误并通顺了文章的语句。如果这本书中我的文章还算通顺,主要归功于我的妻子。

兴趣+勤奋,理论+实践——老熊的学习经验谈

可以用8个字来概括我的学习经验,那就是“兴趣+勤奋,理论+实践”。这里我将这几年学习Oracle的心得写出来,希望对打算学习Oracle或者准备深入学习Oracle但暂时又不得其门而入的朋友们有所帮助。

兴趣:其实我并不是科班出身,甚至在参加工作的前两年,所从事的工作还与IT没有任何关系。只是我对计算机技术有着非常浓厚的兴趣,到后来兴趣主要集中在Oracle数据库上,这样最终才转行到了Oracle数据库上。这几年来我不停地学习Oracle,兴趣是最重要的原因。当然,兴趣不是天生就有的,而是在接触事物的过程中,慢慢培养出来的。有了兴趣,就会主动去了解、掌握这个事物。也就是说,只要我们有了兴趣,就会非常主动地去学习Oracle数据库。如果不主动,很难学好一门技术。因此,培养对Oracle数据库的兴趣,是学好Oracle数据库的关键。

勤奋:很显然这个世界上天才很少,作为一个普通人来说,如果要精通一门技术,做好一件事情,勤奋与坚持是必不可少的。对于学习Oracle数据库来说,如能数年如一日地坚持下来,那么深入掌握Oracle也不是什么难事。对于我个人来说,坚持学习Oracle,每天并不需要花很多的时间,只需要每天掌握1个小小的知识点,会1个简单的操作就可以了。

理论:我个人学习Oracle数据库时,喜欢从理论或者说是基础知识入手,尽量先掌握系统的概念、架构、原理等。掌握了理论基础,才能举一反三,才能融会贯通。如果没有理论基础,那么在大多数时候只能凭经验来进行Oracle数据库的操作。如果要学好Oracle,扎实的基础理论知识是必不可少的。我从学习Oracle以来,很多官方文档,如《Oracle Database Concepts》、《Oracle Database Performance Tuning Guide》、《Oracle Database Administrator’s Guide》等都看了个遍,有的文档甚至看了数遍。不过官方文档过于枯燥,缺乏必要的示例和案例,非官方出版的Oracle书籍就是很好的补充材料。

实践:如果只有理论,而没有操作实践,那就很容易陷入“眼高手低”的境地。学习Oracle时,需要掌握各项功能的使用,具体到SQL的使用,各个性能视图的使用,数据字典的使用等。如果没有这些,在进行操作时,会有无从下手的感觉。比如在进行紧急性能问题处理时,还要去参考很多的资料,那显然是临时抱佛脚。读再多的书,看再多的文档,如果没有进行过实际操作,那永远不会有多大的提高。不管是开发、性能优化、故障处理还是日常维护等,最终都要落地到实践操作上。理论与实践是相辅相成的,理论需要实践来巩固和验证,实践操作需要理论来指导。

基本的操作熟练后,需要进一步提高,也就是在做对事情的基础上,再考虑把事情做得更好。比如针对某一项操作需要,怎样才能最大限度地减少对业务的影响,最大限度地提高效率等。

除了前面提到的“兴趣加勤奋,理论加实践”,学习过程中也应该注意学习方法,这样才能达到事半功倍的效果。在学习和操作Oracle数据库的过程中,把学到的东西整理下来,形成文字,比如写BLOG等。写的过程就是梳理知识和思考的一个过程,这种方法对我个人来说作用非常大。

当然经常上论坛参与讨论或者阅读别人博客上的文章,也是提高Oracle水平,积累案例经验,拓宽视野的好方法。

从兴趣到爱好——段林仲的话

学习Oracle的最大动力是兴趣,只要有兴趣,你会发现一切都是那么让人兴奋!也许你会在知识积累的过程中感到枯燥,请一定要坚持,终有一天你会豁然开朗,发现你所学到的东西是那么的有意思。

不要认为DBA的工作很程序化,很乏味;不要放过你身边的点点滴滴,就像Eygle说的:“如果你每天搞定一个数据库中的Top SQL,坚持一个月你会发现你很有收获。”Oracle就是这么神奇的东西,它提供给你方法,提供给你工具,去挖掘、去探索那些神奇的未知的东西。在挖掘、探索的过程中你会发现无限的乐趣,也许有一天你会发现DBA不单单是一种工作,更可以当作一种爱好。

春雨润物,潜移默化——邹德平

虽然使用Oracle已经多年,却越发觉得自己只是才推开Oracle大门的一角,离登堂入室还有很远的距离。但正是对Oracle技术的兴趣,使我能坚持下来并有勇气和大家分享自己的一点经验。

我相信兴趣是最好的老师,只有兴趣才能让一个人去坚持,甚至着迷。当一个人在一件事情上花了很多心思的时候,他的知识就会在不知不觉中提高,如春雨润物,悄然无声。

正如书名“Oracle DBA手记”所言,集的是一线DBA的工作经验总结和心得提炼,也许书中没有体现Oracle的知识框架,但是这些案例的处理过程正是对Oracle各种知识的实际应用,而这种实际生产环境中发生的真实案例对读者来说可能具有更大的价值。

在谈及Oracle数据库学习经验时,多位作者都不约而同地提到了兴趣与勤奋的重要,其实这也是本书所以能够最后完成的重要契机,如果大家都能够在自己感兴趣的领域深耕下去,坚持不懈地积累、总结,那么多年以后一定能够获得让人惊讶的成绩。如果每位DBA朋友都能够总结经验、分享所得,那么数据库的学习就不是一件难事、苦事。

我们非常期待这种合作、分享的模式能够继续下去,有更多的朋友不断参与进来,将自己的所学、所知分享出来,独乐乐不如众乐乐,愿我们都能体味到分享的快乐,更希望这本书只是一个起点!

最后,感谢几位作者们的辛勤劳动与经验分享。由于编者的经验有限,书中难免存在错漏之处,敬请读者朋友们批评指正。

谢谢大家!


Eygle

2009年9月