第1章DB2进程和内存结构 1
1.1 DB2进程体系结构 1
1.1.1 DB2进程技术模型 1
1.1.2与操作系统相关的进程 3
1.1.3与实例相关的进程和线程 5
1.1.4与数据库相关的进程和线程 6
1.1.5与应用程序相关的进程 9
1.1.6监控EDU运行的SQL语句 10
1.1.7收集进程/线程堆栈信息 12
1.2代理程序通信 13
1.2.1代理程序概述 13
1.2.2代理程序相关配置参数 13
1.2.3应用程序、代理程序和事务 16
1.2.4代理和连接的常见问题与优化 17
1.3实用程序相关进程 21
1.3.1 LOAD相关进程 21
1.3.2备份/恢复相关进程 26
1.4 DB2内存体系结构 29
1.4.1实例共享内存 30
1.4.2数据库共享内存 31
1.4.3应用程序共享内存 36
1.4.4代理私有内存 38
1.4.5代理程序与应用程序之间通信时的内存 40
1.4.6共享内存与私有内存 40
1.5内存集、内存池和内存块 42
1.5.1实例级内存集 43
1.5.2跟踪内存使用 46
1.5.3定位内存泄漏 48
1.5.4数据库级内存集 49
1.6内存案例分析 51
1.7内存自动调优 53
1.8本章小结 55
第2章DB2数据库设计 57
2.1 DB2存储内部结构 57
2.1.1 DB2存储层次结构 57
2.1.2表空间存储结构 59
2.1.3 SMS表空间的存储结构 59
2.1.4 DMS表空间头部信息 59
2.1.5 DMS表空间映射 60
2.1.6表空间的高水位标记 61
2.1.7 RID格式 61
2.1.8索引叶的内部结构 62
2.2数据库物理设计 63
2.2.1表空间容器的放置原则 63
2.2.2数据库物理设计原则 63
2.3数据库逻辑设计 64
2.3.1缓冲池设计原则 64
2.3.2表空间设计原则 69
2.3.3索引设计原则 79
2.4其他高级设计技术 81
2.4.1表分区及应用案例 81
2.4.2索引分区及应用案例 83
2.4.3数据库分区及应用案例 86
2.4.4多维(MDC)及应用案例 88
2.4.5表分区和多维集群表的使用 92
2.4.6物化查询表及应用案例 96
2.4.7 MDC、数据库分区、MQT和表分区配合使用 100
2.4.8表压缩和索引压缩 111
2.5总结 111
第3章 表的高级特性 113
3.1表分区的概念 113
3.1.1定义 113
3.1.2优点 114
3.2分区表的基本用法 115
3.2.1创建基本表分区 115
3.2.2定义分区表空间和分区键 118
3.2.3执行计划 123
3.2.4将现有表和视图迁移到分区表 126
3.3分区表的管理 128
3.3.1分区转出 128
3.3.2分区转入 130
3.3.3分区索引 132
3.3.4分区重组 135
3.4分区表detach的常见问题 140
3.4.1分区主表关联有强制外键约束 140
3.4.2分区主表含有非自动刷新的MQT 141
3.4.3分区主表含有自动刷新的MQT 141
3.4.4主表或主表的分区正在被其他事务以非UR的隔离级别读取 142
3.5行压缩 142
3.5.1概念 143
3.5.2启用或禁用行压缩 144
3.5.3创建数据字典 146
3.5.4评估压缩空间 148
3.5.5检查压缩状态 150
3.6表压缩应用案例 151
3.7索引压缩及应用案例 160
3.8本章小结 163
第4章 分区数据库 165
4.1 DB2 DPF多分区基本架构和相关概念 165
4.1.1 DB2 DPF基本架构 165
4.1.2 DB2 DPF数据的分布键以及数据倾斜问题 166
4.1.3 DB2 DPF数据库并行I/O 168
4.1.4 DB2 DPF数据库的扩展性 169
4.2 DB2 DPF多分区应用 170
4.3配置DB2 DPF多分区环境 172
4.3.1 DB2 DPF安装准备 172
4.3.2 DB2 DPF环境搭建 174
4.3.3创建表空间和缓冲池 177
4.3.4 DB2 DPF最佳实践 178
4.4本章小结 193
第5章DB2 HADR 195
5.1 HADR的设计理念 195
5.1.1什么是高可用性 195
5.1.2 HADR的原理 197
5.1.3 HADR的日志处理模式 198
5.1.4 HADR的限制 200
5.2 HADR典型场景的搭建 200
5.2.1对基础环境的要求 201
5.2.2 HADR的配置参数 201
5.2.3复制PRIMARY数据库 202
5.2.4启动STANDBY 203
5.2.5启动PRIMARY 204
5.3 HADR的维护 204
5.3.1监控HADR 204
5.3.2 HADR的切换方式 209
5.3.3切换后对应用产生的影响 210
5.3.4 HADR状态 211
5.3.5 HADR异常状态的处理 211
5.4 HADR性能调优 212
5.4.1接收缓冲 212
5.4.2网络相关 212
5.4.3内部参数 212
5.4.4表和表空间的调整 213
5.5 HADR高可用案例分享 213
5.5.1 HADR结合PowerHA 214
5.5.2 HADR结合TSA 218
第6章 锁和并发 223
6.1锁的概念 223
6.1.1数据一致性 223
6.1.2事务和事务边界 224
6.1.3锁的概念 226
6.2锁的属性、策略及模式 231
6.2.1锁的属性 231
6.2.2加锁策略 231
6.2.3锁的模式 231
6.2.4如何获取锁 234
6.2.5锁的兼容性 236
6.3隔离级别(Isolation Levels) 237
6.3.1可重复读(RR—Repeatable Read) 237
6.3.2读稳定性(RS—Read Stabity) 238
6.3.3游标稳定性(CS—Cursor Stability) 240
6.3.4当前提交(Currently Committed) 241
6.3.5未提交读(UR—Uncommitted Read) 242
6.3.6隔离级别的摘要 244
6.4锁转换、锁等待、锁升级和死锁 246
6.4.1锁转换及调整案例 246
6.4.2锁升级及调整案例 248
6.4.3锁等待及调整案例 251
6.4.4死锁及调整案例 253
6.5锁相关的性能问题总结 257
6.6锁与应用程序设计 259
6.7锁监控工具 262
6.8最大化并发性 266
6.8.1选择合适的隔离级别 266
6.8.2尽量避免锁等待、锁升级和死锁 266
6.8.3设置合理的注册表变量 267
6.9锁和并发总结 275
第7章DB2高级监控 277
7.1从系统函数和视图获取监控信息 277
7.1.1利用表函数监控 277
7.1.2性能管理视图 280
7.2监控指标和案例 281
7.2.1一些常用的监控指标和语句 281
7.2.2编写脚本以获取监控信息 287
7.3 db2pd及监控案例 289
7.3.1 db2pd概述 289
7.3.2 db2pd监控案例 290
7.4事件监视器及监控案例 301
7.4.1事件监视器的创建方法和步骤 302
7.4.2事件监控器案例 303
7.4.3编写脚本从事件监控器中获取监控信息 306
7.5 db2mtrk及监控案例 308
7.6 DB2高级监控总结 310
第8章DB2故障诊断 311
8.1 DB2故障诊断机制 311
8.1.1故障诊断相关文件 311
8.1.2设置故障诊断级别 320
8.2深入讲解故障诊断文件 325
8.2.1解释管理通知日志文件条目 325
8.2.2解释诊断日志文件条目 326
8.3故障诊断工具 329
8.3.1使用db2support收集环境信息 329
8.3.2 db21s和db21evel 330
8.3.3使用db2diag分析db2diag.log文件 331
8.3.4 DB2内部返回码 337
8.4故障诊断分析流程 339
8.4.1故障诊断流程 339
8.4.2结合系统事件判断 342
8.4.3结合系统运行状况诊断 342
8.5案例分析 343
8.6本章小结 347
第9章 数据库安全 349
9.1 DB2安全机制概述 350
9.2认证(authentication) 352
9.2.1什么时候进行DB2身份认证 352
9.2.2 DB2身份认证类型 353
9.3权限(authorization) 358
9.3.1权限层次 358
9.3.2实例级权限 359
9.3.3数据库级权限 365
9.4特权(privilege) 368
9.4.1特权层次结构 368
9.4.2授予特权 370
9.4.3撤销特权 374
9.4.4显式特权/隐式特权/间接特权 376
9.4.5静态和动态SQL特权考虑因素 379
9.4.6维护特权/权限 381
9.5某银行安全规划案例 385
9.6执行安全审计(db2audit) 387
9.6.1实例级审计 387
9.6.2数据库级审计 392
9.7基于标签的访问控制(LBAC)及案例 395
9.8本章小结 401
第10章DB2常见问题总结 403
10.1实例常见问题和诊断案例 403
10.1.1实例无法启动问题总结 403
10.1.2实例无法正常终止 404
10.1.3实例启动报SQL 1042C错误 404
10.1.4实例目录误删除 405
10.1.5实例崩溃问题 405
10.2数据库常见问题总结 406
10.2.1数据库日志空间满SQL0964C错误 406
10.2.2数据库时区和时间 407
10.2.3中文乱码和代码页转换 408
10.2.4通讯错误SQL30081N 411
10.2.5数据库备份、前滚暂挂 412
10.2.6数据库活动日志删除 412
10.2.7数据库损坏(数据页、索引页)SQL1043C 412
10.2.8索引重新构建问题 414
10.2.9 DB2实用程序不可用 415
10.2.10快速清空表数据 415
10.2.11表和索引统计信息不一致 416
10.2.12表空间高水位问题 417
10.3表空间状态 421
10.3.1 backup pending 422
10.3.2脱机(offline and notaccessible) 422
10.3.3 quiesced exclusive | share|update 423
10.3.4 restore pending和storagemust be defined 423
10.3.5 rollforward pending 424
10.3.6表空间状态总结 424
10.4 LOAD期间表状态总结 424
10.4.1 check pending 425
10.4.2 load pending 425
10.4.3 load in progress 426
10.4.4 not load restartable 426
10.4.5 read access only 427
10.4.6 unavailable 428
10.5锁相关问题 428
10.5.1锁升级 428
10.5.2锁等待问题解决流程 428
10.5.3死锁 429
10.6内存常见问题 429
10.6.1 bufferpool设置过大,导致数据库无法启动 429
10.6.2排序溢出 429
10.6.3锁内存不足 430
10.7备份恢复常见问题 430
10.8数据移动常见问题总结 431
10.8.1标识列 431
10.8.2生成列 435
10.8.3大对象 438
10.8.4空值处理 440
10.8.5定界符注意问题 443
10.8.6 PC/LXF注意问题 446
10.8.7代码页不同注意事项 448
10.8.8日期格式 449
10.8.9 XML问题 451
10.9安全常见问题总结 453
10.9.1从PUBLIC撤销隐式的权限和特权 454
10.9.2保护系统编目视图 456
10.9.3创建实例用户并显式指定组 457
10.9.4为SYSxxx GROUP参数使用显式值 457
10.9.5跟踪隐式特权 458
10.9.6不授予不必要的特权 459
10.9.7使用加密的AUTHENTICATION模式 460
10.9.8使用独立ID创建和拥有对象 461
10.9.9使用视图控制数据访问 462
10.9.10使用存储过程控制数据访问 463
10.9.11使用LBAC控制数据访问 464
10.9.12对重要敏感数据进行加密 465
10.10 SQL0805和SQL0818错误 467