虽然《深入解析Oracle》一书还没有正式出版,我还是先将前言发布在这里。
因为我一直觉得,前言是一本书非常重要的部分,作者的思想和意图会在这里传达。以下就是我为这本新书所写下的前言。 ------------------------------------------------------------------------------ 经过几年的积累,再加上几个月的努力,新版的《深入浅出Oracle》即将呈现在大家的面前,我当然希望这本书能够得到大家一如既往的支持,然而一本书的价值仍然要靠大家去评判。 关于这本书的修订,有很多话想和大家说一说。
从2006年这本书出版到现在,已经过去了2年,在这两年中,《深入浅出Oracle》经历了大家的热烈关注期,也经历了淡淡的沉寂期,很长一段时 间并没有修订这本书的想法,直到最近,我仍然不断收到很多读者的来信,和我热烈的探讨书中的观点,甚至得知有些教育和培训机构已经选择我的书作为培训教 材。 这么多热情的读者使我感到了不安,因为这本写作在2006年的作品已经存在了很多需要增补的地方,只要有人阅读,我就不能松懈。 正是因为支持这本书的读者,我才下定决心要将这本书重新修订,修订的目的是为了让这本书更加完善、更加接近Oracle数据库的发展变化。
关于这本书的结构我愿意再重新描述一次,本书每章的布局基本上分为三个部分:入门的基础知识、进阶知识、结合实际的诊断案例分析。 我的原意是让基础知识部分作为初学者的入门参考,进阶部分作为Oracle技术爱好者深入学习的材料,而案例分析则作为实践部分提供借鉴。 但是显然这样的设计招来了很多抱怨,一些初学者发现在这本书中能看懂的部分很少,我想我应该修订一下我的描述。实际上在这本书中,我更多关注了Oracle技术的深入探索以及案例描述,所以她更适合作为DBA进阶与深入学习的参考。
虽然如此,我仍然在很多公开的场合谈到,即使是一个初学者,也应该有更高的起点,暂时有些东西看不懂不怕,但是至少你应该知道深入的学习应该向何处去,深入不是错误,如果你不能深入那才是错误。要记住随着技术以及时代的不断进步,社会留给DBA的成长时间越来越短,一个DBA从入门到成长为资深的时间不会超过2年。所以,如果你能够忍受一点知识的折磨,这本书还是会对你有用。张爱玲说过,成名要趁早。做技术的也是如此,成长越早越好,越快越好。 当然,这本书的另外一种写作方式和我个人的学习方法有关,当我在研究Oracle技术的时候,总是忍不住要不断深入去探索,试图从原理或本质上理解Oracle的技术实现,我一直认为表象以及呆板的记忆对学习是无益的。
所以当然,这不是一本简单的关于Oracle技术知识概念性介绍的书,读这本书,实际上你是在和我共同经历一次Oracle的学习过程。如果你和我一样享受这个过程,那么这本书就是为你准备的。
在修订版中这本书的主要变化是,由原来的9章增加到现在的10章,原书的第一章承载了太多的内容,加上我的大量增补,现在我将第一章的内容分开,就 变成了现在的10章,新的一章命名为《控制文件与数据库初始化》,关于控制文件这部分内容,原本计划写在另外一本书里,现在加在这里也是非常合适的。 除此之外,全书的整体结构并未改变,但是在入门、进阶与诊断案例三个方向都做了极大的扩展。这些扩展包括在入门部分对基础知识进行了更为全面完整的介绍; 在进阶深入部分,对机制原理进行了进一步深入阐述;在诊断案例部分增加了一些这几年来遇到的有价值案例,结合分布到各个章节。在新技术方面,全书对 Oracle Database 10g与Oracle Database 11g的一些新特性进行了补充,但是新特性的补充是根据全书架构需要进行的,并非盲目,本书最重要的仍然是第一版就确定的体系结构。 经过修订,增增减减,新版的变更部分大约在40%左右。
关于深入浅出这四个字的理解,很多读者提出质疑,说本书深则深矣,浅出则未必。 在这里我想说说我自己对于"深入浅出"这几个字的理解,这个理解是伴随着我的职业生涯的。以一个和技术有关的例子来说也许会好一点,我在书中探讨过关于数 据库的启动与初始化的过程。回想起来最初对这个问题的探讨还是在2004年左右,那时候我和Biti在北京因为偶然第一次用sql_trace跟踪数据库 的Open过程,因而获得了关于bootstrap$的信息:
create table bootstrap$ ( line# number not null, obj# number not null, sql_text varchar2(4000) not null) storage (initial 50K objno 56 extents (file 1 block 377))
而这还仅仅只是第一步的探索,这里的探索涉及到了数据文件、数据块的定位,而在后来的网上探讨中,有朋友给出了更进一步的发现,当使用10046事件来跟踪数据库的启动过程,你会发现最初的等待输出有如下两行信息(来自Oracle9i数据库):
WAIT #1: nam='db file sequential read' ela= 94 p1=1 p2=417 p3=1 WAIT #1: nam='db file sequential read' ela= 103 p1=1 p2=377 p3=1
这些信息就清楚的显示了数据库启动中经历了从文件1的417号Block到377号Block的定位过程,一切就是这么简单清晰,可是在没有经历过那么多深入的摸索、尝试与思考之前,你是不会看到这么浅显、明晰的展示,或者看到了也可能无法一下子有那么清晰的理解。 db file sequential read是一个大家都常见的事件,可是你能否理解这后面所隐藏的种种处理以及细节呢?我处理过很多次因为这个事件而导致的性能故障,有时候看起来是极其棘 手的问题,而能否真正理解这个事件的本质,以及每一个参数的含义(也就是说你的理解是否足够深入)是解决问题的关键,如果你曾经足够深入的探索过,你给出 的答案很可能会是非常直接的、非常简单的,也许让人惊讶,但是绝对有效。
那么再进一步的观察,在以上2条输出之前,还会有以下一段输出:
WAIT #1: nam='direct path read' ela= 46 p1=1 p2=1 p3=1 WAIT #1: nam='direct path read' ela= 5 p1=2 p2=1 p3=1 WAIT #1: nam='direct path read' ela= 3 p1=3 p2=1 p3=1 WAIT #1: nam='direct path read' ela= 3 p1=4 p2=1 p3=1 WAIT #1: nam='direct path read' ela= 3 p1=201 p2=1 p3=1
现在来想一下,为什么会有这么多direct path read的等待事件?p1代表的是文件号,那么201号文件又是指什么文件? 我在本书中有过进一步的探讨,实际上数据库在Open的过程中,会对数据文件以及控制文件进行比对校验,数据文件的第一个Block记录了重要的检查点、SCN等信息,这些信息在启动时要被读取,这里就是这样一种体现。 看,很多书本中抽象的知识,现在通过简单的观察,我们就获得了直观的印象。而且你会对Oracle的种种等待事件有了更加深入的理解。
这就是我理想中的那种深入浅出,这是一种在经历了千难万险、峰回路转之后,看山还是山的那种平淡。佛祖拈花,迦叶破颜,有时候能够感受到这种会心之意是非常难能而宝贵的。
有一次去兰州大学做技术交流,兰大的一位李老师对我说,最近看我网站上提到的学习方法等内容,感觉到一个字:虚!我当时跟他开玩笑说,我还有更虚无的8个字可以送给你,那就是:运用之妙,存乎一心。 这 是玩笑,也不是玩笑,有时候对Oracle进行了深入的研究与探索之后,剩下的如何运用这些知识去解决问题,实际上是非常灵活的,很多时候简单的常规方法 经过巧妙运用之后就可以化为神奇,发挥出你意想不到的作用。所以根本的,我们应该花力气去做的仍然是积累、深入、思考,然后才能在遇到问题时举重若轻、运 用自如。 我相信每个人都会有这样的经历,如果你读到这里能够有一次破颜的会心微笑,那也许就是我最大的收获。
尽管如此,最终我还是决定做一些改变,所以这本书最后的名称被确定为《深入解析Oracle》,这是我在美国参加2008 Oracle Open World期间忽然产生的一个想法。我和Kamus曾经在东方标准做过一个系列的公开培训课程,就是用的这个名字,我很喜欢这个名字。 新的名字可以避免对一些读者的误导,通过这个名字我想说这是一本由浅入深、比较深入的书,也许这个名字更符合这本书的主旨。
在《深入浅出Oracle》之后,我写作了另外一本书《循序渐进Oracle》,通过这两本书实际上我想构建一个更为完善的学习结构,从DBA的实际工作应用出发,帮助Oracle爱好者更好的进行入门以及深入的学习。 也经常有些朋友发邮件来询问Oracle的学习路径与学习规划,通过写作,我一直想把自己的领悟传达出来,现在在这里我将这两本书的体系结构整合一下供大家参考:
当然,这两本书都是自成体系的,在将来也许还会有第三本,在Oracle完整的知识体系结构里,这两本书还缺少一些重要的内容。
我要感谢众多支持我的读者们,是你们的支持与鼓励才有了本书的修订,你们的支持才是这本书真正的存在价值。在这本书出版的两年多以来,我的生活已经 有了很大的变化,我要感谢我的太太Julia,感谢她走进并且改变了我的生活,感谢她理解我很多时候废寝忘食不顾一切的学习与工作态度,她的支持以及理解 是我写作的基石,我还要把这本书献给我的儿子,他比这本书还要年轻,在我修订这本书的很多章节时,他就在我身边爬来爬去,他是我永不枯竭的快乐源泉。 没有什么比生活更重要的了。
虽然本书是《深入浅出Oracle》一书的修订版,但是其工作量与意义对我来说完全不亚于一本新书,由于水平所限以及难免的疏漏,书中肯定存在错谬之处,真挚的欢迎大家的批评与指正。
最后我还要感谢我的朋友们,他们为本书提出了很多宝贵的意见与鼓励;感谢黄志洪、牛新庄、冯春培、陈吉平、张乐奕为本书撰写评论及推荐。
-----------------------------------盖国强 2008-9-18 于北京