第1章 數據庫的啓動和關閉 1
1.1 數據庫的啓動 1
1.1.1 啓動數據庫到NOMOUNT狀態的過程 2
1.1.2 啓動數據庫到MOUNT狀態 18
1.1.3 啓動數據庫OPEN階段 26
1.2 數據庫的訪問 37
1.2.1 客戶端的TNSNAMES.ORA文件配置 37
1.2.2 服務器端的監聽器文件listener.ora配置 39
1.2.3 通過不同服務器名對數據庫的訪問 41
1.2.4 動態監聽器注冊服務 42
1.3 數據庫的關閉 46
1.3.1 數據庫關閉的步驟 46
1.3.2 幾種關閉方式的對比 48
第2章 控製文件與數據庫初始化 51
2.1 控製文件的內容 51
2.2 SCN 53
2.2.1 SCN的定義 53
2.2.2 SCN的獲取方式 53
2.2.3 SCN的進一步說明 54
2.3 檢查點(Checkpoint) 57
2.3.1 檢查點(Checkpoint)的工作原理 57
2.3.2 常規檢查點與增量檢查點 59
2.3.3 LOG_CHECKPOINT_TO_ALERT參數 63
2.3.4 控製文件與數據文件頭信息 64
2.3.5 數據庫的啓動驗證 66
2.3.6 使用備份的控製文件 70
2.3.7 FAST_START_MTTR_TARGET 71
2.3.8 關於檢查點執行的案例 74
2.3.9 Oracle 10g自動檢查點調整 75
2.3.10 檢查點信息及恢復起點 78
2.3.11 正常關閉數據庫的狀況 78
2.3.12 數據庫異常關閉的情況 80
2.3.13 數據庫並行恢復案例一則 82
2.3.14 判斷一個死事務的恢復進度 85
2.4 數據庫的初始化 86
2.4.1 bootstrap$及數據庫初始化過程 86
2.4.2 bootstrap$的定位 88
2.4.3 Oracle中獨一無二的Cache對象 89
2.4.4 Oracle數據庫的引導 91
2.4.5 係統對象與bootstrap$ 92
2.4.6 bootstrap$的重要性 94
2.4.7 BBED工具的簡要介紹 95
2.4.8 壞塊的處理與恢復 97
第3章 參數及參數文件 103
3.1 初始化參數的分類 103
3.1.1 推導參數(Derived Parameters) 103
3.1.2 操作係統依賴參數 104
3.1.3 可變參數 104
3.1.4 初始化參數的獲取 105
3.2 參數文件 107
3.2.1 PFILE和SPFILE 108
3.2.2 獲取參數的視圖 110
3.2.3 SPFILE的創建 111
3.2.4 SPFILE的搜索順序 112
3.2.5 使用PFILE/SPFILE啓動數據庫 112
3.2.6 修改參數 113
3.2.7 解決SPFILE參數修改錯誤 118
3.2.8 重置SPFILE中設置的參數 120
3.2.9 判斷是否使用瞭SPFILE 120
3.2.10 SPFILE的備份與恢復 121
3.2.11 Oracle 11g參數文件恢復 127
3.2.12 如何設置Events事件 128
3.2.13 導齣SPFILE文件 129
3.3 診斷案例之一:參數文件 131
3.3.1 登錄係統檢查告警日誌文件 131
3.3.2 嘗試重新啓動數據庫 132
3.3.3 檢查數據文件 132
3.3.4 MOUNT數據庫,檢查係統參數 133
3.3.5 檢查參數文件 133
3.3.6 再次檢查alert文件 134
3.3.7 修正PFILE 135
3.3.8 啓動數據庫 135
3.4 診斷案例之二:RAC環境參數文件 135
3.4.1 數據庫資源異常 135
3.4.2 問題的發現 136
3.4.3 參數文件問題的解決 137
第4章 數據字典 138
4.1 數據字典概述 138
4.2 內部RDBMS(X$)錶 138
4.3 數據字典錶 141
4.4 靜態數據字典視圖 145
4.4.1 靜態數據字典視圖的分類 145
4.4.2 靜態數據字典視圖的內部實現 146
4.4.3 常用數據字典視圖舉例 148
4.5 動態性能視圖 151
4.5.1 GV$和V$視圖 151
4.5.2 GV_$、V_$視圖和V$、GV$同義詞 152
4.5.3 進一步的說明 156
4.5.4 動態性能視圖與數據庫啓動 157
4.6 最後的驗證 157
4.6.1 V$PARAMETER的結構 157
4.6.2 視圖還是同義詞 158
4.6.3 Oracle如何通過同義詞定位對象 159
第5章 內存管理 162
5.1 PGA管理 162
5.1.1 什麼是PGA 162
5.1.2 UGA與CGA 163
5.1.3 PGA管理技術的變遷 165
5.1.4 參數的設置與內存分配 166
5.1.5 自動PGA管理實現原理 169
5.1.6 PGA的調整建議 173
5.1.7 PGA的轉儲 176
5.2 SGA管理 178
5.2.1 SGA的組成 179
5.2.2 SGA與共享內存 186
5.2.3 SGA管理的變遷 191
5.3 Oracle的內存分配和使用 204
5.3.1 診斷案例一:SGA與SWAP 205
5.3.2 診斷案例二:SGA設置過高導緻的係統故障 208
5.3.3 診斷案例三:如何診斷和解決CPU高度消耗(100%)問題 212
第6章 Buffer Cache與Shared Pool原理 215
6.1 Buffer Cache原理 215
6.1.1 LRU與Dirty List 215
6.1.2 Cache Buffers LRU Chain閂鎖競爭與解決 220
6.1.3 Cache Buffer Chain閂鎖競爭與解決 221
6.2 Shared Pool的基本原理 233
6.2.1 Oracle 11g新特性:Result Cache 234
6.2.2 Shared Pool的設置說明 238
6.2.3 Oracle 9i子緩衝池的增強 243
6.2.4 Oracle 10g共享池管理的增強 245
6.2.5 瞭解X$KSMSP視圖 247
6.2.6 Shared Pool的轉儲與分析 250
6.2.7 診斷和解決ORA-04031錯誤 262
6.2.8 Library Cache Pin及Library Cache Lock分析 273
6.2.9 診斷案例一:version_count過高造成的Latch競爭解決 281
6.2.10 V$SQL與V$SQLAREA視圖 287
6.2.11 Oracle 10g中version_count過高的診斷 292
6.2.12 診斷案例二:臨時錶引發的競爭 297
6.2.13 小結 299
第7章 重做(Redo) 300
7.1 Redo的作用 300
7.2 Redo的原理 301
7.3 Redo與Latch 302
7.4 Oracle 9i Redo的增強 303
7.5 Oracle 10g Redo的增強 304
7.6 Redo的內容 307
7.7 産生多少Redo 310
7.8 Redo寫的觸發條件 314
7.8.1 每3秒超時(Timeout) 314
7.8.2 閾值達到 314
7.8.3 用戶提交 315
7.8.4 在DBWn寫之前 315
7.9 Redo Log Buffer的大小設置 316
7.10 commit做瞭什麼? 317
7.11 日誌的狀態 318
7.12 日誌的塊大小 321
7.13 日誌文件的大小 322
7.14 如何調整日誌文件大小 324
7.15 為什麼熱備份期間産生的Redo要比正常的多 326
7.16 能否不生成Redo 329
7.17 Redo故障的恢復 333
7.17.1 丟失非活動日誌組的故障恢復 333
7.17.2 丟失活動或當前日誌文件的恢復 335
7.18 診斷案例一:通過Clear日誌恢復數據庫 339
7.19 診斷案例二:日誌組過度激活的診斷 342
附錄 數值在Oracle的內部存儲 344
第8章 迴滾與撤銷 347
8.1 什麼是迴滾和撤銷 347
8.2 迴滾段存儲的內容 348
8.3 並發控製和一緻性讀 349
8.4 迴滾段的前世今生 350
8.5 Oracle 10g的UNDO_RETENTION管理增強 355
8.6 UNDO_RETENTION的內部實現 357
8.7 Oracle 10g In Memory Undo新特性 358
8.8 Oracle 11g UNDO錶空間備份增強 360
8.9 迴滾機製的深入研究 361
8.9.1 從DML更新事務開始 361
8.9.2 獲得事務信息 362
8.9.3 獲得迴滾段名稱並轉儲段頭信息 362
8.9.4 獲得跟蹤文件信息 363
8.9.5 轉儲前鏡像信息 364
8.9.6 轉儲數據塊信息 367
8.9.7 塊清除(Block Cleanouts) 369
8.9.8 提交之後的UNDO信息 373
8.10 Oracle 9i閃迴查詢的新特性 375
8.11 使用ERRORSTACK進行錯誤跟蹤 377
8.12 Oracle 10g閃迴查詢特性的增強 378
8.13 ORA-01555成因與解決 382
8.14 Oracle 11g閃迴數據歸檔 389
8.15 AUM下如何重建UNDO錶空間 393
8.16 使用Flashback Query恢復誤刪除數據 394
8.17 診斷案例之一:釋放過度擴展的UNDO空間 396
8.18 特殊情況的恢復 399
8.19 診斷案例之二:迴滾段損壞的恢復 402
第9章 等待事件 406
9.1 等待事件的源起 406
9.2 從等待發現瓶頸 408
9.2.1 V$SESSION 和V$SESSION_WAIT 409
9.2.2 V$SESSION_EVENT和V$SYSTEM_EVENT 410
9.2.3 Oracle 11g實時SQL監控 411
9.2.4 從V$SQLTEXT中追蹤 414
9.2.5 捕獲相關SQL 415
9.3 Oracle 10g的增強 417
9.3.1 新增v$session_wait_history視圖 418
9.3.2 ASH新特性 419
9.3.3 自動負載信息庫:AWR的引入 425
9.3.4 自動數據庫診斷監控:ADDM的引入 436
9.4 頂級等待事件 436
9.5 重要等待事件 439
9.5.1 db file sequential read(數據文件順序讀取) 439
9.5.2 db file scattered read等待事件 440
9.5.3 direct path read/write(直接路徑讀/寫) 444
9.5.4 日誌文件相關等待 453
9.5.5 Enqueue(隊列等待) 458
9.5.6 Latch Free(閂鎖釋放) 462
9.5.7 Oracle 10g/11g Latch機製的變化 467
第10章 性能診斷與SQL優化 471
10.1 使用AUTOTRACE功能輔助SQL優化 471
10.1.1 AUTOTRACE功能的啓用 471
10.1.2 Oracle 10g AUTOTRACE功能的增強 473
10.1.3 AUTOTRACE功能的內部操作 475
10.1.4 使用AUTOTRACE功能輔助SQL優化 477
10.2 獲取SQL執行計劃的方法 479
10.2.1 通過V$SQL_PLAN獲得執行計劃 479
10.2.2 EXPLAIN PLAN FOR與DBMS_XPLAN 483
10.2.3 通過AWR獲取SQL執行計劃 487
10.3 捕獲問題SQL解決過度CPU消耗問題 488
10.3.1 使用vmstat檢查係統當前情況 488
10.3.2 使用TOP工具輔助診斷 489
10.3.3 檢查進程數量 490
10.3.4 登錄數據庫 490
10.3.5 捕獲相關SQL 491
10.3.6 創建新的索引以消除全錶掃描 494
10.3.7 觀察係統狀況 494
10.3.8 性能何以提高 495
10.3.9 小結 497
10.4 使用SQL_TRACE/10046事件進行數據庫診斷 497
10.4.1 SQL_TRACE及10046事件的基礎介紹 497
10.4.2 診斷案例之一:隱式轉換與索引失效 502
10.4.3 診斷案例之二:跟蹤後颱錯誤 506
10.4.4 10046與等待事件 509
10.5 使用物化視圖進行翻頁性能調整 514
10.5.1 係統環境 514
10.5.2 問題描述 514
10.5.3 捕獲排序SQL語句 515
10.5.4 確定典型問題SQL 515
10.5.5 選擇解決辦法 517
10.5.6 進一步的調整優化 518
10.5.7 小結 520
10.6 一次橫跨兩岸的問題診斷 520
10.6.1 第一封求助郵件 520
10.6.2 第一次迴復 523
10.6.3 進一步信息提供 523
10.6.4 進一步的診斷 524
10.6.5 最後的問題定位 525
10.6.6 小結 525
10.7 總結 525
· · · · · · (
收起)