由于Oracle運維管理的專業(yè)性門檻較高,導致Oracle運維管理成本增加。在這種情況下,如何深入掌握Oracle,如何提高數(shù)據(jù)庫運維效率成為許多數(shù)據(jù)庫管理者的困擾。盡管國內有關Oracle方面的書籍繁多,但卻沒有一本真正意義上介紹Oracle數(shù)據(jù)庫運維自動化的書。本書從與Oracle緊密相關的操作系統(tǒng)層面入手,將操作系統(tǒng)架構與Oracle體系有機整合,以逐步深入的方式將Oracle基礎理論運用到實際操作中,引導讀者在面對故障時找到處理問題的正確方法。同時,結合開放式可擴展的自動化運維體系,將數(shù)據(jù)庫運維工作按需自動化,在保障數(shù)據(jù)庫高性能運行的同時,大大提高了數(shù)據(jù)庫運維工作的效率。
為什么要寫這本書2008年的某一天,我懷著激動的心情參加了支付寶公司的面試,這次面試讓我對國內最前沿的數(shù)據(jù)庫自動化運維技術有了初步的認識,對我的職業(yè)生涯影響非常大,時刻激勵著我以后不管遇到什么困難或者誘惑,Oracle始終都是我追逐的愛好和目標。
在接下來幾年的工作中,我較為深入地研究了C語言數(shù)據(jù)結構、Linux操作系統(tǒng)原理以及Shell(PHP/Java)編程等知識,這些技術能夠很好地支撐Oracle運維管理。同時,多年的經驗告訴我,對集運維與開發(fā)于一體的Oracle運維管理體系來而言,精通一門開發(fā)語言是相當有必要的,因為只有這樣才可以更為深入地了解數(shù)據(jù)庫與業(yè)務程序之間的架構設計,并能夠更為精確地把控Oracle管理優(yōu)化,從而在面對各種疑難問題時找到解決的突破口。
2014年,我有幸與來自支付寶開發(fā)團隊和淘寶運維團隊的伙伴共事,學習交流了來自阿里的系統(tǒng)架構設計及運維管理理念,這使我編寫自動化數(shù)據(jù)庫運維書籍的想法更加強烈,并希望通過書籍與大家分享自己多年的工作經驗。
本書主要特色由于Oracle運維管理的專業(yè)性門檻較高,導致Oracle運維管理成本增加。在這種情況下,如何深入掌握Oracle,如何提高數(shù)據(jù)庫運維效率成為許多數(shù)據(jù)庫管理者的困擾。盡管國內有關Oracle方面的書籍繁多,但卻沒有一本真正意義上介紹Oracle數(shù)據(jù)庫運維自動化的書。本書從與Oracle緊密相關的操作系統(tǒng)層面入手,將操作系統(tǒng)架構與Oracle體系有機整合,以逐步深入的方式將Oracle基礎理論運用到實際操作中,引導讀者在面對故障時找到處理問題的正確方法。同時,結合開放式可擴展的自動化運維體系,將數(shù)據(jù)庫運維工作按需自動化,在保障數(shù)據(jù)庫高性能運行的同時,大大提高了數(shù)據(jù)庫運維工作的效率。
本書讀者對象根據(jù)本書的內容特點,可以將閱讀對象分為以下幾類:
Oracle數(shù)據(jù)庫管理人員;Oracle數(shù)據(jù)庫開發(fā)人員;應用架構師;數(shù)據(jù)庫架構師;系統(tǒng)集成架構師;運維管理維護人員;數(shù)據(jù)庫技術愛好者。
如何閱讀本書閱讀本書前需要對Oracle基礎知識有一定的了解和掌握,只有這樣才能保證閱讀的暢通性。如果對某些知識點存在困惑,可以查閱Oracle在線官方文檔(http://docs.oracle.com)獲取幫助。
本書共10章,分為三篇:基礎篇、優(yōu)化篇、方法篇。
基礎篇(第1~4章)主要介紹了Linux環(huán)境下Oracle內存體系架構的組成和功能,同時對Oracle日志與回滾段內容進行了講解,在幫助讀者深入理解Oracle知識體系的同時,為后續(xù)數(shù)據(jù)庫優(yōu)化及備份恢復打下基礎。
優(yōu)化篇(第5~6章)主要介紹了Oracle SQL優(yōu)化的原理和思想,并結合CBO優(yōu)化器對Oracle優(yōu)化進行探索。其中,SQL優(yōu)化原理和思想是CBO優(yōu)化的基礎,將兩者結合即可提供Oracle數(shù)據(jù)庫優(yōu)化參考。
方法篇(第7~10章)主要講解了Oracle備份恢復的原理,以及如何制訂符合自身數(shù)據(jù)庫特點的Oracle備份恢復計劃。同時,結合自動化運維管理系統(tǒng)、自動化歷史分析系統(tǒng)及自動化實時監(jiān)控系統(tǒng)對數(shù)據(jù)庫自動化運維進行實踐,幫助數(shù)據(jù)庫維護人員從大量重復煩瑣的運維工作中解放出來,實現(xiàn)高效率、自動化的數(shù)據(jù)庫管理。
勘誤和資源由于本人水平有限,編寫時間也比較倉促,書中難免有錯誤或者不準確的地方,在此懇請讀者朋友批評指正。你可以 將書中的錯誤發(fā)送到Bug勘誤表頁面中,同時,書中的源碼文件也會發(fā)布到華章公司的網(wǎng)站上并及時更新。如果有任何疑問或者建議,也歡迎發(fā)送郵件,期待你們真摯的意見反饋。
致謝感謝Oracle技術社區(qū)的支持以及來自BAT等企業(yè)的同事和朋友們的技術分享,感謝Oracle小筑以及Unix DBA等技術社區(qū)的朋友們,他們包括但不限于李培躍、丁鐵球、周操、文智輝、許劍鋒、陶衛(wèi)、賀學兵、周立明、李杰斌、羅炳森、龔明全、蹇波等。
感謝機械工業(yè)出版社華章公司的楊福川老師和李藝老師,你們的專業(yè)和熱情深深地打動了我,讓我能夠堅持完成本書的編寫。同時感謝你們對本書頁面排版等方面的建議和支持。
感謝公司的同事和領導,謝謝你們給予我較為充裕的時間來完成本書。
特別感謝我的朋友李亞、李純香、鄭勇斌,謝謝你們對本書的大力支持。需要額外感謝的還有蓋國強老師以及馮大輝老師等。
最后要感謝我的妻子劉楊及父母對我和孩子的照顧,因為有了你們的理解和支持,才使我有充足的時間和精力來完成本書。
謹以本書獻給那些還在追逐、熱愛Oracle技術,并依然堅持夢想的朋友們。
冷 菠
冷菠,DBA,有近10年Oracle數(shù)據(jù)庫管理與運維經驗,曾擔任美資企業(yè)Senior DBA職務、支付寶成都公司數(shù)據(jù)庫團隊負責人,現(xiàn)就職于上市公司?低曋貞c分公司。
擅長數(shù)據(jù)庫備份恢復、數(shù)據(jù)庫性能診斷優(yōu)化以及數(shù)據(jù)庫運維自動化等,對于主機存儲、網(wǎng)絡、系統(tǒng)業(yè)務架構、大數(shù)據(jù)有較為深入的研究。目前致力于大數(shù)據(jù)、智能一體化、開源云計算等領域的佳實踐探索。主要涉及領域有通信、金融、游戲、政府部門以及傳統(tǒng)制造業(yè)領域。
網(wǎng)名悠然,活躍于國內外Oracle、Unix技術交流群。
Contents 目錄
前言
第一篇 基礎篇
第1章 Linux下的Oracle2
1.1 Linux簡介2
1.2 Oracle簡介3
1.3 Linux內存體系的優(yōu)勢3
1.4 Linux內存體系與Oracle內存空間5
1.4.1 Linux用戶空間與內核空間5
1.4.2 Linux下的Oracle內存體系結構5
1.4.3 Linux下的Oracle內存分配6
1.5 小結9
第2章 Oracle內存體系結構10
2.1 閂(Latch)10
2.1.1 Latch簡介10
2.1.2 Latch Level11
2.1.3 Latch獲取模式12
2.1.4 Latch獲取等待13
2.1.5 Latch資源清理回收15
2.2 隊列鎖(Enqueue Lock)16
2.2.1 Lock與Latch的區(qū)別16
2.2.2 常見的Lock17
2.2.3 Lock相關參數(shù)18
2.2.4 Lock先請求先服務機制18
2.3 Library Cache21
2.3.1 Library Cache與SQL游標21
2.3.2 Library Cache內存結構28
2.3.3 Library Cache Lock(Pin)31
2.4 Buffer Cache34
2.4.1 Buffer(Cache)Pool34
2.4.2 Cache Buffer Chain(Latch)37
2.4.3 Cache Buffer Pin40
2.4.4 Buffer Cache等待與優(yōu)化44
2.5 小結47
第3章 Oracle重做日志(Redo)48
3.1 Redo功能用途48
3.2 Redo組成結構49
3.2.1 Redo Header49
3.2.2 Redo Record49
3.3 Redo產生場景53
3.3.1 Redo與DML事務53
3.3.2 Redo與Block Cleanout55
3.3.3 Redo與Block Write56
3.3.4 Redo與Hot Backup56
3.3.5 Redo與Direct Load56
3.3.6 Redo與Nologging57
3.4 Redo優(yōu)化58
3.5 小結61
第4章 Oracle事務與回滾段62
4.1 Oracle事務62
4.1.1 Oracle事務概覽62
4.1.2 Oracle事務ACID原則63
4.1.3 Oracle事務與回滾段運行機制64
4.2 Oracle回滾段70
4.2.1 回滾段與一致性讀70
4.2.2 回滾段與事務鎖定71
4.2.3 回滾段與塊清除72
4.3 Oracle事務恢復73
4.3.1 回滾操作下的事務恢復73
4.3.2 進程崩潰下的事務恢復74
4.3.3 實例崩潰下的事務恢復75
4.3.4 數(shù)據(jù)庫異常關閉下的事務恢復75
4.4 Oracle回滾段特殊恢復76
4.4.1 Oracle回滾段特殊恢復隱藏參數(shù)77
4.4.2 Oracle回滾段特殊恢復場景78
4.4.3 Oracle回滾段特殊恢復實戰(zhàn)80
4.5 小結81
第二篇 優(yōu)化篇
第5章 Oracle SQL優(yōu)化84
5.1 Oracle SQL游標84
5.1.1 私有SQL游標84
5.1.2 共享SQL游標85
5.1.3 Library Cache中的SQL游標85
5.1.4 SQL游標與Session游標緩存區(qū)88
5.2 Oracle SQL解析與執(zhí)行91
5.2.1 Oracle SQL解析91
5.2.2 Oracle SQL執(zhí)行93
5.3 Oracle表連接查詢96
5.3.1 NESTED LOOPS97
5.3.2 HASH JOIN97
5.3.3 SORT MERGE98
5.4 Oracle統(tǒng)計信息98
5.4.1 默認統(tǒng)計信息98
5.4.2 手動搜集統(tǒng)計信息99
5.5 Oracle直方圖102
5.5.1 直方圖概要102
5.5.2 直方圖優(yōu)化103
5.6 Oracle提示107
5.6.1 Oracle提示的語法及使用108
5.6.2 Oracle提示失效場景108
5.7 Oracle SQL跟蹤109
5.7.1 10046事件跟蹤109
5.7.2 SQL跟蹤與Tkprof112
5.8 小結113
第6章 Oracle CBO優(yōu)化114
6.1 CBO優(yōu)化器模式與CPU成本114
6.1.1 CBO優(yōu)化器模式114
6.1.2 CBO優(yōu)化器模式下的執(zhí)行計劃調整115
6.1.3 CPU成本121
6.1.4 CPU成本啟用124
6.2 謂詞選擇率與基數(shù)計算124
6.2.1 單謂詞選擇率與基數(shù)計算124
6.2.2 多謂詞選擇率與基數(shù)計算129
6.3 表連接選擇率與基數(shù)計算132
6.3.1 表連接選擇率與基數(shù)計算解析132
6.3.2 表連接選擇率與基數(shù)計算驗證134
6.4 Oracle查詢轉換提示136
6.4.1 dynamic_sampling提示136
6.4.2 leading與ordered提示138
6.4.3 index提示140
6.4.4 index_join提示141
6.4.5 index_ffs提示142
6.4.6 index_ss提示144
6.4.7 index_combine提示145
6.4.8 use_concat提示147
6.4.9 expand與no_expand提示148
6.4.10 merge與no_merge提示148
6.4.11 unnest與no_unnest提示150
6.4.12 push_pred與no_push_pred提示151
6.4.13 push_subq與no_push_subq提示152
6.4.14 pq_distribute提示155
6.4.15 driving_site提示158
6.5 小結159
第三篇 方法篇
第7章 Oracle備份恢復162
7.1 備份恢復與日志記錄體系162
7.1.1 Oracle日志記錄體系162
7.1.2 Oracle備份恢復與日志記錄體系166
7.2 備份恢復與物理文件183
7.2.1 備份恢復與控制文件184
7.2.2 備份恢復與數(shù)據(jù)文件(頭)201
7.2.3 備份恢復與日志文件(頭)204
7.3 備份恢復實現(xiàn)205
7.3.1 Shutdown Clean恢復206
7.3.2 Shutdown Abort(Crash)恢復210
7.3.3 冷備恢復213
7.3.4 熱備恢復216
7.4 制定RMAN備份恢復計劃224
7.4.1 RMAN備份策略制定224
7.4.2 RMAN備份腳本227
7.4.3 RMAN日常備份腳本228
7.5 小結235
第8章 Oracle自動化運維管理系統(tǒng)236
8.1 Oracle自動化查詢管理系統(tǒng)236
8.1.1 查詢表空間使用情況237
8.1.2 查詢Lock鎖定信息239
8.1.3 查詢事務運行狀態(tài)240
8.1.4 查詢LibraryCache命中率241
8.1.5 查詢Bu