第一部分 基础原理篇 3
第1章 理解Oracle数据库和实例 3
1.1什么是Oracle数据库 3
1.2 Oracle数据库的物理结构 6
1.2.1 Invento 6
1.2.2口令文件 9
1.2.3参数文件 10
1.2.4控制文件 11
1.2.5在线日志文件 12
1.2.6数据文件 12
1.2.7归档日志文件 12
1.3实例和多实例数据库 13
1.3.1什么是数据库实例 13
1.3.2多实例数据库 16
1.4数据库后台进程 18
1.4.1进程结构 19
1.4.2后台进程的功能作介绍 20
1.4.3哪些后台进程可以杀 22
1.4.4是谁在执行SQL 27
第2章 理解DBCache 31
2.1什么是 DB Cache 33
2.2 DB Cache的分配和DBWR的相关算法 40
2.2.1 DB WRITER PROCESSES参数 41
2.2.2 DB Cache的几个主要的链和CKPT算法 43
2.2.3检索某个DB BLOCK的模拟算法 45
2.3 DB Cache相关的参数闩锁和等待事件 48
2.4 DB Cache优化的一些探讨 51
2.4.1 DB Cache和热块冲突 51
2.4.2使用KEEP POOL能改善CBC争用吗 54
2.4.3如何判断DB Cache是否足够 55
2.4.4 DB Cache优化要点 59
第3章 理解共享池 62
3.1共享池堆的内部结构 64
3.1.1进一步了解共享池 68
3.1.2共享池的子池技术 75
3.1.3字典缓存 78
3.1.4库缓存和游标 80
3.2共享池和游标 85
3.2.1游标与游标共享 86
3.2.2游标与SQL的执行 90
3.2.3游标共享和绑定变量 96
3.2.4 OPEN-CURSOR和OPEN-CURSORS参数 101
3.2.5 CURSOR-SPACE-FOR-TIME参数 102
3.2.6 SESSION CACHED CURSORS参数和OPEN CURSORS 103
3.2.7 CURSOR SHARING和游标共享 109
3.2.8游标的关闭 111
3.2.9互斥锁和游标 112
3.3共享池的相关参数 114
3.4共享池故障处理 115
3.4.1著名的ORA-4031 116
3.4.2其他共享池常见故障 125
3.5共享池优化的主要思路 128
第4章 理解控制文件 130
4.1控制文件的内部结构 130
4.1.1控制文件和控制文件事务 130
4.1.2控制文件自动扩展 132
4.1.3如何转储和分析控制文件 133
4.1.4文件头和控制文件信息 135
4.2故障处理和优化 136
4.2.1丢失或者损坏控制文件的处理方法 136
4.2.2控制文件的优化 138
第5章 理解REDO日志 140
5.1什么是REDO日志 140
5.2 REDO的基本原理 141
5.2.1介质恢复和实例恢复的基本概念 141
5.2.2变化矢量和REDO记录 143
5.2.3日志缓冲和LGWR 149
5.2.4日志切换和REDO日志文件 152
5.2.5事务提交和回滚的过程 156
5.3 REDO优化 157
5.3.1 BULK操作能减少REDO吗 157
5.3.2如何优化LOG FILE SYNC等待事件 166
5.3.3 SHUTDOWN ABORT无害吗 168
5.3.4关于REDO日志优化的建议 169
第6章 理解UNDO 172
6.1 UNDO的基本原理 172
6.1.1 UNDO表空间和回滚段 173
6.1.2 ITL和UNDO 175
6.1.3如何转储UNDO 176
6.1.4 UNDO自动管理是如何工作的 177
6.1.5系统回滚段的作用 178
6.1.6著名的ORA-1555 179
6.1.7回滚段手工管理 180
6.2如何分析和优化UNDO 181
第7章 理解PGA、临时表空间和排序 183
7.1基本概念 184
7.1.1临时表空间和临时段 184
7.1.2 PGA和排序 185
7.1.3 PGA和PGA AGGREGATETARGET 187
7.1.4你应该知道的PGA自动管理内幕 191
7.2 PGA优化的要点 193
第8章 理解ASM的结构 197
8.1什么是ASM 197
8.2 ASM的结构 201
8.2.1 ASM DISKHEADER的结构 201
8.2.2 ASM FILE DIRECTORY文件结构 203
8.2.3 ASM ALIAS DIRECTORY文件结构 207
8.2.4 ASM DISK DIRECTORY文件结构 209
8.2.5从ASM存储结构谈ASM日常维护的要点 210
8.3如何使用KFED分析和修改ASM数据 211
8.4如何使用AMDU导出ASM文件 216
第9章 理解数据块结构 224
9.1理解数据块头结构 224
9.2理解ITL 227
9.3理解记录结构 231
9.4解析Oracle字段的内部数据存储格式 234
9.5理解LOB的存储结构 241
第10章 理解表的结构 246
10.1到底什么是“表” 246
10.1.1 PCTFREE和行链 249
10.1.2那些逝去的老参数 254
10.1.3减少热块冲突的方法 257
10.2从数据块结构看目前主流容灾技术 260
10.3案例——简单任务 265
第11章 理解索引 278
11.1反转键索引的误区 280
11.2索引访问的方式 284
11.2.1小表用索引有意义吗 286
11.2.2位图索引为什么不适合大并发量环境 287
11.3重建索引的作用 291
11.4索引使用的“三大纪律八项注意” 294
11.5案例——索引危机 296
第12章 理解分区表 305
12.1什么是分区表 305
12.2分区表对海量数据的意义 310
12.2.1分区表和历史数据归档 311
12.2.2分区表和高水位推进 315
12.2.3分区表和RAC环境 316
12.2.4分区主键和分区粒度的选择 317
第13章 理解序列 319
13.1什么是序列 319
13.2序列的使用和优化 320
第二部分 分析思路篇 324
第14章 问题分析综述 324
14.1如何抓住蝴蝶效应中的那只蝴蝶 325
14.2为什么要强调基础概念 328
14.3工作中的好习惯带来的福利 330
第15章DBA分析思路的探讨 332
15.1问题分析总路线图 332
15.2普通故障的分析路线 335
15.3性能问题的分析路线 340
15.4 SQL语句的分析路线 347
15.5利用你知道的原理缩小问题的范围 351
15.6关闭问题的条件 353
15.7灵活运用你的知识 354
15.8 DBA需要与时俱进 356
15.9多表连接的优化技巧 359
15.10理论如何联系实践 364
第三部分 典型案例篇 370
第16章RAC故障分析 370
16.1 LOG ARCHIVE MAX PROCESS导致的RAC脑裂 370
16.2 RAC系统故障的处理过程 377
16.3三天两次严重故障 381
第17章ORA-600故障 388
17.1 ORA-600 [12700]错误的分析过程 388
17.2 ORA-600 [kdsgrpl]的处理案例 401
第18章 性能问题分析 407
18.1压力测试遇到的问题 407
18.2 IMP导入性能问题的分析 411
18.3并行操作为什么无法执行 413
第19章SQL优化 421
19.1一个常用的SQL优化方法 421
19.2一个查找IP所属区域的SQL优化思路 428
结束语 433