本書提供了全面、實用的建議,以保證在復(fù)雜的生產(chǎn)環(huán)境中,能可靠且高效地運行Oracle 數(shù)據(jù)庫。七位主要的Oracle 專家對Oracle 12c、11g 和其他*近版本的Oracle 數(shù)據(jù)庫匯集了一系列經(jīng)過驗證的解決方案、實踐的例子以及循序漸進的技巧。每一個解決方案都是精心設(shè)計的,以幫助有經(jīng)驗的Oracle DBA和DMA 盡可能快地理解和修復(fù)嚴(yán)重的問題。本書不僅涵蓋了LOB 段、undo 表空間、高GC 緩沖區(qū)等待事件、糟糕的查詢響應(yīng)時間、閂鎖爭用、索引、XA 分布式事務(wù)、RMAN 備份/ 恢復(fù)等內(nèi)容,還深入地講解了DDL 優(yōu)化、VLDB 調(diào)優(yōu)、數(shù)據(jù)庫取證、自適應(yīng)游標(biāo)共享、數(shù)據(jù)泵、數(shù)據(jù)遷移、SSD、索引等內(nèi)容,并介紹了如何解決Oracle RAC 問題。
譯者序一
最初的時候,Anna 是約我寫一本書。 但寫書太費精力了,以前寫過幾年的博客,知道這里面的辛苦。而寫書和寫博客又有很大的不同。 寫博客可以根據(jù)自己的想法,想到哪寫到哪,但寫書必須有一定的章法。所以Anna 約書的事情,雖然在寫,但進展很慢,一拖再拖。2016 年上半年的時候,Anna 看我進展太慢,就問我是否愿意先翻譯一本書。 我說可以試一試,但她給我看的書,并不怎么吸引我,就問還有沒有其他的書,她說有。 然后從列表中一眼看到了這本書。著手翻譯之前,也特意咨詢了一下Lunar 大神,她說她一個星期可以翻譯一章。但我開始翻譯之后,發(fā)現(xiàn)里面的工作量太大了,遇到不太好翻譯的段落,一下午也就只能翻譯1 頁。我的時間也太過于碎片化,一周根本翻譯不完一章,而全書共有20 章,所以最終邀請了周捷和臧強磊加入到翻譯團隊。
翻譯的工作斷斷續(xù)續(xù)進行了大半年,然后就是校驗工作。 其實內(nèi)心一直有顧慮,擔(dān)心翻譯得好,砸了原作者們的招牌,這些作者們都是行業(yè)里的前輩。 他們把個人的經(jīng)驗沉淀下來,如果因為我們翻譯得不好,而影響了知識的傳遞,那就是真的犯罪了。 因為Gilbert Highet 曾經(jīng)說過:A badly written book is only a blunder. A bad translation of a good book is a crime(寫本爛書不過是件糗事,而把好書譯成爛書則是犯罪!)。
真正翻譯的那段時間,基本都是犧牲睡眠時間來進行的。可能是因為我個人的習(xí)慣,在晚上10 點到凌晨2 點這個時間段的效率特別高,夜深人靜,沒有其他雜事來打擾。有時候一個句子,要琢磨很久,有些句子,看完之后,能明白作者想表達(dá)的意思, 但是想用通順的中文表達(dá)出來,卻很困難。 而且這里面還有美語思維的問題。 比如原作者在表達(dá)一個意思時,用了他們很習(xí)慣的方法,但是我們的語言中沒有這種文化,如果直譯,句子就會顯得特別生硬。在這些具體的細(xì)節(jié)琢磨的過程中,度過了一個又一個安靜的夜晚。
比如現(xiàn)在,寫著寫著就又到了凌晨1 點。 一個人的書房,一盞臺燈,還有那悠揚的Canon 相伴,這樣的生活也很愜意。 每個人對生活的理解都不一樣,而我就是希望我的人生過的更有意義一些,正如我博客的座右銘所說:人的一生應(yīng)該是這樣度過的:當(dāng)他回首往事的時候,他不會因為虛度年華而悔恨,也不會因為碌碌無為而羞恥;這樣,在臨死的時候,他就能夠說:我的整個生命和全部精力,都已經(jīng)獻給世界上最壯麗的事業(yè).....
當(dāng)然,每個人的時間都是有限的,每天都只有24 小時。 當(dāng)你選擇做一件事的時候,就做不了其他事情,這里首先要感謝我夫人給予我的支持。因為她的付出和理解,我才有時間安安靜靜的在書房里做我的事情。其次要感謝2 個小伙伴:臧強磊和周捷,感謝你們犧牲很多的休息時間來一起完成本書的翻譯工作。
一個人活著的意義,不能以生命長短作為標(biāo)準(zhǔn),而應(yīng)該以生命的質(zhì)量和厚度來衡量。我從事了10 年Oracle 數(shù)據(jù)庫的工作,也希望能把自己對數(shù)據(jù)庫的理解沉淀下來,做一點有意義的事情。 在這條道路上我會一直走下去。 但因為時間和個人精力的原因,在本書的翻譯和校驗過程中,雖然我們花費了很多的時間,但仍然難免會出現(xiàn)一些錯誤。如果您在閱讀的過程中發(fā)現(xiàn)這些錯誤,請郵件告知我們,郵箱:ahdba@qq.com。 在此表示感謝。
最后感謝所有朋友們的支持與理解,希望你們也能從本書中獲益。
戴明明/Dave
寫于合肥
2017 年12 月9 日
譯者序二
轉(zhuǎn)眼之間,從事Oracle 相關(guān)工作已有五年時間。這五年間有兩個人對我的工作影響很大,
在此表示感謝。
首先感謝我的大哥,在我大學(xué)期間就一直鼓勵引導(dǎo)我學(xué)習(xí)Oracle 知識。因為他也從事Oracle 相關(guān)的工作,一是有這方面的經(jīng)驗,二是看到了Oracle 數(shù)據(jù)庫在當(dāng)今世界的巨大市場和前景。如今在Oracle 領(lǐng)域工作了五年時間,更加肯定了當(dāng)初的選擇是對的。其次感謝Dave,對我的Oracle 生涯有著重要的影響。Dave 在我剛工作時就已經(jīng)是Oracle領(lǐng)域的大神了。很多知識都是從他的博客上學(xué)習(xí)的,對我學(xué)習(xí)Oracle 提供了莫大的幫助。另外,也是Dave 給了我這個機遇,參與到本書的翻譯工作中,更是完成了我的一個夢想,再次感謝。隨著大數(shù)據(jù)時代的到來和普及,數(shù)據(jù)毫無疑問是一個必不可少的角色,其重要性不用多說,甚至關(guān)系到一個公司的安危。而數(shù)據(jù)庫則承擔(dān)了保護數(shù)據(jù)和有效運用數(shù)據(jù)的角色。由于Oracle 是當(dāng)今關(guān)系型數(shù)據(jù)庫中的王者,因此我們有必要學(xué)習(xí)并運用好它。
本書是由國外幾位Oracle 領(lǐng)域的大師所編寫的,運用各種工具來處理運維中可能遇到的各種性能故障問題,并結(jié)合具體案例提供有效的解決辦法,其中也包含了一些Oracle 12c 的新特性的介紹和運用,但是內(nèi)容絕不僅限于此。無論你是從事Oracle 相關(guān)工作多年的老手,還是剛進入Oracle 領(lǐng)域工作的新人,本書都是學(xué)習(xí)進階的上佳選擇。在翻譯過程中還要感謝我的同事,在工作上對我提供的幫助。感謝Dave,對我翻譯工作的巨大幫助,不僅要核對自己的翻譯內(nèi)容,還要校驗我的翻譯內(nèi)容是否恰當(dāng)準(zhǔn)確。實際上,翻譯本書對我來說是一個很大的挑戰(zhàn):一是由于編寫本書的作者都是這個領(lǐng)域的前輩,涉及的知識面廣,很多都是新的知識點。二是由于本人水平有限,雖然后期進行了反復(fù)的校驗,但是書中難免會出現(xiàn)一些錯誤或者不準(zhǔn)確的地方,懇請讀者批評指正。
最后,謹(jǐn)以本書獻給從事Oracle 數(shù)據(jù)庫,和想要從事Oracle 相關(guān)工作的朋友們,共勉!
臧強磊
2017 年12 月于合肥
拿到這本書的英文原文,已有近一年的時間了,是在一個非常機緣巧合的契機下,幾位好友經(jīng)過簡單的溝通或者說是一拍即合,就開始各自的拜讀和譯文進程。說實話,對于翻譯IT技術(shù)類籍,一直以來非常謹(jǐn)慎,一來是因為我本身在做第三方運維的工作,日常工作飽和度非常大,很難保障大量固定的譯文時間,擔(dān)心無法滿足出版書發(fā)行進度的同時更不希望辱沒原文。其次更為重要的是,乍一看市面上關(guān)于這方面的書籍已經(jīng)很多了,不希望再做一些對讀者沒有切實幫助和實際意義的事情。但是當(dāng)我認(rèn)真閱讀完這本由多位國外技術(shù)大神的合力巨著后,我被書籍中遍布每個章節(jié)的大量干貨所深深吸引,區(qū)別于市面上很多其他書籍,這本書最大的特點是沒有任何基礎(chǔ)知識的贅述,各個章節(jié)都是開門見山地深入敵后,直接探討更深層次的問題根因、診斷方法和解決方案。這樣的寫作方式是非常難得的,因為市面上出版的很多書籍都還是從基礎(chǔ)談起,有一定基礎(chǔ)的讀者在閱讀的時候往往總是會選擇直接跳過甚至只挑選部分段落。所以這本書籍的內(nèi)容安排顯得尤為高效,更適合一些有一定技術(shù)積累的讀者朋友,幫助他們進一步凝練和提高。也是在這樣的前提下,我們積極地開始了這本書籍的翻譯工作,唯一的想法就是希望能夠幫助更多希望效獲取干貨的朋友們,譯文的每一個章節(jié)都對大家切實有用,這是我們莫大的動力和榮幸。由于這本書是由多名國外技術(shù)大牛合著完成,各自的寫作風(fēng)格也不盡相同,翻譯過程中我們在保障技術(shù)準(zhǔn)確性的前提下,盡可能地風(fēng)格統(tǒng)一地進行了文辭修飾,以期望本書中文版在讀者閱讀時更具流暢性和思維連貫性。因為我們堅信翻譯工作不僅僅是語義的轉(zhuǎn)換,更重要的是要注入更為本地化的閱讀習(xí)慣和思維方式。當(dāng)然,譯文中一定存在不完美的地方,請讀者朋友們給予諒解和指正,聯(lián)系郵箱:ahdba@qq.com。
譯者序三
譯者序三 ∣ VII
最后,感謝家人給予我們的大力支持,在枯燥和耗時的翻譯過程中,尤其得到愛人Cherry以及兩個小寶貝的理解,犧牲了大量本該陪伴他們的周末和假期時光。感謝一同翻譯此書的小
伙伴們,這是大家共同努力的結(jié)果。感謝出版社對我們翻譯時間上的寬限與包容。還要感謝原書的作者們,是你們寫出了這么優(yōu)秀的文字,才激發(fā)了我們的翻譯熱情。最后感謝讀者朋友們
的理解和支持,希望你們喜歡本書并從中受益。
周捷/Jet
寫于合肥
2017 年12 月10 日
前言
數(shù)據(jù)庫管理員的生活正變得越來越有挑戰(zhàn)性,艱苦的工作條件也迅速成為常態(tài)。DBA 面臨的問題是,在某些情況下可能會導(dǎo)致組織和單位每分鐘損失數(shù)百萬美元,甚至可能導(dǎo)致公司的數(shù)據(jù)庫基礎(chǔ)設(shè)施癱瘓。雖然這些情況不太可能發(fā)生,但是為了避免和阻止它們,DBA 需要提前做好準(zhǔn)備。本書的指導(dǎo)原則是展示如何盡可能快地修復(fù)可能會影響生產(chǎn)環(huán)境的嚴(yán)重的數(shù)據(jù)庫問題。本書通過檢查在任意Oracle 數(shù)據(jù)庫中隨時可能發(fā)生的真實例子來指導(dǎo)讀者完成必要的步驟,以解決手頭的問題。您可以使用本書來解決一些可能會遇到的大問題,而不是浪費時間去試圖尋找導(dǎo)致數(shù)據(jù)庫異常問題的解決方案。即使沒有從本書找到解決當(dāng)前問題的方法,您也將學(xué)到如何快速地在網(wǎng)絡(luò)上搜索到問題的解決方案。本書背后的基本思想是,當(dāng)在生產(chǎn)環(huán)境中遇到嚴(yán)重的Oracle 數(shù)據(jù)庫問題時,本書會在黑暗中為您提供光明。除一般的實踐外,本書還探討了一些常見的Oracle 數(shù)據(jù)庫問題及其快速解決方案,并以簡易的形式解釋了這些問題。對于Oracle DBADMA(Database Machine Administrator),本書將作為一本實用的技術(shù)指南,用于Oracle 數(shù)據(jù)庫中執(zhí)行日常的故障排除、調(diào)優(yōu)和問題解決。
本書的作者是著名的、經(jīng)驗豐富的Oracle ACE、ACE Director 和Expert 團隊,本書的目標(biāo)是成為一本結(jié)合現(xiàn)實環(huán)境實際操作的例子和復(fù)雜的Oracle 數(shù)據(jù)庫場景故障診斷的問題解決手冊本書展示了如何:
y 選擇捷徑解決影響較大的問題 ;
y 使用從現(xiàn)場專家那里學(xué)到的可靠的工作技巧,讓工作更有效率;
y 制定自己的應(yīng)急計劃;
前言
前言 ∣ XV
y 執(zhí)行例行的主動維護,以確保環(huán)境的穩(wěn)定性;
y 使用行業(yè)標(biāo)準(zhǔn)的實踐工具和腳本,以找到更好的解決方案。
Tariq Farooq 是一名Oracle 技術(shù)專家、架構(gòu)師和問題解決者,在世界上最大的一些組織得非常復(fù)雜的環(huán)境中從事各種Oracle 技術(shù)工作已經(jīng)超過24 年。Mike Ault 于1980 年開始使用計算機,自1990 年以來,Mike 作為顧問,一直在使用Oracle 的行業(yè)工作。Paulo Portugal 作為Oracle DBA,有超過15 年的IT 經(jīng)驗。他是Oracle 11g OCM, Oracle 9i、 10g、 11g 和12c OCP,Oracle 10g 和11g 認(rèn)證專家,Oracle DBA 10g 認(rèn)證Linux 管理員,Oracle Exadata認(rèn)證實施專家。
戴明明,網(wǎng)名:Dave,Oracle ACE-A,ACOUG 核心成員,浙江應(yīng)用中間件與數(shù)據(jù)庫用戶組核心成員,CSDN 認(rèn)證專家。9年DBA經(jīng)驗,在Oracle 高可用方面有一定的經(jīng)驗積累。 擅長Oracle數(shù)據(jù)庫診斷、性能調(diào)優(yōu),熱衷于Oracle 技術(shù)的研究與分享。曾在CSDN博客撰寫博客1000余篇(http://blog.csdn.net/tianlesoftware)。2012年度CSDN博客十大博客之星。
第1 章 LOB 段性能的診斷與調(diào)優(yōu)...........................................................1
1.1 LOB 數(shù)據(jù)類型的介紹 ......................................................................................... 1
1.1.1 解決LOB 問題:一個真實的案例 ....................................................... 2
1.1.2 另一個真實案例:HW 分析 .................................................................. 4
1.1.3 BASICFILE LOB :更完美的解決方案 ................................................ 7
1.2 BASICFILE 與SECUREFILE LOB ................................................................... 7
1.2.1 LOB 新舊類型的差異 ............................................................................ 8
1.2.2 遷移BASICFILE LOB 到SECUREFILE LOB .................................. 10
1.3 PCTFREE 對LOB 的影響 ................................................................................ 12
1.4 解決糟糕的INSERT 性能 ................................................................................ 15
1.5 總結(jié) .................................................................................................................... 15
第2 章 處理undo 表空間損壞.............................................................. 16
2.1 undo 管理概述 ................................................................................................... 16
2.1.1 UNDO_RETENTION 的重要性 .......................................................... 16
2.1.2 優(yōu)化UNDO_RETENTION .................................................................. 17
2.2 DTP、XA 和回滾段 .......................................................................................... 18
2.3 undo 表空間損壞的恢復(fù) ................................................................................... 20
2.3.1 預(yù)防、檢測和修復(fù)損壞 ....................................................................... 20
2.3.2 處理內(nèi)存損壞 ....................................................................................... 21
2.3.3 處理邏輯損壞 ....................................................................................... 24
2.3.4 解決介質(zhì)損壞 ....................................................................................... 24
2.4 總結(jié) .................................................................................................................... 27
目錄 ?O XVII
第3 章 處理全局緩存緩沖區(qū)忙等待事件................................................. 28
3.1 緩沖區(qū)忙等待事件概述 .................................................................................... 28
3.2 使用ORAchk 工具 ........................................................................................... 29
3.2.1 安裝ORAchk ........................................................................................ 29
3.2.2 ORAchk 執(zhí)行結(jié)果:示例輸出 ............................................................ 30
3.3 查找GC 緩沖區(qū)忙等待事件 ............................................................................. 32
3.3.1 用ADDM 查找事件的信息 ................................................................. 33
3.3.2 用AWR 查找等待事件的信息 ............................................................ 33
3.3.3 用ASH 查找等待事件的信息 ............................................................. 35
3.4 查找GC 緩沖區(qū)忙等待事件的原因 ................................................................. 36
3.4.1 使用ASH 視圖查找等待會話 ............................................................. 36
3.4.2 快速查找性能瓶頸 ............................................................................... 38
3.5 解決GC 緩沖區(qū)忙等待 ..................................................................................... 40
3.6 總結(jié) .................................................................................................................... 41
第4 章 自適應(yīng)游標(biāo)共享.......................................................................42
4.1 ACS 工作算法 ................................................................................................... 42
4.1.1 綁定敏感與范圍謂詞 ........................................................................... 43
4.1.2 綁定敏感與等式謂詞和直方圖 ........................................................... 45
4.1.3 綁定敏感與分區(qū)鍵 ............................................................................... 46
4.2 ACS 的使用 ....................................................................................................... 48
4.2.1 監(jiān)控ACS 的綁定感知 .......................................................................... 51
4.2.2 BUCKET_ID 和COUNT 的關(guān)系 ........................................................ 52
4.2.3 標(biāo)記游標(biāo)為綁定感知 ........................................................................... 55
4.3 游標(biāo)綁定感知 ................................................................................................... 61
4.4 一個真實案例 .................................................................................................... 64
4.5 總結(jié) .................................................................................................................... 69
第5 章 使用SPM 穩(wěn)定查詢響應(yīng)時間..................................................... 70
5.1 入門指南 ............................................................................................................ 70
5.2 創(chuàng)建SQL 計劃基線 ......................................................................................... 73
5.2.1 自動捕獲計劃 ....................................................................................... 73
5.2.2 從游標(biāo)緩存加載計劃 ........................................................................... 76
5.3 偽造基線 ............................................................................................................ 77
XVIII ?O Oracle數(shù)據(jù)庫問題解決方案和故障排除手冊
5.4 Oracle 優(yōu)化器和SPM 的交互........................................................................... 81
5.4.1 當(dāng)CBO 計劃與SQL 計劃基線匹配時 ................................................ 82
5.4.2 當(dāng)CBO 計劃與SQL 計劃基線不匹配時 ............................................ 84
5.4.3 當(dāng)SQL 計劃基線不可復(fù)制時 .............................................................. 89
5.5 SQL 計劃基線的復(fù)制性 .................................................................................... 93
5.5.1 重命名索引 ........................................................................................... 93
5.5.2 修改索引類型 ....................................................................................... 95
5.5.3 向索引中添加尾列 ............................................................................... 96
5.5.4 反向索引 ............................................................................................... 97
5.6 NLS_SORT 與SQL 計劃基線的復(fù)制性 ........................................................ 98
5.7 ALL_ROWS 與FIRST_ROWS ...................................................................... 100
5.8 自適應(yīng)游標(biāo)共享與SPM ................................................................................. 104
5.8.1 Oracle 11.2.0.3.0 中的ACS 和SPM .................................................. 105
5.8.2 Oracle 12.1.0.1.0 中的ACS 和SPM .................................................. 109
5.9 總結(jié) .................................................................................................................. 112
第6 章 DDL 優(yōu)化技巧和技術(shù)............................................................. 114
6.1 DDL 優(yōu)化的概念 ............................................................................................. 114
6.2 DDL 優(yōu)化的機制 ............................................................................................. 117
6.2.1 表基數(shù)