终于把 OCP DBA 的课程都考完了,累啊!总的来说ORACLE的认证值得考。本人有CCNP, MCSE证书,但通过DBA的考试,觉得不仅加深了对现代数据库的了解,还丰富了计算机科学的知识结构。我觉得,从某种角度来说,ORACLE数据库甚至具备一些操作系统的功能。
ORACLE的考试,要记住的东西相当多,考试要求基本上是以原始的命令行方式,而不是图形界面操作,因此表的名字,以及相应的scripts相当多是要求记住的,整个DBA考试,光书中提到的table就有数百个之多,我想这主要是因为过去ORACLE主要是在UNIX系统上运行的,可供使用的图形界面软件不多!这也相应地增加了考试的难度!整个考试重点在于对概念的理解,对细节考得不是太多,我想国外的考试都是这样吧!例如问lock contention 的原因是什么?然而,oracle的概念可是五花八门,数不胜数!
最初一门SQL是基础。这门不难,只要多点上机实践,一般都没问题,但是pl/sql的许多概念,例如触发器等,要弄清楚。如果有数据库开发的基础,这门课是小菜一碟!
第二门,《数据库管理》。可算上是ORACLE的基础课了,也是核心课程,课程中提到了许多在以后的课程中反复使用的概念与方法。例如,instance及相应的进程(pmon,smon,arc0,dbw0,等)。数据库的物理结构由dbf文件,控制文件,redo log文件,archive文件等。数据库的逻辑构成由tablespace,segment,extent,block等。需要理解的是ORACLE的基本运行过程,oracle读取parameter file 的设置在physical memory中构造instance, 通过dbwr进程将SGA的database buffer 中的数据定期或不定期地写入datafile ,同时也将sql指令由lgwr进程记录在redolog文件中,系统定期将redolog文件copy成为archive文件,系统为了transactional的需要,提供了rollback segment ,这样保证了read consistence。 这一门的概念相当多,令人觉得oracle的存储概念相当细,例如对segment 的block还分了pctfree 和 pctuse ,顺便也提到了row migrate 与row chain 的概念,可见oracle对逻辑及物理对象的管理能够非常细致!再有,scn不仅储存在control file 中,还在datafile 的header 中,scn的引入是为了保证系统各文件之间的协调与连惯。本门许多命令的可选参数基本是不用记的,太多了!也不怎么考,这些参数在《性能调整》一门中则作了详细介绍!大家只要记住最基本的语句就行了!
第三门,《备份与恢复》。如果对操作系统备份与恢复有了解的话,会有一定的帮助,但oracle的备份与恢复难点在于对逻辑对象的操作,例如,对table的操作可用import与export命令。而rman是重点。Oracle的备份与恢复有相当多的分类,令人眼花缭乱,有archivelog和noarchivelog ,完全备份与不完全备份,只读表空间的备份,介质恢复,等等。由此可见,oracle的备份比操作系统的备份复杂多了!
在《网络管理》一门中,最具实际应用意义的是net8的设置及listener 的设置。本门的命令使用还是非常多的,例如在lsnctr,connection manger(cman) , namesctl 方面。ORACLE还自己做了一套与OSI 7 层网络结构相对应的协议栈, 我想OSI有自己的网络结构,CISCO也自己搞了一套网络结构,现在发现ORACLE也有类似的,我觉得可笑,越发感觉OSI做的东西只供参考,没有被大厂商所采纳。我发现ORACLE产品做得相当完善,精彩之处在于它的中间层结构集成了路由器才有的功能,能做对ORACLE 服务的网络协议转换,而且connection concentration 做得相当合理。 Oracle 公司做一个相当于 DNS server 的 name server 组件, 与microsoft DNS 服务器大同小异。在网络安全授权与认证方面,我发现CISCO与 oracle做得非常相似,例如双方都有 kerberos , radius 等的authentication 的应用。 考这门的时候,如果大家有路由知识,有操作系统网络知识,这门可说是相当简单的!也就是说对考过CISCO 及 Microsoft 认证的人,会降低了不少难度!
在《性能调整》一门中, ORACLE的性能调整不能不令人叹服。门类齐全,功能完备。对share pool的调整 ,细化为对dictionary cache , library cache, big pool的调整;对physical I/O 的调整,更细化为physical datafile , DBW0, REDO LOG , LGWR , CKPT , ARCHIVE , SORT , ROLLBACK SEGMENT等的调整。令人不能不叹服,同样是数据库管理系统,SQL SERVER 2000, Sybase , 甚至是db2 都没有这么细!对SQL语句和 application design 的调整,是本门最难的一部分,如果大家以前对编译原理有相当认识,会有不少帮助。ORACLE 对多CPU 系统也专门作了优化,如latch, process, mts,lru等方面的参数设置都与此有关。在这门中,《数据库管理》当中学过的语句中一些不常用的选项,在这门都作了详细的介绍。例如,建table 以及index中的nosort选项,是为了减少排序的使用。再如,cache选项,create 和alter table时加上cache是为了将table放在the most-recently-used end of LRU lists, 以提高性能。在《数据库管理》中提到的如analyze 命令的具体用法也作了深化,指出与DBA_TABLE, DBA_INDEX, INDEX_STATS等表相关。操作系统中建议采用raid 来提高磁盘使用效率,将不同文件放在不同磁盘,以减少读写磁盘等待时间等的概念,在这里都提到了。有一些操作系统使用的方法,在ORACLE提供了相似的措施,如stripe 磁盘,能够提高效率。本门提到的index的使用,相当科学,如建立逆向index,以及 index-organization table这些都符合人们的优化思维!大家如果对《数据库管理》一门中许多基础概念清晰理解,学习本门时将受益菲浅,例如 snapshot too old 的概念,切不可以模棱两可!对于init.ora中的许多参数,oracle认为非常重要,大家要搞清楚,例如large_pool_size的使用,设置。这一门对developer来说也有重要意义,能使程序员更加注重从提高数据库程序运行效率的角度来编程。从我个人角度来说,这一门课是最值得看了,是对所有概念的总结和升华。
在我看来,只要花上三个月时间认真看书,通过OCP DBA的考试应该没问题的。再有,就是要直接看英文书,这样才能节省时间。关于DBA考试的中文书没有哪本不是翻译过来的,有的错漏百出!
从实践角度来看,真正能在工作中用到的知识,也许也就考试肉容的30%左右。但ORACLE在实现这些功能的方法,代表了许多IT厂商实际应用的思路与模型,理解ORACLE的原理,有利于理解其它IT行业产品的使用。
欢迎大家来信探讨!