Oracle編程藝術 深入理解數據庫體系結構 第3版
內容描述
<內容簡介>
本書是一本關於Oracle數據庫體系結構的圖書,涵蓋了所有重要的Oracle體系結構特性,包括文件、內存結構和進程,鎖和閂,事務、並發和多版本,表和索引,數據類型,分區和並行,以及數據加密等,並利用具體的例子來全面介紹每個特性,不僅討論了各個特性是什麼,還說明瞭它是如何工作的,如何使用這個特性來開發軟件,以及有關的常見陷阱。本書的讀者對像是數據庫開發人員。
<目錄>
編程藝術探索 品位前 言 第1章 開發成功的Oracle應用 1 1.1 我的方法 2 1.2 黑盒方法 3 1.3 開發數據庫應用的正確(和不正確)方法 11 1.3.1 瞭解 Oracle體系結構 11 1.3.2 理解並發控制 21 1.3.3 多版本控制 25 1.3.4 數據庫獨立性 31 1.3.5 怎麽能讓應用運行得更快 45 1.3.6 DBA與開發人員的關系 48 1.4 小結 48 第2章 體系結構概述 50 2.1 定義數據庫和實例 51 2.2 連接 Oracle 59 2.2.1 專用服務器 59 2.2.2 共享服務器 61 2.2.3 TCP/IP連接的基本原理 63 2.3 可插拔式數據庫 65 2.3.1 降低資源用量 66 2.3.2 降低維護開銷 66 2.4 可插拔式數據庫的不同之處 67 2.5 小結 67 第3章 文件 68 3.1 參數文件 69 3.1.1 什麽是參數 70 3.1.2 init.ora 參數文件 73 3.1.3 服務器參數文件 75 3.2 跟蹤文件 823.2.1 計劃內的、由用戶請求所產生的跟蹤文件 83 3.2.2 針對內部錯誤生成的跟蹤文件 88 3.2.3 跟蹤文件小結 92 3.3 警告文件 92 3.4 數據文件 95 3.4.1 簡要回顧文件系統機制 96 3.4.2 Oracle數據庫中的存儲層次體系 97 3.4.3 字典管理和本地管理的表空間 100 3.5 臨時文件 102 3.6 控制文件 104 3.7 重做日誌文件 104 3.7.1 在線重做日誌 105 3.7.2 歸檔重做日誌 107 3.8 密碼文件 108 3.9 修改跟蹤文件 111 3.10 閃回日誌 112 3.10.1 閃回數據庫 112 3.10.2 快速恢復區 113 3.11 DMP文件(EXP/IMP文件) 114 3.12 數據泵文件 115 3.13 平面文件 117 3.14 小結 118 第4章 內存結構 119 4.1 進程全局區和用戶全局區 120 4.1.1 手動 PGA內存管理 121 4.1.2 自動 PGA內存管理 1274.1.3 如何選擇手動和自動內存管理 137 4.1.4 PGA和 UGA小結 138 4.2 系統全局區 138 4.2.1 固定 SGA 區 143 4.2.2 重做緩沖區 143 4.2.3 塊緩沖區緩存 145 4.2.4 共享池 151 4.2.5 大池 153 4.2.6 Java池 154 4.2.7 流池 155 4.2.8 SGA內存管理 155 4.3 小結 160 第5章 Oracle進程 161 5.1 服務器進程 161 5.1.1 專用服務器連接 162 5.1.2 共享服務器連接 164 5.1.3 數據庫常駐連接池 165 5.1.4 連接與會話 165 5.1.5 專用服務器、共享服務器和數據庫常駐連接池 170 5.1.6 專用/共享服務器小結 173 5.2 後台進程 174 5.2.1 特定任務後台進程 175 5.2.2 工具後台進程 185 5.3 從屬進程 188 5.3.1 I/O從屬進程 188 5.3.2 Pnnn:並行查詢執行服務器 189 5.4 小結 189 第6章 鎖和閂 190 6.1 什麽是鎖 190 6.2 鎖的問題 193 6.2.1 丟失更新 193 6.2.2 悲觀鎖 194 6.2.3 樂觀鎖 195 6.2.4 樂觀鎖還是悲觀鎖 201 6.2.5 阻塞 202 6.2.6 死鎖 205 6.2.7 鎖升級 209 6.3 鎖類型 209 6.3.1 DML鎖 210 6.3.2 DDL鎖 219 6.3.3 閂 223 6.3.4 互斥鎖 231 6.3.5 手動鎖定和用戶定義鎖 232 6.4 小結 233 第7章 並發與多版本控制 234 7.1 什麽是並發控制 234 7.2 事務隔離級別 235 7.2.1 READ UNCOMMITTED 236 7.2.2 READ COMMITTED 238 7.2.3 REPEATABLE READ 239 7.2.4 SERIALIZABLE 241 7.2.5 READ ONLY 243 7.3 多版本讀一致性的含義 244 7.3.1 數據倉庫中一種常見但有問題的方法 244 7.3.2 解釋熱表上超出期望的 I/O 245 7.4 寫一致性 247 7.4.1 一致讀和當前讀 248 7.4.2 查看重啟動 250 7.4.3 為什麽重啟動對我們很重要 252 7.5 小結 253 第8章 事務 255 8.1 事務控制語句 255 8.2 原子性 257 8.2.1 語句級原子性 257 8.2.2 過程級原子性 259 8.2.3 事務級原子性 262 8.2.4 DDL與原子性 262 8.3 持久性 263 8.3.1 COMMIT 的 WRITE 擴展 263 8.3.2 非分佈式 PL/SQL代碼塊中的COMMIT 264 8.4 完整性約束和事務 266 8.4.1 IMMEDIATE 約束 266 8.4.2 DEFERRABLE 約束和級聯更新 266 8.5 不好的事務習慣 270 8.5.1 在循環中提交 270 8.5.2 使用自動提交 276 8.6 分佈式事務 277 8.7 自治事務 278 8.7.1 自治事務如何工作 279 8.7.2 何時使用自治事務 280 8.8 小結 283 第 9章 redo與 undo 284 9.1 什麽是 redo 285 9.2 什麽是 undo 286 9.3 redo和 undo如何協作 289 9.4 提交和回滾處理 293 9.4.1 COMMIT 做什麽 293 9.4.2 ROLLBACK 做什麽 299 9.5 分析 redo 300 9.5.1 測量 redo 301 9.5.2 能關掉重做日誌的生成嗎 302 9.5.3 為什麽我拿不到日誌空間 305 9.5.4 塊清除 307 9.5.5 日誌競爭 310 9.5.6 臨時表和 redo/undo 312 9.6 分析 undo 317 9.6.1 什麽操作會生成最多和最少的undo 317 9.6.2 ORA-01555: snapshot too old錯誤 319 9.7 小結 328 第10章 數據庫表 329 10.1 表類型 329 10.2 術語 331 10.2.1 段 331 10.2.2 段空間管理 333 10.2.3 高水位線 334 10.2.4 FREELIST 336 10.2.5 PCTFREE 和 PCTUSED 339 10.2.6 LOGGING 和 NOLOGGING 342 10.2.7 INITRANS 和 MAXTRANS 343 10.3 堆組織表 343 10.4 索引組織表 346 10.5 索引聚簇表 359 10.6 散列聚簇表 366 10.7 有序散列聚簇表 375 10.8 嵌套表 377 10.8.1 嵌套表語法 378 10.8.2 嵌套表存儲 384 10.8.3 嵌套表小結 387 10.9 臨時表 387 10.9.1 12c之前的統計信息 391 10.9.2 12c之後的統計信息 395 10.9.3 臨時表小結 398 10.10 對象表 399 10.11 小結 405 第11章 索引 406 11.1 Oracle索引概述 406 11.2 BTree索引 408 11.2.1 索引鍵壓縮 411 11.2.2 反向鍵索引 413 11.2.3 降序索引418 11.2.4 什麽情況下應該使用BTree索引 420 11.2.5 B*Tree小結 430 11.3 位圖索引 430 11.3.1 什麽情況下應該使用位圖索引 431 11.3.2 位圖聯結索引 435 11.3.3 位圖索引小結 437 11.4 基於函數的索引 438 11.4.1 一個簡單的例子 438 11.4.2 只對部分行建立索引 446 11.4.3 實現有選擇的唯一性 448 11.4.4 關於 ORA-01743的警告 448 11.4.5 基於函數的索引小結 449 11.5 應用域索引 450 11.6 不可見的索引 451 11.7 同列上的多個索引 452 11.8 在擴展列上使用索引 453 11.8.1 使用虛擬列的方法 454 11.8.2 使用基於函數索引的方法 456 11.9 關於索引的常見問題和各種傳言 457 11.9.1 視圖能使用索引嗎 457 11.9.2 Null和索引能協作嗎 457 11.9.3 外鍵是否應該加索引 460 11.9.4 為什麽沒有使用我的索引 461 11.9.5 傳言:索引中從不重用空間 466 11.9.6 傳言:最有差別的元素應該在最前面 469 11.10 小結 472 第12章 數據類型 473 12.1 Oracle數據類型概述 473 12.2 字符和二進制串類型 475 12.2.1 NLS概述 476 12.2.2 字符串 479 12.3 二進制串:RAW 類型 485 12.4 擴展的數據類型 487 12.5 數值類型 489 12.5.1 NUMBER 類型的語法和用法 491 12.5.2 BINARY_FLOAT/BINARY_DOUBLE 類型的語法和用法 494 12.5.3 非固有數值類型 495 12.5.4 性能考慮 495 12.6 LONG 類型 497 12.6.1 LONG 和 LONG RAW 類型的限制 497 12.6.2 處理遺留的 LONG 類型 498 12.7 DATE、TIMESTAMP 和 INTERVAL類型 502 12.7.1 格式 503 12.7.2 DATE 類型 504 12.7.3 TIMESTAMP 類型 509 12.7.4 INTERVAL 類型 515 12.8 LOB 類型 518 12.8.1 內部 LOB 518 12.8.2 BFILE 531 12.9 ROWID/UROWID 類型 533 12.10 小結 533 第13章 分區 535 13.1 分區概述 535 13.1.1 提高可用性 536 13.1.2 減少管理負擔 538 13.1.3 增強語句性能 541 13.2 表分區機制 543 13.2.1 區間分區 544 13.2.2 散列分區 546 13.2.3 列表分區 550 13.2.4 間隔分區 552 13.2.5 引用分區 557 13.2.6 間隔引用分區 561 13.2.7 虛擬列分區 563 13.2.8 組合分區 564 13.2.9 行移動 566 13.2.10 表分區機制小結 568 13.3 索引分區 569 13.3.1 本地索引與全局索引 570 13.3.2 本地索引 570 13.3.3 全局索引 575 13.4 再論分區和性能 590 13.5 一些簡化維護的特性 595 13.5.1 多分區管理操作 595 13.5.2 級聯截斷 597 13.5.3 級聯交換 599 13.6 審計和段空間壓縮 600 13.7 小結 601 第14章 並行執行 603 14.1 何時使用並行執行 604 14.2 Oracle Exadata 606 14.3 並行查詢 606 14.4 並行 DML 612 14.5 並行 DDL 615 14.5.1 並行 DDL和使用外部表的數據加載 616 14.5.2 並行 DDL和擴展截斷 617 14.6 過程並行化 625 14.6.1 並行管道函數 626 14.6.2 DIY並行化 629 14.6.3 老式 DIY並行化 632 14.7 小結 635 第15章 數據加載和卸載 637 15.1 外部表 637 15.1.1 建立外部表 638 15.1.2 處理錯誤 645 15.1.3 使用外部表加載不同的文件 648 15.1.4 多用戶問題 649 15.1.5 預處理 650 15.1.6 外部表總結 658 15.2 數據泵卸載 659 15.3 SQLLDR 660 15.3.1 用 SQLLDR加載數據的常見問題 664 15.3.2 SQLLDR警告 686 15.3.3 SQLLDR小結 686 15.4 平面文件卸載 687 15.5 小結 694