大学的时候,我是管理学院的,后来细分专业的时候选择了信息管理。于是管理、会计、财务、机械、电子,甚至说情报检索都学过,当然也包括计算机。
如果不算foxbase和foxpro的话,数据库方面仅仅学过一门数据库原理,用的教材是Stanford的影印版。
后来实行导师制度,带我们的是两个博士生,跟着他们做实习,用pb 6.0连上oracle 7.3创建了一些表和视图,写了一些power script。其实也知道做的不太好,老师表扬我做的还不错,于是对这个刚来上课时还会脸红,到后来却带着墨镜在校园里伴酷的MM,多少多少有了点好感。
找工作的时候,大家都说用过的叫作熟悉,听说过的叫作了解。也不好意思写了解,于是简历上写了熟悉Oracle。工作以后做Project和SQL Server方面的东西,后来在深圳银河培训SQL Server的时候,老师说SQL Server很简单,Oracle才是博大精深。对Oracle开始有点好奇。
不久以后换了工作,开始使用Oracle数据库,主要是做报表视图、写PL/SQL程序、数据库建模,知道了很多小技巧,如表按什么顺序连接,什么时候要用索引,什么不应该用索引,怎样避免死锁。印象中书看的最多的就是机械工业出版社那套Oracle8丛书中的Oracle初学者指南,PL/SQL程序设计指南,PL/SQL高级程序设计指南。也隐隐约约知道Oracle中有个SGA,有个叫做池子的东西。并在Linux上自豪的装上了Oracle 815,不到一年的时间很快过去了。
第二年开始迷恋上了Oracle的结构,SGA,知道了什么叫做DB Buffer,什么叫做Log Buffer,如何分配,很笼统的概念:“DB Buffer一般要给SGA的80%左右”,知道了高速缓存率等等多概念,还知道了控制文件很重要,有人问我假如控制文件全部丢失了,只有数据文件和日志文件,能不能恢复,我不是很确定的说不能吧,结果对方很轻蔑地对待自己,话语至今还记忆尤新。
于是在那个夏天,我知道了scn,大致明白了备份与恢复的原理,知道了如何创建控制文件,什么时候用resetlogs,什么时候用noresetlogs,但是为什么不知道。接着知道了DBWR,LGWR,CPKT等等的作用,还看了"oracle8i internal services for waits, latches, locks"那本书,明白latch,lock,semphore的各种类型和确切用途。知道了free list,pct free,大致明白了Db buffer、Log Buffer,Large Pool,Share Pool这些东西该怎么去配置,更知道了用Unix里面的top,vmstat,sar来监控性能,印象最深的就是ITPUB上面当时的几位高手知道lular2000对泰国一个关于智能网的数据库如何配置。并Ixora网站的文章制作成电子书在ITPUB上。
也开始看高性能SQL调整内幕,知道了Neeted loops,Merge join,Hash join,也知道了Unique scan,fast full scan,index skip scan,full scan这些名词和作用,也知道了如何根据执行计划调整SQL语句,知道了如何跟踪调优。并带着两个同事负责这边系统包括Oracle在内的程序改进和维护工作。于是开始以为过去很苯,什么都不懂。现在是高手了,一定要做一个Oracle优化软件。很多书我都扔掉了,当时买的Oracle性能优化内幕(Oracle Performance 101)现在还保留在身边。
结果下一年春天的时候,发现写一个Oracle优化软件的难度很大,根本做不来。只是隐隐约约的构想整个Oracle的运行情况,是懂非懂。但是觉得对搞应用来讲足够了。
其实我也一直关注Java和OO的东西。接下来因为工作上的原因,很少关注Oracle,即使关注也是看文章和思索层次(唯一有点相关的是关注到了主机和存储方面的东西,还琢磨过hp和IBM的宣传手册)。全心做Java和OO的东西。
有一天明白了事务的acid属性,明白了分布式事务,事务是怎么实现的,才算明白为什么Oracle的每一部分为什么要那样设计。从此以后我觉得豁然开朗,提升了一个档次,知道了结构上Oracle为什么会这样设计,直到现在的RAC,各种备份方法。看了JBoss的Marc Fleury的blue自传,他说"cache is the king",尽管以前都说缓存可以提高性能,Marc的话才让我明白了为什么,知道了CPU,CPU cache,Memory,Disk,Network之间的关系,每一层何尝不是下一层的缓存。
就这样,我清楚DBWR,LGWR,CPKT,semphare,Latch,DB BUFFER、Log Buffer、log file、data file、Control file、lock是如何精确协作的,block里面是什么结构,事务如何实现,各种等待事件什么会发生。
结果直到去年8月的一天,突然要和公司的同事一起去为一家单位做异地容灾方案,各种原理我都清楚,只是用的oracle 8.0.5和HP-UX 11i的组合,硬件是吓人的hp superdome。oracle 8.0.5版本我没有用过,虽然整个过程很顺利,我还以为oracle 8.0.5还要用x window来图形安装,像个笑话。开始苦苦实践,身经百战才能够所向披靡。