第1章 数据库的启动和关闭 1
1.1 数据库的启动 1
1.1.1 启动数据库到nomount状态 1
1.1.2 启动数据库到mount状态 8
1.1.3 启动数据库open阶段 12
1.2 进阶内容 18
1.2.1 SCN 18
1.2.2 检查点 24
1.2.3 正常关闭数据库的状况 34
1.2.4 数据库异常关闭的情况 37
1.3 深入分析 41
1.3.1 获得数据库Open的跟踪文件 41
1.3.2 bootstrap$及数据库初始化过程 42
1.3.3 BOOTSTRAP$的重要性 44
1.3.4 BBED工具的简要介绍 45
第2章 参数及参数文件 49
2.1 初始化参数的分类 49
2.1.1 推导参数(Derived Parameters) 49
2.1.2 操作系统依赖参数 49
2.1.3 可变参数 49
2.1.4 初始化参数的获取 50
2.2 参数文件 52
2.2.1 PFILE和SPFILE 53
2.2.2 SPFILE的创建 55
2.2.3 SPFILE的搜索顺序 56
2.2.4 使用PFILE/SPFILE启动数据库 57
2.2.5 修改参数 59
2.2.6 重置SPFILE中设置的参数 66
2.2.7 是否使用了SPFILE 67
2.2.8 SPFILE的备份与恢复 68
2.2.9 如何设置Events事件 75
2.2.10 导出SPFILE文件 77
2.3 诊断案例 81
2.3.1 登录系统检查alert.log文件 82
2.3.2 尝试重新启动数据库 84
2.3.3 检查数据文件 84
2.3.4 mount数据库,检查系统参数 85
2.3.5 检查参数文件 86
2.3.6 再次检查alert文件 86
2.3.7 修正PFILE 88
2.3.8 启动数据库 89
第3章 数据字典 91
3.1 数据字典概述 91
3.2 内部RDBMS(X$)表 91
3.3 数据字典表 94
3.4 动态性能视图 95
3.4.1 GV$和V$视图 95
3.4.2 GV_$、V_$视图和V$、GV$同义词 97
3.4.3 数据字典视图 99
3.4.4 进一步的说明 101
3.5 最后的验证 102
3.5.1 V$PARAMETER的结构 102
3.5.2 视图还是同义词 103
3.5.3 Oracle如何通过同义词定位对象 104
第4章 内存管理 109
4.1 SGA管理 109
4.1.1 什么是SGA 109
4.1.2 SGA与共享内存 118
4.1.3 SGA管理的变迁 124
4.2 PGA管理 138
4.2.1 什么是PGA 138
4.2.2 PGA的调整建议 147
4.3 Oracle的内存分配和使用 151
4.3.1 诊断案例一:SGA与Swap 152
4.3.2 诊断案例二:SGA设置过高导致的系统故障 156
4.3.3 诊断案例三:如何诊断和解决CPU高度消耗(100%)问题 161
第5章 Buffer Cache与Shared Pool原理 165
5.1 Buffer Cache原理 165
5.1.1 LRU与Dirty List 165
5.1.2 Cache Buffers Lru Chain闩锁竞争与解决 169
5.1.3 Cache Buffer Chain闩锁竞争与解决 171
5.2 Shared Pool的基本原理 186
5.2.1 Shared Pool的设置说明 187
5.2.2 了解X$KSMSP视图 195
5.2.3 诊断和解决ORA-04031错误 199
5.2.4 Library Cache Pin及Library Cache Lock分析 209
5.2.5 诊断案例一:version_count过高造成的Latch竞争解决 216
5.2.6 诊断案例二:临时表引发的竞争 224
5.2.7 小结 228
第6章 重做(Redo) 229
6.1 Redo的作用 229
6.2 Redo的内容 230
6.3 产生多少Redo 235
6.4 Redo写的触发条件 239
6.4.1 每3秒钟超时(Timeout) 239
6.4.2 阈值达到 240
6.4.3 用户提交 241
6.4.4 在DBWn写之前 242
6.5 Redo Log Buffer的大小设置 242
6.6 Commit做了什么 243
6.7 日志的状态 243
6.8 日志的块大小 247
6.9 日志文件的大小 249
6.10 为什么热备份期间产生的Redo要比正常的多 251
6.11 能否不生成Redo 256
6.11.1 NOLOGGING对于数据库的影响 256
6.11.2 disable_logging对于数据库的影响 263
6.11.3 FORCE LOGGING(强制日志)模式 272
6.12 Redo故障的恢复 272
6.12.1 丢失非活动日志组的故障恢复 273
6.12.2 丢失活动或当前日志文件的恢复 275
6.13 诊断案例一:通过Clear日志恢复数据库 281
6.14 诊断案例二:日志组过度激活的诊断 285
第7章 回滚与撤销 290
7.1 什么是回滚和撤消 290
7.2 回滚段存储的内容 291
7.3 并发控制和一致性读 292
7.4 回滚段的前世今生 293
7.5 回滚机制的深入研究 298
7.6 Oracle 9i闪回查询的新特性 317
7.7 使用ERRORSTACK进行错误跟踪 320
7.8 Oracle 10g闪回查询特性的增强 322
7.9 ORA-01555错误 327
7.10 AUM下如何重建Undo表空间 339
7.11 诊断案例一:使用Flashback Query恢复误删除数据 340
7.12 诊断案例二:释放过度扩展的Undo空间 343
7.13 特殊情况的恢复 347
7.14 数值在Oracle的内部存储 351
第8章 等待事件 354
8.1 等待事件的源起 354
8.2 从等待发现瓶颈 358
8.2.1 V$SESSION和V$SESSION_WAIT 359
8.2.2 从V$SQLTEXT中追踪 360
8.2.3 捕获相关SQL 361
8.3 Oracle 10g的增强 365
8.3.1 新增V$SESSION_WAIT_HISTORY视图 365
8.3.2 ASH新特性 366
8.3.3 自动负载信息库AWR的引入 373
8.3.4 自动数据库诊断监控ADDM的引入 375
8.4 顶级等待事件 376
8.5 重要等待事件 380
8.5.1 db file sequential read(数据文件顺序读取) 380
8.5.2 db file scattered read(数据文件离散读取) 382
8.5.3 direct path read/write(直接路径读/写) 386
8.5.4 日志文件相关等待 395
8.5.5 Enqueue(队列等待) 401
8.5.6 Latch Free(闩锁释放) 404
第9章 性能诊断与SQL优化 415
9.1 使用AUTOTRACE功能辅助SQL优化 415
9.1.1 AUTOTRACE功能的启用 415
9.1.2 Oracle 10g AUTOTRACE功能的增强 418
9.1.3 AUTOTRACE功能的内部操作 421
9.1.4 使用AUTOTRACE功能辅助SQL优化 424
9.2 捕获问题SQL解决过度CPU消耗问题 427
9.2.1 使用vmstat检查系统当前情况 427
9.2.2 使用Top工具辅助诊断 428
9.2.3 检查进程数量 429
9.2.4 登录数据库 430
9.2.5 捕获相关SQL 430
9.2.6 创建新的索引以消除全表扫描 435
9.2.7 观察系统状况 436
9.2.8 性能何以提高 437
9.2.9 小结 439
9.3 使用SQL_TRACE/10046事件进行数据库诊断 439
9.3.1 SQL_TRACE及10046事件的基础介绍 439
9.3.2 诊断案例一:隐式转换与索引失效 446
9.3.3 诊断案例二:跟踪后台错误 451
9.3.4 10046与等待事件 456
9.4 使用物化视图进行翻页性能调整 465
9.4.1 系统环境 466
9.4.2 问题描述 466
9.4.3 捕获排序SQL语句 466
9.4.4 确定典型问题SQL 467
9.4.5 选择解决办法 471
9.4.6 进一步的调整优化 473
9.4.7 小结 475
9.5 一次横跨两岸的问题诊断 475
9.5.1 第一封求助邮件 475
9.5.2 第一次回复 479
9.5.3 进一步信息提供 479
9.5.4 进一步的诊断 481
9.5.5 最后的问题定位 482
9.5.6 小结 482
9.6 总结 482
后记 483