出版時(shí)間:2012-11 出版社:人民郵電出版社 作者:[美] John Beresniewicz,[英] Adrian Billington,[瑞士] Martin Büchi,[美] Melanie Caffrey,[美] Ron Crisco,[美] Cunningham,[美] Dominic Delmolino,[印度] Sue Harper,[丹] Torben Holm,[美] Connor McDonald,[美] Arup Nanda,[瑞士] Stephan Petit,[烏克蘭] Michael Rosenblum,[美] Robyn S 頁(yè)數(shù):166 字?jǐn)?shù):650000 譯者:盧 濤
Tag標(biāo)簽:無(wú)
前言
序作為圖書(shū)編輯,我一般滿足于在幕后做好自己的編輯工作,很少站到前臺(tái)來(lái)為我負(fù)責(zé)編輯的圖書(shū)作序。但是,這次我卻破例了。因?yàn)槲乙苍鲞^(guò)開(kāi)發(fā),這本書(shū)的內(nèi)容勾起了我的很多回憶。本書(shū)旨在教你如何有效地使用PL/SQL。它不是描述語(yǔ)法的書(shū),而是介紹如何把語(yǔ)法及其特性與良好的開(kāi)發(fā)實(shí)踐相結(jié)合,創(chuàng)建更具有可靠性、可擴(kuò)展性的應(yīng)用,并使之具備長(zhǎng)期可維護(hù)性。不管使用什么工具,首先需要明白的是在什么情況下使用它比較合適。在本書(shū)的開(kāi)篇章節(jié)“避免誤用”中,Riyaj Shamsudeen巧妙地回答了何時(shí)使用PL/SQL這一問(wèn)題。我把這一章放在本書(shū)的開(kāi)始,也是因?yàn)槲覀€(gè)人的經(jīng)歷:那是在20世紀(jì)90年代末,我進(jìn)行了最成功的一次性能優(yōu)化,那次我把客戶端PC上的一堆過(guò)程代碼改寫為一個(gè)SQL語(yǔ)句以后,一個(gè)作業(yè)的運(yùn)行時(shí)間從超過(guò)36小時(shí)縮短到僅僅幾分鐘。雖然PL/SQL不是導(dǎo)致性能問(wèn)題的罪魁禍?zhǔn)?,但是我得到了一條經(jīng)驗(yàn)——基于集合的方法(如果有可能)通常優(yōu)于過(guò)程性代碼。Michael Rosenblum緊接著寫了動(dòng)態(tài)SQL那一章,其內(nèi)容相當(dāng)精彩。他說(shuō)明了如果只有到最終運(yùn)行時(shí)才知道所要運(yùn)行的SQL語(yǔ)句到底是什么,那么該如何編寫代碼。這使我想起20世紀(jì)90年代初的一段經(jīng)歷,那時(shí)我在陶氏化學(xué)公司利用Rdb的擴(kuò)展動(dòng)態(tài)游標(biāo)功能集,為一個(gè)醫(yī)療記錄系統(tǒng)寫數(shù)據(jù)裝載應(yīng)用程序。我感覺(jué)那是我開(kāi)發(fā)過(guò)的最有趣的應(yīng)用程序之一。Dominic Delmolino介紹了用PL/SQL 進(jìn)行并行處理的方法,以及這樣能獲得的益處和產(chǎn)生的額外負(fù)擔(dān)。謹(jǐn)小慎微,永不為過(guò)!我在當(dāng)數(shù)據(jù)庫(kù)管理員時(shí)犯下的最大錯(cuò)誤之一就是,有一次頭腦一熱,在一個(gè)關(guān)鍵的應(yīng)用表上設(shè)置了一個(gè)并行度,其目的是為了想讓其中的一個(gè)報(bào)表程序運(yùn)行得更快??墒牵屡c愿違。好像鍵盤上的回車鍵連著我的電話似的,修改后大約不到一分鐘,我的電話鈴就響了,電話線另一端的主管對(duì)我的修改非常不滿。無(wú)須多言,從此我就決定在實(shí)施并行前一定要深思熟慮。Dominic寫的那章可以幫助我們避免陷入這樣的窘境。本書(shū)的多章內(nèi)容涵蓋了代碼規(guī)范和極其實(shí)用的編程經(jīng)驗(yàn)。Stephan Petit向我們介紹了一套實(shí)用的命名和編碼規(guī)范。Torben Holm講述了PL/SQL警告和條件編譯。Lewis Cunningham闡述了代碼分析,使我們認(rèn)識(shí)到真正理解自己所寫的代碼及其工作原理的重要性,發(fā)人深思。Robyn Sands的“漸進(jìn)式數(shù)據(jù)建?!币徽拢钗覀儗?duì)漸進(jìn)式數(shù)據(jù)模型的良好設(shè)計(jì)及靈活性有了更多的思考。Melanie Caffrey介紹了經(jīng)常使用的各種游標(biāo)類型,幫助我們?cè)诓煌瑮l件下正確地選擇游標(biāo)。其他章節(jié)介紹如何進(jìn)行調(diào)試和故障排除。Sue Harper介紹了PL/SQL單元測(cè)試,特別是一些如今已經(jīng)集成在SQL Developer中的功能集(這使我想起了在紙上寫單元測(cè)試腳本的日子),它可以幫助避免犯回歸錯(cuò)誤。利用自動(dòng)化單元測(cè)試,能夠容易且方便地驗(yàn)證程序,以確保自己不會(huì)在修復(fù)一個(gè)錯(cuò)誤的同時(shí)制造了更多的錯(cuò)誤。還有John Beresniewicz介紹“合同導(dǎo)向編程”那一章。John給出的方法的一個(gè)關(guān)鍵部分是,在代碼的各種特定地方使用斷言來(lái)驗(yàn)證條件。記得我首次了解斷言技術(shù)是在做PowerBuilder編程時(shí),那已經(jīng)是很久很久以前的事了。我很高興看到John把這項(xiàng)技術(shù)和PL/SQL聯(lián)系起來(lái),將其發(fā)揚(yáng)光大。Arup Nanda的論述能夠幫助我們控制依存和失效問(wèn)題。依存問(wèn)題可能會(huì)導(dǎo)致發(fā)生類似隨機(jī)的、難以重現(xiàn)的應(yīng)用程序錯(cuò)誤。Arup展示了如何完全掌控那些必將發(fā)生的事情,這樣你才不會(huì)落入意外錯(cuò)誤的陷阱。一般情況下,我們不得不考慮性能和擴(kuò)展性。Ron Crisco告訴我們通過(guò)剖析代碼,找到盡可能優(yōu)化代碼的方法。Adrian Billington討論了從SQL語(yǔ)句中調(diào)用PL/SQL的性能問(wèn)題。Connor McDonald論述了批量SQL操作驚人的性能優(yōu)勢(shì)。關(guān)于可擴(kuò)展性,通常會(huì)被遺漏的一面是應(yīng)用程序的規(guī)模和參與開(kāi)發(fā)的人數(shù)。PL/SQL是否適合數(shù)十到數(shù)百位程序員的大規(guī)模開(kāi)發(fā)?Martin Büchi在“大規(guī)模PL/SQL開(kāi)發(fā)”那章,描述了他在管理由170多位開(kāi)發(fā)者維護(hù)的具有1100萬(wàn)行代碼的應(yīng)用中的成功經(jīng)驗(yàn),說(shuō)明了PL/SQL是非常適合于這種任務(wù)的。不難看出我為這本書(shū)感到興奮。作者都是頂級(jí)專家,分別介紹了自己熱衷的并且特別在行的PL/SQL的某個(gè)方面。如果你已經(jīng)學(xué)習(xí)了語(yǔ)法,那么坐下來(lái)讀一讀這本書(shū),充分利用PL/SQL和Oracle數(shù)據(jù)庫(kù)的強(qiáng)大功能,投身到開(kāi)發(fā)應(yīng)用程序的事業(yè)中來(lái)吧!Jonathan GennickApress編輯主任助理
內(nèi)容概要
本書(shū)由15位知名技術(shù)專家聯(lián)手打造,每位作者分別用一章的篇幅介紹他們最擅長(zhǎng)的PL/SQL相關(guān)主題,涵蓋了PL/SQL開(kāi)發(fā)的方方面面。本書(shū)作者要么是Oracle社區(qū)中堅(jiān)分子,要么是大名鼎鼎的OakTable成員,而且經(jīng)?;钴S在Oracle技術(shù)培訓(xùn)第一線,對(duì)PL/SQL均有著深入透徹的理解,對(duì)解釋復(fù)雜問(wèn)題有著簡(jiǎn)單獨(dú)到的方法。一冊(cè)在手,眾多PL/SQL牛人的真知灼見(jiàn)盡收眼底,你還等什么?
本書(shū)著重介紹了PL/SQL最新、最實(shí)用的特性,從什么該做和什么不該做、怎么做對(duì),以及怎么做更有效率、效果更好等三個(gè)部分全面闡釋了PL/SQL相關(guān)的各個(gè)主題。而且,每一章都配有非常貼切的示例代碼、跟蹤圖以及輸出結(jié)果,輔以深入淺出的講解,令人在恍然大悟之后不禁拍案叫絕。各章內(nèi)容均涵蓋了PL/SQL實(shí)際開(kāi)發(fā)中的最佳實(shí)踐,反映了作者多年積累的經(jīng)驗(yàn)和教訓(xùn),其價(jià)值非同一般。
本書(shū)適合具有一定PL/SQL經(jīng)驗(yàn)的讀者學(xué)習(xí)參考。
作者簡(jiǎn)介
John Beresniewicz(約翰?貝雷斯尼維奇)是位于加州紅木城紅木岸(Redwood
Shores)的Oracle總部技術(shù)團(tuán)隊(duì)的一名咨詢顧問(wèn)。他于2002年加入Oracle,負(fù)責(zé)企業(yè)管理器的數(shù)據(jù)庫(kù)性能領(lǐng)域,他對(duì)診斷和調(diào)優(yōu)包、實(shí)時(shí)應(yīng)用測(cè)試、支持工作臺(tái)和Exadata的設(shè)計(jì)作出了重要貢獻(xiàn)。多年以來(lái),他經(jīng)常在Oracle全球大會(huì)和其他會(huì)議上發(fā)言,發(fā)言主題包括數(shù)據(jù)庫(kù)性能和PL/SQL編程。他與Steven
Fellerstein合著了Oracle Built-in
Packages(O’Reilly&Associates,1998年)一書(shū),并且是OakTable網(wǎng)絡(luò)的創(chuàng)始人之一。
Adrian Billington
(阿德里安?比林頓)是應(yīng)用設(shè)計(jì)、開(kāi)發(fā)和性能調(diào)優(yōu)方面的顧問(wèn)。自1999年以來(lái),一直從事Oracle數(shù)據(jù)庫(kù)方面的工作。他是www.oracle-developer.net網(wǎng)站的發(fā)起人,這個(gè)網(wǎng)站為Oracle開(kāi)發(fā)人員提供各種SQL和PL/SQL功能、實(shí)用工具和技術(shù)。阿德里安還是Oracle
ACE,同時(shí)也是OakTable網(wǎng)絡(luò)的成員?,F(xiàn)在,他與妻子安吉和三個(gè)孩子:格魯吉亞、奧利弗和伊莎貝拉一起居住在英國(guó)。
Martin Büchi
(馬丁?步琪)自2004年以來(lái),任Avaloq公司首席軟件架構(gòu)師。該公司是一個(gè)標(biāo)準(zhǔn)化的銀行軟件供應(yīng)商,其產(chǎn)品基于Oracle
RDBMS構(gòu)建,包含1100萬(wàn)行PL/SQL代碼。他與兩位同事一起設(shè)計(jì)了系統(tǒng)架構(gòu),并評(píng)審了170名全職PL/SQL開(kāi)發(fā)人員的設(shè)計(jì)和代碼,以追求軟件的簡(jiǎn)明、效率和健壯性。馬丁經(jīng)常在Oracle大會(huì)上發(fā)言。2009年,他被Oracle
Magazine評(píng)選為PL/SQL年度開(kāi)發(fā)人員。從事Oracle數(shù)據(jù)庫(kù)工作之前,馬丁曾在面向?qū)ο蟮南到y(tǒng)、形式化方法和近似記錄匹配等領(lǐng)域工作。他擁有瑞士聯(lián)邦技術(shù)研究所的碩士學(xué)位和芬蘭土爾庫(kù)計(jì)算機(jī)科學(xué)中心的博士學(xué)位。業(yè)余時(shí)間,馬丁喜歡與他的家人一起進(jìn)行各種戶外運(yùn)動(dòng)。
Melanie Caffrey
(梅拉妮?卡弗里)是Oracle公司高級(jí)開(kāi)發(fā)經(jīng)理,為不同客戶的業(yè)務(wù)需求提供前端和后端的Oracle解決方案。她是多部技術(shù)出版物的合著者,包括Oracle
Web Application Programming for PL/SQL Developers、Oracle DBA
Interactive Workbook、Oracle Database Administration: The Complete
Video Course等,這些書(shū)全部由Prentice
Hall出版。她在紐約哥倫比亞大學(xué)的計(jì)算機(jī)技術(shù)與應(yīng)用課程中指導(dǎo)學(xué)生,教授先進(jìn)的Oracle數(shù)據(jù)庫(kù)管理和PL/SQL開(kāi)發(fā)。她也經(jīng)常在Oracle會(huì)議上發(fā)言。
Ron
Crisco(羅恩?克里斯科)28年來(lái)分別擔(dān)任軟件設(shè)計(jì)師、開(kāi)發(fā)人員和項(xiàng)目負(fù)責(zé)人,并有21年的Oracle數(shù)據(jù)庫(kù)工作經(jīng)驗(yàn)。他在R方法(Method
R)公司從事軟件設(shè)計(jì)和開(kāi)發(fā)、軟件產(chǎn)品管理(如R方法剖析器、MR工具和MR跟蹤)、咨詢、教授課程等工作。他的特長(zhǎng)是簡(jiǎn)化復(fù)雜的工作,這在幫助他身邊的人完成非凡工作時(shí)尤顯寶貴。
Lewis
Cunningham(劉易斯?坎寧安)在IT領(lǐng)域已經(jīng)工作了20多年。自1993年以來(lái)一直與Oracle數(shù)據(jù)庫(kù)打交道。他的專長(zhǎng)是應(yīng)用程序設(shè)計(jì)、數(shù)據(jù)庫(kù)設(shè)計(jì),以及大容量的VLDB數(shù)據(jù)庫(kù)編碼。目前他任職于佛羅里達(dá)州圣彼得堡的一家金融服務(wù)公司,擔(dān)任高級(jí)數(shù)據(jù)庫(kù)架構(gòu)師,負(fù)責(zé)超大規(guī)模、高事務(wù)率分析型數(shù)據(jù)庫(kù)和應(yīng)用程序的工作。他花了大量時(shí)間來(lái)與最新的技術(shù)和趨勢(shì)保持同步,并在用戶組發(fā)表演講,舉辦網(wǎng)絡(luò)研討會(huì)。劉易斯也是一位Oracle
ACE總監(jiān)和Oracle認(rèn)證專家。他在Oracle技術(shù)網(wǎng)發(fā)表了數(shù)篇文章,并在http://it.toolbox.com/
blogs/oracle-guide維護(hù)一個(gè)Oracle技術(shù)博客。劉易斯寫了兩本書(shū):EnterpriseDB: The
Definitive Reference(Rampant Tech press,2007年)和SQL DML: The SQL
Starter
Series(CreateSpace,2008年)。他與他的妻子及兩個(gè)兒子起住在佛羅里達(dá)州。可以通過(guò)電子郵件lewisc@databasewisdom.com與他聯(lián)系。
Dominic Delmolino
(多米尼克?德莫里諾)是Agilex技術(shù)公司首席Oracle和數(shù)據(jù)庫(kù)技術(shù)專家,這是一家專門協(xié)助政府和私營(yíng)企業(yè)實(shí)現(xiàn)信息價(jià)值的咨詢公司。多米尼克擁有24年以上的數(shù)據(jù)庫(kù)經(jīng)驗(yàn),其中擔(dān)任過(guò)20多年的Oracle數(shù)據(jù)庫(kù)工程和開(kāi)發(fā)專家。他是OakTable網(wǎng)絡(luò)的成員,并定期出席各種學(xué)術(shù)會(huì)議、研討會(huì),以及歐洲和美國(guó)的用戶組會(huì)議。他還維護(hù)www.oraclemusings.com網(wǎng)站,該網(wǎng)站專注于與數(shù)據(jù)庫(kù)應(yīng)用程序開(kāi)發(fā)相關(guān)的數(shù)據(jù)庫(kù)編碼和設(shè)計(jì)實(shí)踐。多米尼克擁有紐約州伊薩卡康奈爾大學(xué)的計(jì)算機(jī)科學(xué)學(xué)士學(xué)位。
Sue Harper (蘇?哈珀)是數(shù)據(jù)庫(kù)開(kāi)發(fā)工具組中的Oracle SQL Developer和SQL
Developer數(shù)據(jù)建模器的產(chǎn)品經(jīng)理。她自1992年以來(lái)一直在Oracle公司工作,目前在倫敦辦事處工作。蘇是一些雜志的特約撰稿人,維護(hù)著一個(gè)技術(shù)博客,并在世界各地的許多會(huì)議上發(fā)言。她撰寫了技術(shù)書(shū)籍Oracle
SQL Developer
2.1(Packt,2009),業(yè)余時(shí)間,蘇喜歡步行和攝影。同時(shí),她還花時(shí)間到新德里的貧民區(qū)做慈善工作,幫助那里的婦女和兒童。
Torben Holm
(托爾?霍爾姆)自1987年以來(lái)一直從事開(kāi)發(fā)工作。自1992年以來(lái),他一直致力于與Oracle相關(guān)的工作,前四年擔(dān)任系統(tǒng)分析師和應(yīng)用程序開(kāi)發(fā)人員(Oracle
7、Forms 4.0/Reports 2.0和DBA),然后做了兩年開(kāi)發(fā)(ORACLE6/7、Forms
3.0和RPT以及DBA)。他在Oracle丹麥公司的高級(jí)服務(wù)組工作了數(shù)年,擔(dān)任首席高級(jí)顧問(wèn),執(zhí)行應(yīng)用程序開(kāi)發(fā)和DBA任務(wù)。他還擔(dān)任過(guò)PL/SQL、SQL和DBA課程的講師?,F(xiàn)在,托爾在Miracle
A/S(www.miracleas.dk)工作,擔(dān)任顧問(wèn),負(fù)責(zé)應(yīng)用開(kāi)發(fā)(PLSQL、mod_plsql、Forms、ADF)和數(shù)據(jù)庫(kù)管理。10年來(lái)他一直在
Miracle A/S公司工作。他是Oracle認(rèn)證開(kāi)發(fā)人員,并且也是OakTable網(wǎng)絡(luò)成員。
Connor McDonald (康納?麥當(dāng)勞)自20世紀(jì)90年代初一直從事Oracle相關(guān)工作,他非常熟悉Oracle
6.0.36和Oracle
7.0.12。在過(guò)去11年中,康納曾為位于西歐、東南亞、澳大利亞、英國(guó)和美國(guó)的公司開(kāi)發(fā)過(guò)系統(tǒng)。他已經(jīng)認(rèn)識(shí)到,雖然世界各地的系統(tǒng)及方法非常多樣,但開(kāi)發(fā)在Oracle上運(yùn)行的系統(tǒng)往往有兩個(gè)共同的問(wèn)題:要么避免使用Oracle特定的功能,要么就是采取不太理想的用法或隨意亂用它們。正是這種觀察,促使他創(chuàng)建了一個(gè)提示和技巧的個(gè)人網(wǎng)站(www.oracledba.co.uk),并努力在Oracle演講者組織中發(fā)表更多演講,以提高PL/SQL的業(yè)內(nèi)認(rèn)知度和普及度。
Arup Nanda (奧雅納?南大)自1993年以來(lái),一直是Oracle
DBA,他熟悉數(shù)據(jù)庫(kù)管理的所有方面,從建模到災(zāi)難恢復(fù)。目前,他在紐約州白原市的喜達(dá)屋酒店(即喜來(lái)登、威斯汀等連鎖酒店的母公司)領(lǐng)導(dǎo)全球DBA團(tuán)隊(duì)。他是獨(dú)立Oracle用戶協(xié)會(huì)(IOUG)旗下出版物SELECT
Journal的特約編輯,在許多Oracle技術(shù)盛會(huì),如Oracle全球和本地用戶組(如紐約Oracle用戶組)中發(fā)表演講,并為印刷出版物如Oracle
Magazine和網(wǎng)絡(luò)出版物如Oracle Techndogy Network撰寫了許多文章。奧雅納與他人合著了兩本書(shū):Oracle
Privacy Security Auditing(Rampant,2003年)和Oracle PL/SQL for
DBAs(O’Reilly,2005年)。由于他的專業(yè)成就和對(duì)用戶社區(qū)的貢獻(xiàn),Oracle評(píng)選他為2003年年度DBA。奧雅納與他的妻子Anindita和兒子阿尼什住在康涅狄格州的丹伯里??梢酝ㄟ^(guò)arup@proligence.com聯(lián)系他。
Stephan Petit
(斯蒂芬?佩蒂特)于1995年在位于瑞士日內(nèi)瓦的歐洲粒子物理實(shí)驗(yàn)室(CERN)開(kāi)始了他的職業(yè)生涯。他現(xiàn)在是一個(gè)軟件工程師和學(xué)生團(tuán)隊(duì)的負(fù)責(zé)人,負(fù)責(zé)為實(shí)驗(yàn)室和其他部門提供應(yīng)用程序和工具。工程和設(shè)備數(shù)據(jù)管理系統(tǒng)是這些工具之一,也稱為CERN
EDMS。像CERN的大型強(qiáng)子對(duì)撞機(jī)(LHC)項(xiàng)目有40年或以上的生命周期。
EDMS是實(shí)驗(yàn)室的數(shù)字化工程的內(nèi)存/記憶體。電子文件管理系統(tǒng)中存儲(chǔ)了與一百多萬(wàn)件設(shè)備有關(guān)的一百多萬(wàn)份文件,EDMS也供CERN的產(chǎn)品生命周期管理(PLM)和資產(chǎn)跟蹤系統(tǒng)使用。
EDMS幾乎完全是基于PL/SQL的,并旨在擁有一個(gè)至少與LHC一樣長(zhǎng)的生命周期。
斯蒂芬和他的團(tuán)隊(duì)一直在完善PL/SQL編碼規(guī)范和最佳實(shí)踐,以滿足他們非常有趣的各種挑戰(zhàn)的組合:幾十年的可維護(hù)性、可靠性、高效的錯(cuò)誤處理、可擴(kuò)展性、模塊的可重用性。團(tuán)隊(duì)成員的頻繁輪換,其中大部分只是暫時(shí)在CERN實(shí)習(xí)的學(xué)生,加劇了這些挑戰(zhàn)。最古老的一段代碼是在1995年寫的,現(xiàn)在仍然在使用——并且成功地運(yùn)行!除了完善PL/SQL,斯蒂芬還喜歡不時(shí)登臺(tái)表演,比如擔(dān)任CERN搖滾夏季音樂(lè)節(jié)的搖滾樂(lè)隊(duì)歌手,以及在多部戲中出演角色。
Michael Rosenblum
(邁克爾?羅森布魯姆)是Dulcian公司的軟件架構(gòu)師/開(kāi)發(fā)DBA,他負(fù)責(zé)系統(tǒng)調(diào)優(yōu)和應(yīng)用程序架構(gòu)。邁克爾通過(guò)編寫復(fù)雜的PL/SQL例程和研究新功能支持Dulcian開(kāi)發(fā)人員。他是PL/SQL
for Dummies(Wiley,2006年)一書(shū)的作者之一,并在IOUG Select Journal和ODTUG Tech
Journal發(fā)表了許多篇與數(shù)據(jù)庫(kù)相關(guān)的文章。邁克爾是一位Oracle
ACE,也經(jīng)常出席不同地區(qū)和國(guó)家的Oracle用戶組大會(huì)(Oracle OpenWorld大會(huì)、ODTUG、IOUG
Collaborate、RMOUG、NYOUG等),他是ODTUG萬(wàn)花筒2009年“最佳演講獎(jiǎng)”得主。在他的家鄉(xiāng)烏克蘭,他獲得了烏克蘭總統(tǒng)獎(jiǎng)學(xué)金,并擁有信息系統(tǒng)理學(xué)碩士學(xué)位并以優(yōu)異成績(jī)獲得基輔國(guó)立經(jīng)濟(jì)大學(xué)畢業(yè)證書(shū)。
Robyn Sands
(羅賓?桑茲)是思科系統(tǒng)公司的軟件工程師,她為思科的客戶設(shè)計(jì)和開(kāi)發(fā)嵌入式Oracle數(shù)據(jù)庫(kù)產(chǎn)品。自1996年以來(lái),她一直使用Oracle軟件,并在應(yīng)用開(kāi)發(fā)、大型系統(tǒng)實(shí)現(xiàn)和性能測(cè)量方面具有豐富經(jīng)驗(yàn)。羅賓的職業(yè)生涯始于工業(yè)工程和質(zhì)量工程,她將自己對(duì)數(shù)據(jù)的摯愛(ài)結(jié)合到以前接受的教育和工作經(jīng)驗(yàn)中,尋找新方法來(lái)建立性能穩(wěn)定、易于維護(hù)的數(shù)據(jù)庫(kù)系統(tǒng)。她是OakTable網(wǎng)絡(luò)成員,并是下面兩本Oracle書(shū)籍的作者之一:Expert
Oracle Practices和Pro Oracle
SQL(都由Apress出版,2010)。羅賓偶爾在http://adhdocddba.
blogspot.com發(fā)表一些博客。
Riyaj
Shamsudeen是OraInternals公司首席數(shù)據(jù)庫(kù)管理員和主席,這是一家從事性能調(diào)優(yōu)/數(shù)據(jù)庫(kù)恢復(fù)/EBS11i等領(lǐng)域的咨詢公司。他專門研究真正的應(yīng)用集群(RAC)、性能調(diào)優(yōu)和數(shù)據(jù)庫(kù)內(nèi)部結(jié)構(gòu)。他還經(jīng)常在其博客http://orainternals.wordpress.com上發(fā)表這些技術(shù)領(lǐng)域的文章。他也經(jīng)常出席許多國(guó)際會(huì)議,如HOTSOS、COLLABORATE、RMOUG、SIOUG、UKOUG等,他是OakTable網(wǎng)絡(luò)的驕傲一員。他擁有16年以上使用Oracle技術(shù)產(chǎn)品的經(jīng)驗(yàn),并擔(dān)任了15年以上的Oracle/Oracle應(yīng)用程序數(shù)據(jù)庫(kù)管理員。
譯者簡(jiǎn)介:
盧濤
1995年參加工作,高級(jí)程序員、系統(tǒng)分析師、高級(jí)工程師。2004年起接觸Oracle數(shù)據(jù)庫(kù),獲得Oracle數(shù)據(jù)庫(kù)管理9i至11g、PL/SQL開(kāi)發(fā)、性能優(yōu)化、RAC管理、數(shù)據(jù)倉(cāng)庫(kù)等多個(gè)OCP、OCE、OCS認(rèn)證。ITPUB社區(qū)Oracle開(kāi)發(fā)版版主,《劍破冰山——Oracle開(kāi)發(fā)藝術(shù)》一書(shū)合著者。做過(guò)需求分析、系統(tǒng)分析、架構(gòu)設(shè)計(jì)、數(shù)據(jù)庫(kù)和應(yīng)用程序性能優(yōu)化等工作。參與數(shù)次全國(guó)性普查數(shù)據(jù)處理系統(tǒng)的設(shè)計(jì)、開(kāi)發(fā)和運(yùn)維。
校審
蘇旭暉
在IT行業(yè)摸爬滾打20多年,1997年至今一直致力于Oracle開(kāi)發(fā),擅長(zhǎng)用SQL、PL/SQL。ITPUB社區(qū)Oracle開(kāi)發(fā)版版主,以及《劍破冰山——Oracle開(kāi)發(fā)藝術(shù)》一書(shū)合著者?,F(xiàn)居加拿大多倫多,從事數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)的設(shè)計(jì)與開(kāi)發(fā)工作。出國(guó)前任職于廈門巨龍軟件公司。多年來(lái)致力于金融、公安、醫(yī)療、社保等行業(yè)軟件的研發(fā)。
李穎
2006年畢業(yè)于渤海大學(xué)英語(yǔ)系,主修英語(yǔ)教育專業(yè)。英語(yǔ)愛(ài)好者
賈書(shū)民
河北省統(tǒng)計(jì)局?jǐn)?shù)據(jù)管理中心調(diào)研員,高級(jí)程序員、高級(jí)工程師。有多年Unix系統(tǒng)管理、數(shù)據(jù)庫(kù)系統(tǒng)管理與設(shè)計(jì)、數(shù)據(jù)處理軟件開(kāi)發(fā)經(jīng)驗(yàn)。1993年起開(kāi)始使用Oracle開(kāi)發(fā)了《河北省綜合數(shù)據(jù)庫(kù)系統(tǒng)》等多個(gè)大型應(yīng)用系統(tǒng)。參與過(guò)《第五次全國(guó)人口普查數(shù)據(jù)處理系統(tǒng)》等多個(gè)國(guó)家級(jí)項(xiàng)目的設(shè)計(jì)和開(kāi)發(fā)。擅長(zhǎng)使用SQL、PL/SQL進(jìn)行高效數(shù)據(jù)分析處理。所開(kāi)發(fā)項(xiàng)目獲第四屆全國(guó)統(tǒng)計(jì)科學(xué)技術(shù)進(jìn)步一等獎(jiǎng)。此外,他還參與編寫《劍破冰山——Oracle開(kāi)發(fā)藝術(shù)》一書(shū)。
書(shū)籍目錄
第1章 避免誤用
1.1 逐行處理
1.2 嵌套的逐行處理
1.3 查找式查詢
1.4 對(duì)DUAL的過(guò)度訪問(wèn)
1.4.1 日期的算術(shù)運(yùn)算
1.4.2 訪問(wèn)序列
1.4.3 填充主—從行
1.5 過(guò)多的函數(shù)調(diào)用
1.5.1 不必要的函數(shù)調(diào)用
1.5.2 代價(jià)高昂的函數(shù)調(diào)用
1.6 數(shù)據(jù)庫(kù)鏈接調(diào)用
1.7 過(guò)度使用觸發(fā)器
1.8 過(guò)度提交
1.9 過(guò)度解析
1.10 小結(jié)
第2章 動(dòng)態(tài)SQL:處理未知
2.1 動(dòng)態(tài)SQL的三種方式
2.1.1 本地動(dòng)態(tài)SQL
2.1.2 動(dòng)態(tài)游標(biāo)
2.1.3 DBMS_SQL
2.2 動(dòng)態(tài)思考的樣例
2.3 安全問(wèn)題
2.4 性能和資源利用率
2.4.1 反模式
2.4.2 比較動(dòng)態(tài)SQL的實(shí)現(xiàn)
2.5 對(duì)象的依賴關(guān)系
2.5.1 負(fù)面影響
2.5.2 正面影響
2.6 小結(jié)
第3章 PL/SQL和并行處理
3.1 為什么需要并行處理
3.2 影響并行處理的定律
3.3 大數(shù)據(jù)的崛起
3.4 并行與分布式處理
3.5 并行硬件體系結(jié)構(gòu)
3.6 確定目標(biāo)
3.6.1 加速
3.6.2 按比例擴(kuò)展
3.6.3 并行度
3.7 用于并行處理的候選工作負(fù)載
3.7.1 并行和OLTP
3.7.2 并行和非OLTP工作負(fù)載
3.8 MapReduce編程模型
3.9 在使用PL/SQL之前
3.10 可用于并行活動(dòng)的進(jìn)程
3.11 使用MapReduce的并行執(zhí)行服務(wù)器
3.11.1 管道表函數(shù)
3.11.2 指導(dǎo)
3.11.3 并行管道表函數(shù)小結(jié)
3.12 小結(jié)
第4章 警告和條件編譯
4.1 PL/SQL 警告
4.1.1 基礎(chǔ)
4.1.2 使用警告
4.1.3 升級(jí)警告為錯(cuò)誤
4.1.4 忽略警告
4.1.5 編譯和警告
4.1.6 關(guān)于警告的結(jié)束語(yǔ)
4.2 條件編譯
4.2.1 基礎(chǔ)
4.2.2 正在運(yùn)行代碼的哪部分
4.2.3 預(yù)處理代碼的好處
4.2.4 有效性驗(yàn)證
4.2.5 控制編譯
4.2.6 查詢變量
4.2.7 關(guān)于條件編譯的結(jié)束語(yǔ)
4.3 小結(jié)
第5章 PL/SQL單元測(cè)試
5.1 為什么要測(cè)試代碼
5.2 什么是單元測(cè)試
5.2.1 調(diào)試還是測(cè)試
5.2.2 建立測(cè)試的時(shí)機(jī)
5.3 單元測(cè)試構(gòu)建工具
5.3.1 utPLSQL:使用命令行代碼
5.3.2 Quest Code Tester for Oracle
5.3.3 Oracle SQL Developer
5.4 準(zhǔn)備和維護(hù)單元測(cè)試環(huán)境
5.4.1 創(chuàng)建單元測(cè)試資料檔案庫(kù)
5.4.2 維護(hù)單元測(cè)試資料檔案庫(kù)
5.4.3 導(dǎo)入測(cè)試
5.5 構(gòu)建單元測(cè)試
5.5.1 使用單元測(cè)試向?qū)А ?br />5.5.2 創(chuàng)建第一個(gè)測(cè)試實(shí)施
5.5.3 添加啟動(dòng)和拆除進(jìn)程
5.5.4 收集代碼覆蓋率統(tǒng)計(jì)信息
5.5.5 指定參數(shù)
5.5.6 添加進(jìn)程驗(yàn)證
5.5.7 保存測(cè)試
5.5.8 調(diào)試和運(yùn)行測(cè)試
5.6 擴(kuò)大測(cè)試的范圍
5.6.1 創(chuàng)建查找值
5.6.2 植入測(cè)試實(shí)施
5.6.3 創(chuàng)建動(dòng)態(tài)查詢
5.7 支持單元測(cè)試功能
5.7.1 運(yùn)行報(bào)告
5.7.2 創(chuàng)建組件庫(kù)
5.7.3 導(dǎo)出、導(dǎo)入和同步測(cè)試
5.7.4 構(gòu)建套件
5.8 從命令行運(yùn)行測(cè)試
5.9 小結(jié)
第6章 批量SQL操作
6.1 五金商店
6.2 設(shè)置本章的例子
6.3 在PL/SQL中執(zhí)行批量操作
6.3.1 批量獲取入門
6.3.2 三種集合風(fēng)格的數(shù)據(jù)類型
6.3.3 為什么要自找麻煩
6.3.4 監(jiān)控批量收集的開(kāi)銷
6.3.5 重構(gòu)代碼以使用批量收集
6.4 批量綁定
6.4.1 批量綁定入門
6.4.2 度量批量綁定性能
6.4.3 監(jiān)視內(nèi)存的使用
6.4.4 11g中的改進(jìn)
6.5 批量綁定的錯(cuò)誤處理
6.5.1 SAVE EXCEPTIONS和分批操作
6.5.2 LOG ERRORS子句
6.5.3 健壯的批量綁定
6.6 大規(guī)模集合的正當(dāng)理由
6.7 真正的好處:客戶端批量處理
6.8 小結(jié)
第7章 透識(shí)你的代碼
7.1 本章內(nèi)容取舍
7.2 自動(dòng)代碼分析
7.2.1 靜態(tài)分析
7.2.2 動(dòng)態(tài)分析
7.3 執(zhí)行分析的時(shí)機(jī)
7.4 執(zhí)行靜態(tài)分析
7.4.1 數(shù)據(jù)字典
7.4.2 PL/Scope
7.5 執(zhí)行動(dòng)態(tài)分析
7.5.1 DBMS_PROFILER和DBMS_TRACE
7.5.2 DBMS_HPROF
7.6 小結(jié)
第8章 合同導(dǎo)向編程
8.1 契約式設(shè)計(jì)
8.1.1 軟件合同
8.1.2 基本合同要素
8.1.3 斷言
8.1.4 參考文獻(xiàn)
8.2 實(shí)現(xiàn)PL/SQL合同
8.2.1 基本的ASSERT程序
8.2.2 標(biāo)準(zhǔn)的包本地?cái)嘌浴 ?br />8.2.3 使用ASSERT執(zhí)行合同
8.2.4 其他改進(jìn)
8.2.5 合同導(dǎo)向函數(shù)原型
8.3 示例:測(cè)試奇數(shù)和偶數(shù)
8.4 有用的合同模式
8.4.1 用NOT NULL輸入且輸出NOT NULL
8.4.2 函數(shù)返回NOT NULL
8.4.3 布爾型函數(shù)返回NOT NULL
8.4.4 檢查函數(shù):返回TRUE或ASSERTFAIL
8.5 無(wú)錯(cuò)代碼的原則
8.5.1 嚴(yán)格地?cái)嘌韵葲Q條件
8.5.2 一絲不茍地模塊化
8.5.3 采用基于函數(shù)的接口
8.5.4 在ASSERTFAIL處崩潰
8.5.5 對(duì)后置條件進(jìn)行回歸測(cè)試
8.5.6 避免在正確性和性能之間取舍
8.5.7 采用Oracle 11g優(yōu)化編譯
8.6 小結(jié)
第9章 從SQL調(diào)用PL/SQL
9.1 在SQL中使用PL/SQL函數(shù)的開(kāi)銷
9.1.1 上下文切換
9.1.2 執(zhí)行
9.1.3 欠理想的數(shù)據(jù)訪問(wèn)
9.1.4 優(yōu)化器的難點(diǎn)
9.1.5 讀一致性陷阱
9.1.6 其他問(wèn)題
9.2 降低PL/SQL函數(shù)的開(kāi)銷
9.2.1 大局觀
9.2.2 使用SQL的替代品
9.2.3 減少執(zhí)行
9.2.4 協(xié)助CBO
9.2.5 調(diào)優(yōu)PL/SQL
9.3 小結(jié)
第10章 選擇正確的游標(biāo)
10.1 顯式游標(biāo)
10.1.1 解剖顯式游標(biāo)
10.1.2 顯式游標(biāo)和批量處理
10.1.3 REF游標(biāo)簡(jiǎn)介
10.2 隱式游標(biāo)
10.2.1 解剖隱式游標(biāo)
10.2.2 隱式游標(biāo)和額外獲取的理論
10.3 靜態(tài)REF游標(biāo)
10.3.1 詳細(xì)的游標(biāo)變量限制清單
10.3.2 客戶端和REF游標(biāo)
10.3.3 有關(guān)解析的話題
10.4 動(dòng)態(tài)REF游標(biāo)
10.4.1 例子和最佳用法
10.4.2 SQL注入的威脅
10.4.3 描述REF游標(biāo)中的列
10.5 小結(jié)
第11章 大規(guī)模PL/SQL編程
11.1 將數(shù)據(jù)庫(kù)作為基于PL/SQL的應(yīng)用服務(wù)器
11.1.1 案例研究:Avaloq銀行系統(tǒng)
11.1.2 在數(shù)據(jù)庫(kù)中使用PL/SQL實(shí)現(xiàn)業(yè)務(wù)邏輯的優(yōu)勢(shì)
11.1.3 用數(shù)據(jù)庫(kù)作為基于PL/SQL的應(yīng)用程序服務(wù)器的限制
11.1.4 軟因素
11.2 大規(guī)模編程的要求
11.3 通過(guò)規(guī)范實(shí)現(xiàn)一致性
11.3.1 縮寫詞
11.3.2 PL/SQL標(biāo)識(shí)符的前綴和后綴
11.4 代碼和數(shù)據(jù)的模塊化
11.4.1 包和相關(guān)的表作為模塊
11.4.2 含有多個(gè)包或子模塊的模塊
11.4.3 模式作為模塊
11.4.4 在模式內(nèi)部模塊化
11.4.5 用模式模塊化與在模式內(nèi)模塊化的比較
11.5 使用PL/SQL面向?qū)ο缶幊獭 ?br />11.5.1 使用用戶定義類型的面向?qū)ο缶幊獭 ?br />11.5.2 使用PL/SQL記錄面向?qū)ο缶幊獭 ?br />11.5.3 評(píng)估
11.6 內(nèi)存管理
11.6.1 測(cè)量?jī)?nèi)存使用
11.6.2 集合
11.7 小結(jié)
第12章 漸進(jìn)式數(shù)據(jù)建?! ?br />12.1 從二十年的系統(tǒng)開(kāi)發(fā)中總結(jié)的經(jīng)驗(yàn)
12.2 數(shù)據(jù)庫(kù)和敏捷開(kāi)發(fā)
12.3 漸進(jìn)式數(shù)據(jù)建?! ?br />12.4 重構(gòu)數(shù)據(jù)庫(kù)
12.5 通過(guò)PL/SQL創(chuàng)建訪問(wèn)層
12.6 敏捷宣言
12.7 用PL/SQL進(jìn)行漸進(jìn)式數(shù)據(jù)建?! ?br />12.7.1 定義接口
12.7.2 思考可擴(kuò)展性
12.7.3 測(cè)試驅(qū)動(dòng)開(kāi)發(fā)
12.7.4 明智地使用模式和用戶
12.8 小結(jié)
第13章 性能剖析
13.1 何謂性能
13.1.1 功能需求
13.1.2 響應(yīng)時(shí)間
13.1.3 吞吐量
13.1.4 資源利用率
13.1.5 性能是功能的一種
13.2 什么是剖析
13.2.1 順序圖
13.2.2 概要文件之神奇
13.2.3 性能剖析的好處
13.3 性能測(cè)量
13.3.1 這個(gè)程序?yàn)槭裁绰 ?br />13.3.2 測(cè)量嵌入
13.3.3 識(shí)別
13.3.4 條件編譯
13.3.5 內(nèi)建的剖析器
13.3.6 擴(kuò)展的SQL跟蹤數(shù)據(jù)(事件10046)
13.3.7 針對(duì)Oracle的測(cè)量工具庫(kù)(ILO)
13.4 問(wèn)題診斷
13.4.1 R方法
13.4.2 ILO示例
13.4.3 剖析示例
13.5 小結(jié)
第14章 編碼規(guī)范和錯(cuò)誤處理
14.1 為什么要制訂編碼規(guī)范
14.2 格式化
14.2.1 大小寫
14.2.2 注釋
14.2.3 比較
14.2.4 縮進(jìn)
14.3 動(dòng)態(tài)代碼
14.4 包
14.5 存儲(chǔ)過(guò)程
14.5.1 命名
14.5.2 參數(shù)
14.5.3 調(diào)用
14.5.4 局部變量
14.5.5 常量
14.5.6 類型
14.5.7 全局變量
14.5.8 本地存儲(chǔ)過(guò)程和函數(shù)
14.5.9 存儲(chǔ)過(guò)程元數(shù)據(jù)
14.6 函數(shù)
14.7 錯(cuò)誤處理
14.7.1 錯(cuò)誤捕獲
14.7.2 錯(cuò)誤報(bào)告
14.7.3 錯(cuò)誤恢復(fù)
14.7.4 先測(cè)試再顯示
14.8 小結(jié)
第15章 依賴關(guān)系和失效
15.1 依賴鏈
15.2 縮短依賴鏈
15.3 數(shù)據(jù)類型引用
15.4 用于表修改的視圖
15.5 把組件添加到包
15.6 依賴鏈中的同義詞
15.7 資源鎖定
15.8 用觸發(fā)器強(qiáng)制執(zhí)行依賴
15.9 創(chuàng)建最初禁用的觸發(fā)器
15.10 小結(jié)
章節(jié)摘錄
版權(quán)頁(yè): 插圖: 如果計(jì)算機(jī)可以自動(dòng)計(jì)算出將問(wèn)題劃分成更小部分的方法,并以那些更小的部分為基礎(chǔ)并行地運(yùn)行程序,事情就會(huì)很美好。關(guān)于并行的自動(dòng)識(shí)別已經(jīng)有大量的研究,但事實(shí)證明,計(jì)算機(jī)真的很難理解在哪里有機(jī)會(huì)使用并行。雖然已經(jīng)有人嘗試編寫新的編譯器,使它可以讀取高層次的編程語(yǔ)言,并為CPU產(chǎn)生顯式并行指令流,但沒(méi)有太多在這方面很成功的例子,結(jié)果是我們?nèi)孕枰謩?dòng)設(shè)計(jì)我們自己的并行處理策略。 好消息是,正確實(shí)施并行處理技術(shù),除簡(jiǎn)單加速之外,還有以下幾個(gè)好處。 更好的系統(tǒng)利用率,在多處理器系統(tǒng)中,所有處理器都可以應(yīng)用于任務(wù)。 消除一個(gè)全有或全無(wú)(all—or—nothing)的過(guò)程,允許部分完成以防一些子任務(wù)失敗。 能夠在一個(gè)固定的時(shí)間處理越來(lái)越大的數(shù)據(jù)集,而不是簡(jiǎn)單地加快速度,以便在一個(gè)更短的時(shí)間內(nèi)完成一個(gè)固定的數(shù)據(jù)集。 結(jié)果證明,雖然設(shè)計(jì)和實(shí)現(xiàn)并行程序會(huì)產(chǎn)生一些開(kāi)銷并需要辛勤的工作,但這些付出同它帶來(lái)的好處相比往往是值得的。 3.2影響并行處理的定律 用計(jì)算機(jī)解決問(wèn)題的技術(shù)(或算法)是由計(jì)算機(jī)科學(xué)家研究和編纂的,往往導(dǎo)致所謂的計(jì)算定律。這些定律與計(jì)算機(jī)體系結(jié)構(gòu)的趨勢(shì)和過(guò)去幾年的數(shù)據(jù)增長(zhǎng)互相作用,影響了我們對(duì)并行處理的思考。 摩爾定律(Moore's Law,1965年提出)指出,集成電路上可以容納的晶體管數(shù)量每?jī)赡暝黾右槐?,并暗示?jì)算機(jī)微處理器的性能和速度也每?jī)赡暝黾右槐?。?0世紀(jì)80年代中期到大約2004年,由于處理器頻率的同步提升,這種加速一直與這個(gè)定律吻合。然而,從那以后,功耗開(kāi)始成為問(wèn)題,導(dǎo)致多核處理器的出現(xiàn),它需要并行處理才能充分利用這條定律。 阿姆達(dá)爾定律(Amdahl's Law,1967年提出)指出,使用多個(gè)處理器并行計(jì)算對(duì)程序進(jìn)行加速受限于程序中的串行片段所需的執(zhí)行時(shí)間。阿姆達(dá)爾定律中存在一個(gè)并行處理的寒蟬效應(yīng),因?yàn)樗赋?,程序的?zhí)行速度不可能比它們的串行組成部分的速度更快。這意味著利用并行處理,你的程序的速度增加量有一個(gè)限制,往往使得并行程序最多只能比與它等價(jià)的串行程序快10~20倍。 古斯塔夫森法則(Gustafson's Law,1988年提出)指出,具有非常大的重復(fù)數(shù)據(jù)集的問(wèn)題可以有效地并行化,幾乎是高度并行化(因此,擁有非常小的串行部分并很容易分解為小型獨(dú)立單位的問(wèn)題,被正式命名為高度并行)。 這些法則之間的矛盾關(guān)系符合21世紀(jì)前十年另一個(gè)行業(yè)的發(fā)展趨勢(shì),即所謂“大數(shù)據(jù)”的崛起。
媒體關(guān)注與評(píng)論
“本書(shū)作者陣容強(qiáng)大,內(nèi)容全面實(shí)用,期待更多這種形式的技術(shù)書(shū)?!薄x者評(píng)論
編輯推薦
匯集Oracle專家集體智慧的結(jié)晶,包羅PL/SQL的方方面面介紹語(yǔ)法的同時(shí)展示良好的編程實(shí)踐內(nèi)容貼近實(shí)戰(zhàn)、講解透徹精彩,每章一個(gè)作者,獨(dú)立成篇,易于理解結(jié)合PL/SQL語(yǔ)法特性與良好的開(kāi)發(fā)實(shí)踐,DBA修煉內(nèi)力必讀秘籍
圖書(shū)封面
圖書(shū)標(biāo)簽Tags
無(wú)
評(píng)論、評(píng)分、閱讀與下載
Oracle PL/SQL實(shí)戰(zhàn) PDF格式下載
250萬(wàn)本中文圖書(shū)簡(jiǎn)介、評(píng)論、評(píng)分,PDF格式免費(fèi)下載。 第一圖書(shū)網(wǎng) 手機(jī)版