《深入解析Oracle》一书前言

虽然《深入解析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 于北京

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏程序工场

优秀程序员的十个习惯

13830
来自专栏非著名程序员

Java程序员月薪达到三万,需要技术水平达到什么程度?

18950
来自专栏Java架构

作为程序员应该经常关注这些网站!

24330
来自专栏java一日一条

10个用Java谋生非常有趣的方式

令我惊讶的是,有些人觉得编程并不令人兴奋——只将它当作是一份枯燥的工作。不过,虽然可能的确有很多无聊的编程工作,但这并不意味着你不得不接受这些工作中的一个。程序...

12420
来自专栏顶级程序员

GitHub CEO:GitHub 十年,感谢有你

源 / 极光开发者 简评:不知为何,总感觉 GitHub 成立不止 10 年了,你们有这种错觉么? 本文是 GitHub 联合创始人兼 CEO:Chris W...

30240
来自专栏杨建荣的学习笔记

自动化平台的尝试和小结

自动化平台的事情喊了好久,之前有人做,自己协助支持,现在想做,但是苦于没有实战经验和技术积累。所以身份和角色转换,都需要转变。 那么只能是硬上。不会Python...

25930
来自专栏非著名程序员

GitHub 十年,感谢有你

本文是 GitHub 联合创始人兼 CEO:Chris Wanstrath 在计算机世界杂志写的文章。

16250
来自专栏Java社区

加入我们,终身免费获取本公众号所有视频资源

25440
来自专栏前端架构

UED团队规范设计参考及建议

公司产品线逐渐增多,变动频繁且并行开发,常常需要设计与开发能够快速的做出响应。同时这类产品中有存在很多类似的页面以及组件,可以通过抽象得到一些稳定且高复用性的内...

1.2K90
来自专栏飞总聊IT

大数据那些事(23):我是怎么分析Dremel系统的

做公众号到今天也算小半年了,有很多的收获。大数据系列转眼之间也若干万字了,最开始的时候的确没有能想到会写到今天这个规模。上篇关于Dremel的文章,读者给了我很...

30160

扫码关注云+社区

领取腾讯云代金券