出版時(shí)間:2012-10-18 出版社:人民郵電出版社 作者:白 鱔,儲(chǔ)學(xué)榮 頁數(shù):432
Tag標(biāo)簽:無
前言
寫完《Oracle優(yōu)化日記:一個(gè)金牌DBA的故事》和《ORACLE RAC日記》后,很多網(wǎng)友問我下面是否會(huì)繼續(xù)寫書。我的想法還是和以前一樣,先整理整理自己的思路,寫一些東西發(fā)在Oracle粉絲網(wǎng)上,寫過一段時(shí)間再根據(jù)已經(jīng)完成的內(nèi)容決定新書的結(jié)構(gòu)。開始我是想把新書寫成DBA日記系列第三部的,不過寫作的過程中才發(fā)現(xiàn)這種模式寫下去有一點(diǎn)千篇一律的感覺了,很多案例從根本上看十分相似。有一次和同事老儲(chǔ)聊天的時(shí)候,他提到現(xiàn)在很多年輕人不會(huì)按照Oracle的內(nèi)在原理去考慮問題,從而導(dǎo)致經(jīng)常出現(xiàn)常識(shí)性的錯(cuò)誤。他的這句話就像火花一樣在我腦海中閃現(xiàn),Thinking in Oracle這幾個(gè)英文詞匯就出現(xiàn)在我的腦中。如果每個(gè)人都能以O(shè)racle的基本原理為依據(jù)去考慮問題,那不是很好嗎?老儲(chǔ)的英文名字是John,在我的朋友里有兩個(gè)John。一個(gè)是老外John,我還在玩ICQ的時(shí)候認(rèn)識(shí)的網(wǎng)友,一個(gè)Oracle技術(shù)狂人。不過老外John現(xiàn)在已經(jīng)成為一家銀行的IT技術(shù)主管,隨著歲月的流逝,當(dāng)年的技術(shù)狂人現(xiàn)在已經(jīng)成了狂熱的人文主義者。去年圣誕新年假期他剛剛完成了10000公里行程的中南美洲自駕游,所到之處全部入住當(dāng)?shù)刈罡呒?jí)的酒店,吃當(dāng)?shù)刈畎嘿F的美食,還常常邂逅美女,雖然郵件還只是寥寥數(shù)字,但是羨慕嫉妒恨已經(jīng)讓我把這個(gè)資本主義的老家伙好好罵了幾天。另外一個(gè)John就是老儲(chǔ),他屬于睡在我對(duì)面的弟兄,我大學(xué)時(shí)的室友。自從1995年我把他從unixware漢化小組忽悠到深圳后,我們一直在一起合作。老儲(chǔ)是個(gè)很低調(diào)的人,低調(diào)到第一次和客戶打交道的時(shí)候客戶可能會(huì)質(zhì)疑他的能力,不過隨著和他交往的深入,你可以發(fā)現(xiàn)他的深不可測(cè)。老儲(chǔ)的建議讓我重新定義了本書的結(jié)構(gòu),把它分為基礎(chǔ)知識(shí)、工具、方法和案例四大部分。不過隨著寫作的深入,我發(fā)現(xiàn)這個(gè)工作是十分艱巨的。這樣一本書結(jié)構(gòu)之大,內(nèi)容之龐雜,遠(yuǎn)遠(yuǎn)超出了我的想象。于是我重新調(diào)整結(jié)構(gòu),將工具這一部分的內(nèi)容從書中拿掉,準(zhǔn)備獨(dú)立成書,把方法和案例用兩章講完。這樣調(diào)整后本書的內(nèi)容更為緊湊,篇幅也可以控制在450頁左右。更大的驚喜也接踵而來,我終于說服了老儲(chǔ),讓他參與到本書的寫作中來。其實(shí)第一次和老儲(chǔ)溝通這本書的時(shí)候我就邀請(qǐng)過他,不過被他以沒空為由拒絕了。老儲(chǔ)是一個(gè)懶散的人,我每次給他布置寫文檔的任務(wù),他總是在快到期的時(shí)候才開始動(dòng)手,不過每次提交的東西都讓人無可挑剔。能讓這么靠譜的人參與本書的寫作,確實(shí)可以為書增色不少。老儲(chǔ)憑著深厚的開發(fā)功力,在性能優(yōu)化方面具有很敏銳的觀察力,往往能夠在很短很短的時(shí)間內(nèi)找到系統(tǒng)的關(guān)鍵問題,而且他在Oracle文件結(jié)構(gòu)和ASM的結(jié)構(gòu)方面的研究很深,自己也編寫了一個(gè)類似DUL的工具。有了他的加入,關(guān)于ASM原理和數(shù)據(jù)文件結(jié)構(gòu)這部分內(nèi)容我就可以推給他了。此前我正為這兩節(jié)犯愁,考慮是否在書中去掉這兩節(jié),補(bǔ)充一些其他內(nèi)容。老儲(chǔ)的加入使這兩節(jié)保留了下來,對(duì)于數(shù)據(jù)文件結(jié)構(gòu)和ASM文件結(jié)構(gòu)感興趣的朋友可能會(huì)感到慶幸,保留這兩節(jié)也使得本書的內(nèi)容更加豐富。我給本書起的名字是《Thinking in ORACLE之DBA的思想天空》,主編覺得這是一個(gè)十分霸氣的名字。實(shí)際上,透過某個(gè)事物的本質(zhì)去看問題,無論針對(duì)什么,都是比較高的境界。對(duì)于某些事情,在沒有弄清楚其本質(zhì)之前,我們往往難以找到正確的應(yīng)對(duì)方法,雖然偶爾我們會(huì)像瞎貓碰到死耗子一樣歪打正著,但是好運(yùn)氣不會(huì)總是伴隨著你。就像前些年,我不了解“回南天”的成因,因此在每年的2、3月份總是十分痛苦。在廣東沿海生活過的人都知道每年的春天總是會(huì)碰到回南天,時(shí)間有長(zhǎng)有短,至少也在半個(gè)月左右。在回南天里,家里到處都是濕漉漉的,地上、墻上甚至天花板上都會(huì)滲出水珠。在這樣的環(huán)境中生活半個(gè)月,絕對(duì)是十分恐怖的事情。為了讓家里盡快干起來,我的第一反應(yīng)是門窗大開,同時(shí)用風(fēng)扇拼命扇風(fēng)。不過這樣處理并不能減輕返水的現(xiàn)象,有時(shí)候反而水更加多了。后來我請(qǐng)教了一位搞大氣海洋研究的人,他告訴我回南天的成因是春天東南季風(fēng)帶來大量的水氣,而當(dāng)氣溫回升的時(shí)候,室外氣溫高于室內(nèi)氣溫,濕熱的空氣遇到室內(nèi)較冷的物體時(shí),就會(huì)發(fā)生冷凝現(xiàn)象,從而就引發(fā)了反水的現(xiàn)象。一旦了解了回南天的成因,就很容易找到對(duì)付回南天的辦法了,只要碰到氣溫大幅度回升的天氣,就門窗緊閉??恐@個(gè)辦法,我終于擺脫了回南天的困擾,無論門外的走廊濕成什么樣,我家的地上總是干干的。后來每當(dāng)我看到朋友家里滿地積水的時(shí)候,就會(huì)把這個(gè)方法教給他們,他們也逐漸遠(yuǎn)離了回南天的困擾。從這個(gè)生活案例中,我們也可以看到,一旦了解了問題的本質(zhì),就很容易找到正確的解決方法。而沒有理解問題本質(zhì)的時(shí)候,我們所采取的應(yīng)對(duì)措施不一定是靠譜的。這個(gè)原則應(yīng)用到Oracle數(shù)據(jù)庫方面,也是一樣的。對(duì)于每個(gè)來應(yīng)聘DBA的人我都會(huì)問他們一個(gè)問題:“Oracle到底是什么?”有些人會(huì)用數(shù)據(jù)庫基礎(chǔ)的理論來回答我:“數(shù)據(jù)庫是數(shù)據(jù)的集合。”也有些人會(huì)感到茫然,不知道我問這個(gè)問題是什么意思。實(shí)際上很多Oracle DBA從來沒有思考過這個(gè)問題。“Oracle就是Oracle,是一個(gè)產(chǎn)品,還能有什么意思呢?我不知道Oracle到底是什么也沒有影響到我做一個(gè)合格的DBA。”很多人都會(huì)這么想。實(shí)際上對(duì)于Oracle我們確實(shí)還需要重新去認(rèn)識(shí)認(rèn)識(shí),每個(gè)DBA在學(xué)習(xí)Oracle的時(shí)候都往往注重于學(xué)習(xí)如何建庫、如何管理、如何編程、如何優(yōu)化。我們總在不停地去學(xué)習(xí)一些方法,學(xué)習(xí)一些秘籍。如果偶爾學(xué)到了一些不傳之秘,都會(huì)感到興奮異常。也有些人使用這些秘籍解決了一些疑難雜癥,成為了大家傳說中的高手。雖然說這也是學(xué)習(xí)Oracle數(shù)據(jù)庫最為常見的一種方法,但是這樣學(xué)習(xí)下去,我們總是在記憶一些枯燥的語法和腳本,雖然經(jīng)過數(shù)年我們積累下了大量的經(jīng)驗(yàn),但還是無法真正地理解Oracle,數(shù)據(jù)庫升級(jí)了,系統(tǒng)變化了,我們就必須從頭去學(xué)習(xí)。常年累月,我們總是在一次一次循環(huán)往復(fù)地重復(fù)著同樣的事情,直到筋疲力盡,對(duì)Oracle失去往日的激情,最終DBA只是一個(gè)職業(yè),Oracle只是我們謀生的手段。這樣學(xué)習(xí)下去,幾年后,很多人就會(huì)碰到瓶頸,雖然說自己處理問題的能力和工作經(jīng)驗(yàn)已經(jīng)很豐富了,但是技術(shù)好像停滯不前了。我周圍一些做了五六年DBA工作的朋友都遇到過類似的情況,他們咨詢我的時(shí)候,我告訴他們,這是因?yàn)榻?jīng)驗(yàn)的積累已經(jīng)到了一定程度,需要對(duì)Oracle基礎(chǔ)概念有更深刻的認(rèn)識(shí)。這種情況下,你需要靜下心來認(rèn)真看書,學(xué)習(xí)Oracle的基礎(chǔ)概念,只有徹底搞清楚了這些,才能跨過這道坎,達(dá)到一個(gè)新的境界。絕大多數(shù)工作了五六年的朋友已經(jīng)無法靜下心來做這些事情了,因此他們失去了突破的機(jī)會(huì)。不過也沒關(guān)系,大多數(shù)人選擇了新的職業(yè)規(guī)劃,從事管理,或者轉(zhuǎn)向售前、業(yè)務(wù)專家等職位。事實(shí)上,我們可以換一種方式來學(xué)習(xí)Oracle,讓Oracle的精神融入DBA的血液中,讓DBA像Oracle一樣思考問題,使Oracle成為我們的愛好,作為我們生命的一部分存在。對(duì)于大多數(shù)DBA來說,這也許只是一個(gè)烏托邦式的理想,多數(shù)DBA只是需要有一份工作,需要靠這份工作來生存,娶妻生子,享受生活。并不是所有的人都希望讓Oracle成為自己生命的一部分,這是很現(xiàn)實(shí)的,不過我們雖然可以僅僅把Oracle當(dāng)做是謀生手段,但也還是可以同時(shí)嘗試了解Oracle更多的本質(zhì),像Oracle一樣思考。對(duì)大多數(shù)人而言,像Oracle一樣思考雖然不能帶給你更多的生活樂趣,但是通過以這樣的方式去學(xué)習(xí)和思考,會(huì)更加精確地了解Oracle的精髓,讓自己在DBA的成長(zhǎng)過程中少走彎路。10多年前我第一次接觸Java的時(shí)候,感到十分頭痛。不是自夸,10多年前,我是一個(gè)相當(dāng)不錯(cuò)的C程序員,最高紀(jì)錄是一天之內(nèi)編寫500多行復(fù)雜的代碼,而且一次性編譯通過,一次性測(cè)試通過,這樣的記錄的誕生是基于十分良好的過程思維能力的。不過我這個(gè)自封的編程高手第一次接觸Java的時(shí)候,卻感到十分吃力。我無法用面向?qū)ο蟮乃枷肴ゾ帉懗绦?,所以學(xué)起Java來十分痛苦,幾次學(xué)習(xí),最后都放棄了。直到有一天我看到了一本英文的書籍Thinking in Java,通過這本書,我掌握了Java和面向?qū)ο笤O(shè)計(jì)、編程的主要思路。自從看了這本書之后,我再次面對(duì)Java程序的時(shí)候,發(fā)現(xiàn)一切都是那么地簡(jiǎn)單,很快我就掌握了Java編程?,F(xiàn)在我雖仍然還只是一個(gè)三流的Java程序員,不過粉絲網(wǎng)的一些修修補(bǔ)補(bǔ)的工作我完全能夠勝任了,而且在和一些Java開發(fā)人員交流的時(shí)候,我也能夠很快地理解他們的思路。后來我總結(jié)了一下,在看Thinking in Java這本書之前,我在編寫Java程序的時(shí)候,并沒有理解面向?qū)ο缶幊痰母拍睿荒苁钦肇埉嫽?,拿著一個(gè)例子在上面修改。實(shí)際上我的編程風(fēng)格還是面向過程的,因此寫出來的代碼質(zhì)量很差。而通過閱讀Thinking in Java,我終于學(xué)會(huì)了面向?qū)ο蟮姆椒?,用Java本身的思想去考慮問題,因此能夠更加準(zhǔn)確地抓住問題的本質(zhì)。我想,學(xué)習(xí)Oracle數(shù)據(jù)庫也是這樣,如果我們通過一個(gè)又一個(gè)案例去學(xué)習(xí)Oracle,那么將永遠(yuǎn)停留在表層上。有些DBA只能重復(fù)相同的案例,這樣的DBA,哪怕干上10年20年,也可能只學(xué)到Oracle的一些皮毛,碰到一個(gè)沒有見到的案例,可能就會(huì)感到手足無措。而水平高一些的DBA往往能夠判斷出案例的相似性,并通過分析找到類似案例的解決方法,這其實(shí)就是因?yàn)橥高^現(xiàn)象看到了問題的本質(zhì)。很多DBA可能都碰到過我下面所說的一些問題,有時(shí)候我們無法評(píng)估某項(xiàng)調(diào)整可能對(duì)系統(tǒng)帶來的影響,有時(shí)候我們面對(duì)一個(gè)復(fù)雜局面的時(shí)候很難快速找到問題的關(guān)鍵,也有時(shí)候我們?cè)跒榻鉀Q某種等待事件而感到無從入手。實(shí)際上,遇到這些問題,都是因?yàn)槿狈?duì)于Oracle內(nèi)部原理的充分認(rèn)識(shí)。在很多情況下,當(dāng)經(jīng)驗(yàn)無法為我們提供足夠支持的時(shí)候,就必須從原理出發(fā)進(jìn)行思考,才有可能真正掌握問題的根源,從而解決問題。前幾天我在一個(gè)客戶現(xiàn)場(chǎng)做數(shù)據(jù)拯救工作的時(shí)候,他們的備庫(也就是現(xiàn)在的主生產(chǎn)庫)突然宕機(jī)了,當(dāng)時(shí)客戶正在做一個(gè)刪除臨時(shí)文件的操作,領(lǐng)導(dǎo)就認(rèn)為他這個(gè)操作導(dǎo)致了宕機(jī),而操作人員也覺得很冤枉,因?yàn)檫@是一個(gè)十分常規(guī)的操作。我看了看日志文件,從日志上看不出任何由于臨時(shí)表空間和臨時(shí)段操作引起的問題,同時(shí)又看到了一個(gè)好像是人工操作停庫的信息,于是推斷可能是人為操作所致。后來經(jīng)過多方面查證,確實(shí)是有個(gè)DBA在家里遠(yuǎn)程做維護(hù)的時(shí)候,發(fā)現(xiàn)操作HANG住了,情急之下,直接重啟了數(shù)據(jù)庫。如果你不了解臨時(shí)段和臨時(shí)表空間操作的原理,面對(duì)這個(gè)問題,很可能一上來就把重點(diǎn)放在刪除臨時(shí)文件導(dǎo)致宕機(jī)問題的分析上面,這樣就偏離了正確的方向,解決問題的效率和成功率就會(huì)大大降低。我們強(qiáng)調(diào)理論的重要性,也不是片面強(qiáng)調(diào)理論而不重視實(shí)踐。Oracle數(shù)據(jù)庫是實(shí)踐性很強(qiáng)的,沒有實(shí)踐,光學(xué)習(xí)理論是無法成為真正的高手的。比如說我們學(xué)習(xí)了很多OWI相關(guān)的理論,了解了數(shù)據(jù)庫等待事件和一些狀態(tài)指標(biāo)的含義,但是我們看到一個(gè)庫的AWR報(bào)告的時(shí)候,還是無法知道某個(gè)指標(biāo)是否正常。當(dāng)對(duì)大型OLTP系統(tǒng)缺乏實(shí)踐經(jīng)驗(yàn)的時(shí)候,我們就無法知道大型OLTP系統(tǒng)的一些技術(shù)指標(biāo)的特性,因此也很難從中找到疑點(diǎn),進(jìn)而找到解決問題的方法。這些年里我接觸過大量的DBA,我一般把他們分為四大類。第一類DBA是經(jīng)驗(yàn)型的,處理問題的主要方式取決于以往的經(jīng)驗(yàn),他們往往都有很好的習(xí)慣,會(huì)把每一個(gè)處理過的案例整理出來,今后再碰到這類案例的時(shí)候,他們會(huì)很快地解決問題。隨著工作時(shí)間的增長(zhǎng),他們的技術(shù)也會(huì)相應(yīng)地提高。第二類DBA是理論型的,他們具有很深的理論基礎(chǔ),經(jīng)常探討一些“Oracle Internal Only”的高深問題,比如他們能夠很清晰地告訴你共享池分配的算法,告訴你checkpoint的工作原理,但是這些DBA往往缺乏實(shí)際的工作經(jīng)驗(yàn),他們研究Oracle卻很少有機(jī)會(huì)接觸大型的數(shù)據(jù)庫系統(tǒng),因此實(shí)際解決問題的能力并不強(qiáng)。另外,由于他們的知識(shí)比較片面,在某些方面很深入,而某些方面就是淺嘗輒止,這種不均衡導(dǎo)致他們的知識(shí)只是以點(diǎn)的形式存在,無法串成整體,因此那些很深入的研究并不能給他們實(shí)際工作帶來多大的幫助。第三類DBA是技巧型的,他們并不注重理論的學(xué)習(xí)和經(jīng)驗(yàn)的積累,在處理問題的時(shí)候往往能夠利用Metalink和谷歌、百度之類的工具去搜索解決方案,這類DBA最為常見。他們處理問題往往靠運(yùn)氣,而且一些他們自鳴得意的成功案例往往也是經(jīng)不起推敲的,下回碰到類似案例時(shí),可能還會(huì)失敗。第四類DBA是虛心請(qǐng)教型的,他們無論碰到什么問題,甚至連錯(cuò)誤信息都沒有看明白,就開始叫“我的系統(tǒng)出問題了”,然后到處去問如何解決。實(shí)際上,這四類DBA都是有缺陷的。第一類DBA可能經(jīng)過多年的工作,有十分豐富的經(jīng)驗(yàn),處理問題的能力很強(qiáng),而且分析問題十分敏感,很容易抓到問題的關(guān)鍵,但是由于沒有深入理解Oracle的理論,碰到一些較為深入的問題的時(shí)候,就不容易立刻找到關(guān)鍵。雖然憑借著自身豐富的經(jīng)驗(yàn)和問題分析排查能力,他們最終也能解決大部分的問題,但是往往問題解決后還是沒有真正弄明白為什么會(huì)解決問題,下一次碰到類似的問題,可能還是要花很大的代價(jià)。第二類DBA在某些方面的理論知識(shí)很強(qiáng),總是喜歡研究一些十分高深的原理性的東西,但是這類DBA的主要精力都放在了研究一些Oracle內(nèi)部原理上了,他們沒有很多的時(shí)間去實(shí)踐他們學(xué)到的理論。這類DBA往往知識(shí)面較為狹窄,僅精通于自己研究比較深入的領(lǐng)域,在實(shí)際工作中也很難發(fā)揮出自身的理論研究特長(zhǎng)。第三類DBA實(shí)際上在我們的現(xiàn)實(shí)生活中是最常見的,“萬事不明問百度,百度不明就抓瞎”,確實(shí)谷歌、百度和Metalink能夠幫助我們解決不少問題,但是這類DBA往往在問題解決后沒有好好思考一下,為什么這個(gè)方法能夠解決問題,更沒有認(rèn)真總結(jié)和歸納一下,下一次碰到類似的問題,還是無法依靠自己的思考去解決問題。于是再Google一把,也許這一次運(yùn)氣沒有那么好了,Google出來的資料不是上回的那個(gè)了,于是結(jié)果可能是很悲慘的。第四類DBA在我們現(xiàn)實(shí)生活中也經(jīng)常出現(xiàn),網(wǎng)絡(luò)社會(huì)通信十分發(fā)達(dá),打個(gè)電話或者在qq群里、msn里問問,也許就有人幫忙解決問題。久而久之,這些人放棄了自己的思考,碰到一點(diǎn)點(diǎn)小問題都要找人問。缺乏獨(dú)立思考問題能力的DBA,只能稱為一個(gè)數(shù)據(jù)庫操作員,實(shí)際上離真正的DBA還有十萬八千里呢??吹竭@里,大家可能明白了,老白實(shí)際上說的不是四類DBA,而是DBA的四種性格,這四種性格可能會(huì)集中在某一個(gè)人身上。以老白學(xué)習(xí)DBA的經(jīng)驗(yàn)來看,理論結(jié)合實(shí)踐是十分重要的。在2000年前,老白雖然做了很多項(xiàng)目,也是很多人眼里的Oracle數(shù)據(jù)庫高手,但那時(shí)的老白就是第一類DBA的典型,沒有經(jīng)過多少理論學(xué)習(xí),幾乎所有的Oracle數(shù)據(jù)庫的技能都是從實(shí)踐中獲得的。雖然在實(shí)踐中我總結(jié)出大量的經(jīng)驗(yàn),甚至有很多客戶建議我寫一本書,把我對(duì)Oracle的理解寫出來,不過當(dāng)我自信滿滿地開始寫書的時(shí)候,卻突然發(fā)現(xiàn),我的一些知識(shí)需要進(jìn)行確認(rèn),否則寫出來就貽笑大方了。于是我開始大量地學(xué)習(xí)Oracle的一些理論知識(shí),隨著寫書過程的深入,我越發(fā)感到自身理論水平的不足。《Oracle數(shù)據(jù)庫深度歷險(xiǎn)》這本書我寫了3年,實(shí)際上2002年就徹底放棄了出版這本書的念頭,因?yàn)槲野l(fā)現(xiàn)自己的理論知識(shí)確實(shí)還需要進(jìn)一步的梳理。但是我并沒有放棄寫作,因?yàn)槲野l(fā)現(xiàn)通過寫作,我更為系統(tǒng)地將Oracle的理論知識(shí)梳理了一遍,這次梳理是通過我以前的知識(shí)體系、工作經(jīng)驗(yàn),與Oracle Concepts的理論基礎(chǔ)進(jìn)行了一次完整的整合。通過這3年的寫作,我終于完全疏通了自己的Oracle的理論體系,好像一個(gè)練武術(shù)的人,終于打通了任督二脈,感到無比的暢快。聽老白說了這么一大通,是不是很多人都感覺到手腳發(fā)涼,難道成為一個(gè)合格的DBA有這么難嗎?如果我沒有打通任督二脈,就不算一個(gè)合格的DBA嗎?實(shí)際上DBA成長(zhǎng)的道路是很多的,并不一定要走老白這一條路,老白僅僅是根據(jù)自身的經(jīng)歷,通過這本書來幫助大家梳理Oracle的一些基礎(chǔ)知識(shí)而已。還是那句話,如果Oracle是你的愛好,那么你無論花多大代價(jià)去研究它都是值得的;如果Oracle只是你職場(chǎng)生涯中的一份工作而已,那么只要你認(rèn)真對(duì)待它就可以了,沒必要像老白那樣執(zhí)著。作為一個(gè)DBA,理論學(xué)習(xí)和實(shí)踐如何相結(jié)合是十分關(guān)鍵的。在初期,一般來說DBA都是通過了某種途徑接觸了Oracle數(shù)據(jù)庫,進(jìn)行了一系列的操作。在工作過程中發(fā)現(xiàn)了一些問題,才開始想到需要去看一些Oracle的書籍。在這個(gè)階段,Oracle官方文檔的2days、7 days系列入門書籍就十分有效。通過這些書籍你可以了解Oracle的一些基本的原理和基本的操作,幫你在工作中解決部分問題。這樣你在工作中就能夠應(yīng)對(duì)一些簡(jiǎn)單的問題了。不過碰到稍微復(fù)雜一些的情況,你可能還是會(huì)發(fā)懵,這時(shí),Oracle Concepts這本書就十分關(guān)鍵了。從這個(gè)階段開始看這本書是十分必要的,它有助于你在積累經(jīng)驗(yàn)的過程中不斷地完善理論。不過,你可能還無法完全理解Oracle Concepts中的基本概念,通讀這本書是十分必要的,但是不必要把每個(gè)問題都搞得十分清楚。因?yàn)橐_(dá)到這一點(diǎn),你需要花費(fèi)太多的時(shí)間和精力,同時(shí)也可能會(huì)由于缺乏足夠的技術(shù)指導(dǎo)而無法真正理解問題的本質(zhì)。不過在這個(gè)階段,碰到某些問題或者研究各種案例的時(shí)候,經(jīng)常翻翻Oracle Concepts這本書是十分有益的,因?yàn)樵谔幚韱栴}的時(shí)候,你針對(duì)這個(gè)問題的思考會(huì)比較深入,這個(gè)時(shí)候,認(rèn)真分析一下相關(guān)的理論是十分有效的。對(duì)于處理過的每一件事情,都做一個(gè)比較詳細(xì)的記錄,是十分好的習(xí)慣。記錄下某個(gè)案例,可以供水平提高后再進(jìn)行回顧,或者將案例提交給某個(gè)專家去評(píng)審,或者在網(wǎng)上和大家一起討論,對(duì)于學(xué)習(xí)Oracle的原理都是十分好的方法,可以幫助你在分析案例時(shí)提高對(duì)Oracle數(shù)據(jù)庫原理的認(rèn)知。在這本書里,老白會(huì)把《Oracle數(shù)據(jù)庫深度歷險(xiǎn)》中的一些內(nèi)容,結(jié)合老白的實(shí)際工作經(jīng)驗(yàn)展現(xiàn)給大家。我會(huì)剖析原理,并結(jié)合案例來說明這些理論知識(shí)如何在實(shí)踐中應(yīng)用。希望老白的這次寫作經(jīng)歷,能夠給大家?guī)硪恍椭?/pre>內(nèi)容概要
數(shù)據(jù)庫的性能優(yōu)化一直是DBA日常工作中非常重要的組成部分,然而很多DBA在學(xué)習(xí)了大量技術(shù),參加了大量培訓(xùn)后,仍然會(huì)在實(shí)際工作中遇到難以下手的問題。實(shí)際上,在數(shù)據(jù)庫優(yōu)化工作中,方法和思路遠(yuǎn)比技術(shù)實(shí)現(xiàn)重要得多。
本書重在介紹Oracle數(shù)據(jù)庫的性能調(diào)優(yōu)方法及相應(yīng)的工作思路,但并不拘泥于技術(shù)細(xì)節(jié)。作者通過大量真實(shí)案例,深度剖析了相關(guān)技術(shù)原理,同時(shí)還闡述了理論知識(shí)在實(shí)踐中的應(yīng)用方法。優(yōu)化工作的本質(zhì)其實(shí)就是透過表象探尋根源,解決問題實(shí)現(xiàn)調(diào)優(yōu),正所謂“思路是道,操作方法是技”,得道是極大的提升,也是DBA的思想精髓。作者簡(jiǎn)介
白鱔
Oracle
ACE。從事IT工作20年,曾供職于DEC、賽格計(jì)算機(jī)、長(zhǎng)天集團(tuán)、聯(lián)想金融事業(yè)部等,擔(dān)任過技術(shù)總監(jiān)、應(yīng)用體系總監(jiān)等技術(shù)職務(wù)。長(zhǎng)期從事應(yīng)用軟件開發(fā)、設(shè)計(jì)與性能優(yōu)化工作,1996年主持設(shè)計(jì)了國(guó)內(nèi)首套電信級(jí)長(zhǎng)話聯(lián)機(jī)實(shí)時(shí)計(jì)費(fèi)系統(tǒng),榮獲福建省科技進(jìn)步三等獎(jiǎng);1998年主持設(shè)計(jì)了首套三檢合一的檢驗(yàn)檢疫綜合管理系統(tǒng),榮獲深圳市科技進(jìn)步三等獎(jiǎng)。2002年起從事專業(yè)IT運(yùn)維與技術(shù)支撐服務(wù)工作,在系統(tǒng)優(yōu)化領(lǐng)域有十分豐富的工作經(jīng)驗(yàn),參與過數(shù)十個(gè)大型優(yōu)化項(xiàng)目。著有《Oracle
優(yōu)化日記》、《Oracle RAC日記》等技術(shù)書籍。
儲(chǔ)學(xué)榮
1992年畢業(yè)于南京大學(xué)計(jì)算機(jī)系,曾供職于得實(shí)集團(tuán)、長(zhǎng)天集團(tuán)、聯(lián)想集團(tuán)等知名IT企業(yè),擔(dān)任程序員、軟件架構(gòu)師等職務(wù)。從事過電信、金融、政府等行業(yè)核心系統(tǒng)研發(fā)工作,參與過UNIX內(nèi)核開發(fā)工作并獨(dú)立開發(fā)了類自然語言的電信計(jì)費(fèi)專用語言ABC的編譯器和P代碼運(yùn)行虛擬機(jī)。2005年開始專門從事IT咨詢與性能優(yōu)化工作,在Oracle數(shù)據(jù)庫性能優(yōu)化方面有很深的造詣,并對(duì)Oracle數(shù)據(jù)庫的內(nèi)部結(jié)構(gòu)有較深的研究,編寫有大量的數(shù)據(jù)拯救工具。書籍目錄
目 錄
第一部分 基礎(chǔ)原理篇
第1章 理解Oracle數(shù)據(jù)庫和實(shí)例
1.1 什么是Oracle數(shù)據(jù)庫
1.2 Oracle數(shù)據(jù)庫的物理結(jié)構(gòu)
1.2.1 Inventory
1.2.2 口令文件
1.2.3 參數(shù)文件
1.2.4 控制文件
1.2.5 在線日志文件
1.2.6 數(shù)據(jù)文件
1.2.7 歸檔日志文件
1.3 實(shí)例和多實(shí)例數(shù)據(jù)庫
1.3.1 什么是數(shù)據(jù)庫實(shí)例
1.3.2 多實(shí)例數(shù)據(jù)庫
1.4 數(shù)據(jù)庫后臺(tái)進(jìn)程
1.4.1 進(jìn)程結(jié)構(gòu)
1.4.2 后臺(tái)進(jìn)程的功能作介紹
1.4.3 哪些后臺(tái)進(jìn)程可以殺
1.4.4 是誰在執(zhí)行SQL
第2章 理解DB Cache
2.1 什么是DB Cache
2.2 DB Cache的分配和DBWR的相關(guān)算法
2.2.1 DB_WRITER_PROCESSES參數(shù)
2.2.2 DB Cache的幾個(gè)主要的鏈和CKPT算法
2.2.3 檢索某個(gè)DB BLOCK的模擬算法
2.3 DB Cache相關(guān)的參數(shù)閂鎖和等待事件
2.4 DB Cache優(yōu)化的一些探討
2.4.1 DB Cache和熱塊沖突
2.4.2 使用KEEP POOL能改善CBC爭(zhēng)用嗎
2.4.3 如何判斷DB Cache是否足夠
2.4.4 DB Cache優(yōu)化要點(diǎn)
第3章 理解共享池
3.1 共享池堆的內(nèi)部結(jié)構(gòu)
3.1.1 進(jìn)一步了解共享池
3.1.2 共享池的子池技術(shù)
3.1.3 字典緩存
3.1.4 庫緩存和游標(biāo)
3.2 共享池和游標(biāo)
3.2.1 游標(biāo)與游標(biāo)共享
3.2.2 游標(biāo)與SQL的執(zhí)行
3.2.3 游標(biāo)共享和綁定變量
3.2.4 OPEN CURSOR和OPEN_CURSORS參數(shù)
3.2.5 CURSOR_SPACE_FOR_TIME參數(shù)
3.2.6 SESSION_CACHED_CURSORS參數(shù)和OPEN_CURSORS
3.2.7 CURSOR_SHARING和游標(biāo)共享
3.2.8 游標(biāo)的關(guān)閉
3.2.9 互斥鎖和游標(biāo)
3.3 共享池的相關(guān)參數(shù)
3.4 共享池故障處理
3.4.1 著名的ORA-4031
3.4.2 其他共享池常見故障
3.5 共享池優(yōu)化的主要思路
第4章 理解控制文件
4.1 控制文件的內(nèi)部結(jié)構(gòu)
4.1.1 控制文件和控制文件事務(wù)
4.1.2 控制文件自動(dòng)擴(kuò)展
4.1.3 如何轉(zhuǎn)儲(chǔ)和分析控制文件
4.1.4 文件頭和控制文件信息
4.2 故障處理和優(yōu)化
4.2.1 丟失或者損壞控制文件的處理方法
4.2.2 控制文件的優(yōu)化
第5章 理解REDO日志
5.1 什么是REDO日志
5.2 REDO的基本原理
5.2.1 介質(zhì)恢復(fù)和實(shí)例恢復(fù)的基本概念
5.2.2 變化矢量和REDO記錄
5.2.3 日志緩沖和LGWR
5.2.4 日志切換和REDO日志文件
5.2.5 事務(wù)提交和回滾的過程
5.3 REDO優(yōu)化
5.3.1 BULK操作能減少REDO嗎
5.3.2 如何優(yōu)化LOG FILE SYNC等待事件
5.3.3 SHUTDOWN ABORT無害嗎
5.3.4 關(guān)于REDO日志優(yōu)化的建議
第6章 理解UNDO
6.1 UNDO的基本原理
6.1.1 UNDO表空間和回滾段
6.1.2 ITL和UNDO
6.1.3 如何轉(zhuǎn)儲(chǔ)UNDO
6.1.4 UNDO自動(dòng)管理是如何工作的
6.1.5 系統(tǒng)回滾段的作用
6.1.6 著名的ORA-1555
6.1.7 回滾段手工管理
6.2 如何分析和優(yōu)化UNDO
第7章 理解PGA、臨時(shí)表空間和排序
7.1 基本概念
7.1.1 臨時(shí)表空間和臨時(shí)段
7.1.2 PGA和排序
7.1.3 PGA和PGA_AGGREGATE_ TARGET
7.1.4 你應(yīng)該知道的PGA自動(dòng)管理內(nèi)幕
7.2 PGA優(yōu)化的要點(diǎn)
第8章 理解ASM的結(jié)構(gòu)
8.1 什么是ASM
8.2 ASM的結(jié)構(gòu)
8.2.1 ASM DISKHEADER的結(jié)構(gòu)
8.2.2 ASM FILE DIRECTORY文件結(jié)構(gòu)
8.2.3 ASM ALIAS DIRECTORY文件結(jié)構(gòu)
8.2.4 ASM DISK DIRECTORY文件結(jié)構(gòu)
8.2.5 從ASM存儲(chǔ)結(jié)構(gòu)談ASM日常維護(hù)的要點(diǎn)
8.3 如何使用KFED分析和修改ASM數(shù)據(jù)
8.4 如何使用AMDU導(dǎo)出ASM文件
第9章 理解數(shù)據(jù)塊結(jié)構(gòu)
9.1 理解數(shù)據(jù)塊頭結(jié)構(gòu)
9.2 理解ITL
9.3 理解記錄結(jié)構(gòu)
9.4 解析Oracle字段的內(nèi)部數(shù)據(jù)存儲(chǔ)格式
9.5 理解LOB的存儲(chǔ)結(jié)構(gòu)
第10章 理解表的結(jié)構(gòu)
10.1 到底什么是“表”
10.1.1 PCTFREE和行鏈
10.1.2 那些逝去的老參數(shù)
10.1.3 減少熱塊沖突的方法
10.2 從數(shù)據(jù)塊結(jié)構(gòu)看目前主流容災(zāi)技術(shù)
10.3 案例——簡(jiǎn)單任務(wù)
第11章 理解索引
11.1 反轉(zhuǎn)鍵索引的誤區(qū)
11.2 索引訪問的方式
11.2.1 小表用索引有意義嗎
11.2.2 位圖索引為什么不適合大并發(fā)量環(huán)境
11.3 重建索引的作用
11.4 索引使用的“三大紀(jì)律八項(xiàng)注意”
11.5 案例——索引危機(jī)
第12章 理解分區(qū)表
12.1 什么是分區(qū)表
12.2 分區(qū)表對(duì)海量數(shù)據(jù)的意義
12.2.1 分區(qū)表和歷史數(shù)據(jù)歸檔
12.2.2 分區(qū)表和高水位推進(jìn)
12.2.3 分區(qū)表和RAC環(huán)境
12.2.4 分區(qū)主鍵和分區(qū)粒度的選擇
第13章 理解序列
13.1 什么是序列
13.2 序列的使用和優(yōu)化
第二部分 分析思路篇
第14章 問題分析綜述
14.1 如何抓住蝴蝶效應(yīng)中的那只蝴蝶
14.2 為什么要強(qiáng)調(diào)基礎(chǔ)概念
14.3 工作中的好習(xí)慣帶來的福利
第15章 DBA分析思路的探討
15.1 問題分析總路線圖
15.2 普通故障的分析路線
15.3 性能問題的分析路線
15.4 SQL語句的分析路線
15.5 利用你知道的原理縮小問題的范圍
15.6 關(guān)閉問題的條件
15.7 靈活運(yùn)用你的知識(shí)
15.8 DBA需要與時(shí)俱進(jìn)
15.9 多表連接的優(yōu)化技巧
15.10 理論如何聯(lián)系實(shí)踐
第三部分 典型案例篇
第16章 RAC故障分析
16.1 LOG_ARCHIVE_MAX_PROCESS導(dǎo)致的RAC腦裂
16.2 RAC系統(tǒng)故障的處理過程
16.3 三天兩次嚴(yán)重故障
第17章 ORA-600故障
17.1 ORA-600 [12700]錯(cuò)誤的分析過程
17.2 ORA-600 [kdsgrp1]的處理案例
第18章 性能問題分析
18.1 壓力測(cè)試遇到的問題
18.2 IMP導(dǎo)入性能問題的分析
18.3 并行操作為什么無法執(zhí)行
第19章 SQL優(yōu)化
19.1 一個(gè)常用的SQL優(yōu)化方法
19.2 一個(gè)查找IP所屬區(qū)域的SQL優(yōu)化思路
結(jié)束語章節(jié)摘錄
版權(quán)頁: 插圖: 對(duì)于單實(shí)例的系統(tǒng),實(shí)例恢復(fù)一般是在數(shù)據(jù)庫實(shí)例異常故障后數(shù)據(jù)庫重啟時(shí)進(jìn)行,當(dāng)數(shù)據(jù)庫執(zhí)行了SHUTDOWN ABORT命令或者由于操作系統(tǒng)、主機(jī)等原因宕機(jī)重啟后,在ALTER DATABASE OPEN時(shí),就會(huì)自動(dòng)進(jìn)行實(shí)例恢復(fù)。而在。RAC環(huán)境中,如果某個(gè)實(shí)例宕掉了,活著的實(shí)例將會(huì)接管,替宕掉的實(shí)例做實(shí)例恢復(fù)。除非是所有的實(shí)例都宕掉了,這樣的話,第一個(gè)執(zhí)行ALTER DATABASE OPEN的實(shí)例將會(huì)做實(shí)例恢復(fù)。這也是REDO日志文件作為實(shí)例私有的組件必須存放在共享存儲(chǔ)上的原因。 Oracle數(shù)據(jù)庫的高速緩存機(jī)制是以性能為導(dǎo)向的。高速緩存機(jī)制應(yīng)該最大限度地提高數(shù)據(jù)庫的性能,因此緩存被寫人數(shù)據(jù)文件時(shí)總是盡可能推遲。這種機(jī)制大大提高了數(shù)據(jù)庫的性能,但是當(dāng)實(shí)例出現(xiàn)故障時(shí),可能存在一些問題。 首先,可能某些事物對(duì)數(shù)據(jù)文件的修改并沒有完全寫入磁盤,或者磁盤文件中丟失了某些已提交事務(wù)對(duì)數(shù)據(jù)文件的修改信息。其次,可能某些還沒有提交的事務(wù)對(duì)數(shù)據(jù)文件的修改已經(jīng)被寫入磁盤文件了。也有可能某個(gè)原子變更有一部分?jǐn)?shù)據(jù)已經(jīng)被寫人文件,而另外一部分?jǐn)?shù)據(jù)還沒有被寫入磁盤文件。實(shí)例恢復(fù)就是要通過ONLINE REDO LOG文件中記錄的信息,自動(dòng)完成上述數(shù)據(jù)的修復(fù)工作。這個(gè)過程是完全自動(dòng)的,不需要人工干預(yù)。 在這個(gè)機(jī)制里,有兩個(gè)問題需要解決。第一個(gè)是如何確保已經(jīng)提交的事務(wù)不會(huì)丟失,第二個(gè)是如何在數(shù)據(jù)庫性能和實(shí)例恢復(fù)所需要的時(shí)間上做出平衡,既確保數(shù)據(jù)庫性能不會(huì)下降,又保證實(shí)例恢復(fù)可以快速進(jìn)行。編輯推薦
Oracle資深專家白鱔、儲(chǔ)學(xué)榮聯(lián)袂打造數(shù)據(jù)庫力作以真實(shí)的案例貫穿《DBA的思想天空——感悟Oracle數(shù)據(jù)庫本質(zhì)》全書,剖析數(shù)據(jù)庫技術(shù)原理帶領(lǐng)讀者感悟DBA思想精粹,揭示原理,但不是簡(jiǎn)單地炫耀內(nèi)部原理,而是結(jié)合內(nèi)部原理讓DBA理解分析思路。圖書封面
圖書標(biāo)簽Tags
無評(píng)論、評(píng)分、閱讀與下載
- 還沒讀過(98)
- 勉強(qiáng)可看(714)
- 一般般(121)
- 內(nèi)容豐富(5057)
- 強(qiáng)力推薦(414)