具体描述
本书揭示了Oracle 数据库内部的核心信息,这些信息恰好是每个DBA 排除故障所必需的,不多不少。内容涉及Oracle 核心架构基础:多少开销是合理的?如何认识到你做得太多?如何预见故障?为什么发生这些故障?等等。
本书适合DBA、QA、架构师、开发人员等人群阅读。
作者简介
作者简介:
Jonathan Lewis
世界级Oracle资深专家,有20多年Oracle关系数据库管理经验。主要从事自由咨询顾问工作,其Oracle数据库引擎方面的培训课程和研讨会世界闻名。Jonathan曾是UKOUG(UK Oracle User Group)的负责人,他著有多本Oracle方面的畅销书,并维护自己的Oracle技术博客。
译者简介:
杨志洪(网名boypoo)
Oracle ACE、MBA、PMP、ITPUB论坛版主、OOW演讲嘉宾,有十余年电信、银行、保险等大型行业核心系统Oracle数据库运维支持经验,掌握ITIL运维体系,擅长端到端性能优化、复杂问题处理。现主要从事数据架构、高可用及容灾咨询服务。个人网站:http://zhihong.org。
熊军(网名老熊)
Oracle ACE,ITPUB论坛版主,现从事Oracle第三方技术支持工作,擅长Oracle数据库故障诊断处理和性能优化。个人网站:http://www.laoxiong.net。
耿永辉(网名老耿)
OCM认证专家,擅长Oracle数据库故障、性能诊断,对Oracle SGA内部数据结构和数据文件存储结构均有深入研究。
目录信息
第1章 准备开始 1
1.1 Oracle的流程 1
1.2 Oracle实战 4
1.3 小结 4
第2章 redo和undo 5
2.1 基本数据改变 5
2.1.1 数据改变的方法 6
2.1.2 示例 6
2.1.3 任务报告 9
2.1.4 观察总结 10
2.2 ACID 11
2.3 redo复杂度 13
2.4 undo复杂度 18
2.4.1 读一致性 19
2.4.2 回滚 19
2.5 小结 21
第3章 事务与一致性 22
3.1 冲突解决 22
3.2 事务与undo 23
3.2.1 事务的开始与结束 24
3.2.2 事务表 25
3.2.3 undo块回顾 27
3.3 数据块访问与undo 30
3.3.1 设置场景 30
3.3.2 事务列表 31
3.3.3 并发动作 33
3.4 提交SCN 38
3.4.1 提交清除 39
3.4.2 延迟块清除 41
3.4.3 事务表回滚 44
3.5 大对象 48
3.6 小结 49
第4章 锁与闩锁 50
4.1 事情有先有后 50
4.1.1 数组 50
4.1.2 指针 51
4.1.3 链表 51
4.1.4 散列表 53
4.2 闩锁 56
4.2.1 闩锁背后的逻辑 56
4.2.2 闩锁活动统计 59
4.2.3 闩锁可扩展性 63
4.3 锁 64
4.3.1 基础结构 65
4.3.2 V$lock的图形展示 66
4.3.3 死锁 69
4.3.4 锁模式 72
4.3.5 保护锁的闩锁 73
4.3.6 KGL锁(和pin) 75
4.3.7 锁和pin 75
4.4 小结 77
第5章 缓存和复制 79
5.1 内存管理 79
5.1.1 granule 80
5.1.2 granule和缓冲区 81
5.2 多个数据块缓存 83
5.2.1 granule和缓冲池 84
5.2.2 缓冲池 85
5.3 工作集 86
5.4 LRU/TCH算法 88
5.4.1 LRU/TCH实战 89
5.4.2 重新链接缓冲区 90
5.5 REPL_AUX 92
5.6 查找数据 94
5.6.1 pin住缓冲区 96
5.6.2 逻辑I/O 98
5.6.3 更新(update) 99
5.6.4 载入散列链 100
5.6.5 读一致性拷贝 100
5.6.6 物理I/O 101
5.6.7 表扫描 102
5.7 小结 103
第6章 写入和恢复 105
6.1 目标 105
6.2 日志写进程 106
6.2.1 日志写进程写入 108
6.2.2 PL/SQL优化 110
6.2.3 ACID异常 113
6.2.4 提交改进 113
6.2.5 过程 115
6.2.6 重做日志浪费 118
6.2.7 私有重做 119
6.3 数据库写进程 120
6.3.1 缓冲区头部 121
6.3.2 检查点队列 121
6.3.3 增量检查点 123
6.4 数据库写进程的交互 124
6.4.1 数据库写进程与日志写进程 124
6.4.2 数据库写进程和LRU 125
6.4.3 检查点和队列 128
6.4.4 缓冲区头部队列 132
6.4.5 检查点和日志文件 133
6.5 恢复 135
6.5.1 介质恢复 136
6.5.2 备用数据库 137
6.5.3 闪回数据库 137
6.5.4 副作用 138
6.6 小结 139
第7章 解析与优化 141
7.1 理解SQL代码 141
7.1.1 解析 141
7.1.2 优化 142
7.1.3 解释tkprof Summaries 143
7.2 数据字典缓存 145
7.2.1 结构 149
7.2.2 数据字典缓存活动 151
7.3 什么是解析调用 154
7.3.1 Cursor Caching 155
7.3.2 持有游标 157
7.4 库缓存 158
7.4.1 共享池结构 160
7.4.2 精妙的共享池结构 163
7.4.3 那么,行动吧! 168
7.5 解析和优化 170
7.5.1 executing、locking和pinning 173
7.5.2 互斥锁 174
7.6 小结 175
第8章 RAC及“缺陷” 176
8.1 RAC示意图 177
8.2 重点是什么 180
8.2.1 高可用性 180
8.2.2 可扩展性 181
8.2.3 网格 182
8.3 它如何工作 183
8.3.1 全局资源目录 183
8.3.2 Master和Shadow 186
8.3.3 GCS和GES 189
8.3.4 缓存融合 190
8.3.5 后果 193
8.4 恢复 195
8.5 序列 196
8.5.1 缓存序列 197
8.5.2 深入解析序列 197
8.5.3 有序的序列 199
8.5.4 序列和索引 201
8.6 小结 203
附录A 转储与调试 205
词汇表 216
索引 224
· · · · · · (收起)
读后感
去年大概8月份的时候, 我看完了Cost-Based Oracle Fundamentals,在SQL Tuning方面,我是藉由这书入门的,一本经典好书可以帮助提升在某一方面的层次。之后我想找Jonathan Lewis的一本更旧十年前的书看 – Practical Oracle8i™: Building Efficient Databases,当时还在豆瓣...
去年大概8月份的时候, 我看完了Cost-Based Oracle Fundamentals,在SQL Tuning方面,我是藉由这书入门的,一本经典好书可以帮助提升在某一方面的层次。之后我想找Jonathan Lewis的一本更旧十年前的书看 – Practical Oracle8i™: Building Efficient Databases,当时还在豆瓣...
很多事情,你可能很困惑,为啥一个并发控制,有这么多概念:enqueue,lock,latch,pin。为啥会有library cache lock latch,为啥要引入mutex,如何通过redo/undo实现acid,保证读写互不阻塞,为啥parse这么耗资源,在rac下为啥要小心sequence和unique index等待,非常有料,等...
很多事情,你可能很困惑,为啥一个并发控制,有这么多概念:enqueue,lock,latch,pin。为啥会有library cache lock latch,为啥要引入mutex,如何通过redo/undo实现acid,保证读写互不阻塞,为啥parse这么耗资源,在rac下为啥要小心sequence和unique index等待,非常有料,等...
去年大概8月份的时候, 我看完了Cost-Based Oracle Fundamentals,在SQL Tuning方面,我是藉由这书入门的,一本经典好书可以帮助提升在某一方面的层次。之后我想找Jonathan Lewis的一本更旧十年前的书看 – Practical Oracle8i™: Building Efficient Databases,当时还在豆瓣...
用户评价
这本《Oracle核心技术》的封面设计得相当有冲击力,那种深邃的蓝色调和金色的字体搭配,立刻就给人一种专业、权威的感觉。我带着极大的期待翻开了它,希望能系统性地梳理我对Oracle数据库从基础到深层次理解的脉络。然而,实际阅读体验却让我有些摸不着头脑。书中似乎将大量的篇幅聚焦在了某些非常晦涩难懂的底层架构细节上,比如内存结构的管理机制、后台进程的具体运作流程,这些内容固然重要,但讲解的深度和广度,对于一个主要负责日常应用开发和性能调优的DBA或开发者来说,显得有些过饱和了。举个例子,关于SGA和PGA的划分与动态调整策略,书中用了好几页篇幅去描述操作系统级别的内存映射和内核交互,这对于我主要想了解的SQL执行计划优化和索引设计策略来说,简直是“牛刀杀鸡”。我期待的是一套清晰的、可操作的“如何优化慢查询”的实战手册,或者至少是针对新版本特性(比如In-Memory Column Store)的深入剖析,但更多接收到的是对数据库“为什么能这么做”的理论深挖,而不是“我该怎么用它做得更好”的实践指导。整体感觉像是走进了一个数据库科学家的实验室,而不是一个工程师的工具箱。
我尝试从性能优化的角度去挖掘这本书的价值,毕竟Oracle的性能调优是永恒的话题。我带着“如何精通索引类型和使用场景”的明确目标去阅读,期待能看到B-Tree、位图索引、函数索引以及全文索引之间的优劣势对比,以及在何种业务场景下应该优先选择哪种索引。遗憾的是,书中对索引的介绍非常基础,很多篇幅依然停留在“什么是索引”这种概念层面,对于如何根据查询的SELECTIVE(选择性)和Cardinality(基数)来选择最合适的索引类型,缺乏深入的实战指导。更不用提对于最新的索引技术,比如Oracle 19c引入的隐式索引、自适应索引等,几乎没有任何提及。总而言之,这本书的内容深度与书名所承诺的“核心技术”存在明显的落差,它更像是一本面向初级数据库管理员的“入门导论”,而非能够帮助资深从业者突破瓶颈的“核心宝典”。我最终还是需要回到Oracle官方的“Performance Tuning Guide”来寻找我真正需要的实战技巧。
在阅读体验上,这本书的逻辑跳跃性非常大,让人难以形成连贯的学习路径。前一章还在详细讲解SQL的硬解析和软解析的区别,下一章画风突变,直接跳到了集群文件系统与ASM的底层块管理。这种结构让我感觉自己像是在一个巨大的图书馆里迷路,找不到一条清晰的主线索。例如,我希望能够系统地学习如何利用DBMS_XPLAN包来诊断复杂的嵌套查询性能问题,这本书虽然提到了执行计划,但对不同类型的代价模型(Cost Model)的解释不够清晰,尤其是当涉及到分区、物化视图等复杂对象的参与时,书中的解释显得力不从心。我更需要的是一个循序渐进的“诊断树”,告诉你遇到A情况看X视图,遇到B情况调整Y参数。但这本书给我的更多是分散的知识点,它们散落在不同的章节里,需要读者自己去费力地拼凑,这极大地增加了学习的门槛和挫败感。它没有很好地扮演一个“向导”的角色,而更像是一本“索引大全”。
这本书的行文风格,坦率地说,有一种浓厚的上世纪末技术文档的影子。大量的术语堆砌,对新引入的特性和功能介绍得非常保守,似乎作者对Oracle数据库的发展停滞在了某个版本,或者说,他对近五年来的技术革新兴趣缺缺。我特别关注了数据库安全方面的内容,希望能找到关于列级加密、数据脱敏或者更现代的审计策略的深入解析。结果发现,安全部分的处理非常简略,基本停留在传统的用户权限管理和口令策略层面。这对于我们这个时代,面对GDPR和国内日益严格的数据安全法规时,是远远不够的。我们现在需要的是如何利用数据库自身提供的工具,在不显著影响性能的前提下,实现数据的合规性存储和访问控制。这本书仿佛将我们带回了一个对数据安全认知还比较初级的时代,对于那些追求前沿安全实践的读者而言,它提供的价值极其有限,更像是收藏了一份“昨日黄花”的技术手册,而不是指引未来的航标。
初次接触数据库技术的我,本想借由这本书建立一个稳固的知识地基,毕竟“核心技术”四个字听起来就意味着涵盖了最本质的东西。我希望看到的是逻辑备份与恢复的完整生命周期讲解,特别是关于RMAN脚本编写和数据迁移的最佳实践。遗憾的是,书中对这些日常运维的“硬骨头”问题着墨不多。我记得我特别想弄明白在特定高可用场景下,Data Guard Broker的配置细节和切换流程,这直接关系到我们业务的连续性。但翻阅全书,关于Data Guard的描述更多停留在概念层面,比如“它如何同步数据”,而不是“在你的生产环境里,如何配置一个零数据丢失的物理备库,并处理常见的网络中断后的同步冲突”。这种理论与实践的脱节,让这本书的实用价值大打折扣。它更像是一本教科书,用来应付一场关于数据库原理的期末考试或许足够,但若想立马投入到解决真实的生产故障中,我恐怕还得依赖Stack Overflow或者官方文档的零散片段。我对书中那种过于学术化的语言风格感到疲惫,很多复杂的概念堆砌在一起,缺乏生动的案例来锚定。
翻译有少许错误,直接读原版应该会更好。书的内容相当棒,对于Oracle DBA相当有帮助
整个阅读的过程,像是一个反向工程的过程。作者通过抽丝剥茧般的分析,得出背后的实现细节。看着很爽快。 感叹一下,Oracle对hash + link的使用。 虽然大的实现方向每家RDBMS都差不多,但是对细节的考虑,成就了Oracle今天的高性能。
整个阅读的过程,像是一个反向工程的过程。作者通过抽丝剥茧般的分析,得出背后的实现细节。看着很爽快。 感叹一下,Oracle对hash + link的使用。 虽然大的实现方向每家RDBMS都差不多,但是对细节的考虑,成就了Oracle今天的高性能。
翻译有少许错误,直接读原版应该会更好。书的内容相当棒,对于Oracle DBA相当有帮助
翻译有少许错误,直接读原版应该会更好。书的内容相当棒,对于Oracle DBA相当有帮助