終於把 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行業產品的使用。