第1章 创建Oracle数据库 1
1.1创建数据库的前提条件 1
1.2创建数据库的方法 1
1.3使用DBCA创建数据库 2
1.3.1 DBCA概述 2
1.3.2创建数据库过程 3
1.3.3理解建库脚本的含义 13
1.4使用安装程序自动创建数据库 17
1.5手工建库 19
1.5.1手工建库的步骤以及注意事项 19
1.5.2 Linux系统上的手工建库实例 22
1.6本章小结 26
第2章 Oracle数据库体系结构 27
2.1 Oracle体系结构概述 27
2.2 Oracle数据库体系结构 27
2.2.1 Oracle服务器和实例 28
2.2.2 Oracle数据库物理结构(文件组成) 30
2.2.3 Oracle数据库参数文件和密码文件 30
2.3数据库连接(connection)与会话(session) 30
2.3.1数据库连接(connection) 30
2.3.2会话(session) 31
2.4 Oracle数据库内存结构 32
2.4.1共享池(shared pool) 32
2.4.2数据库高速缓冲区(database buffer cache) 33
2.4.3重做日志高速缓冲区(redo buffer cache) 36
2.4.4大池(large pool)和Java池 37
2.4.5流池(Streaming pool) 38
2.4.6 PGA(进程全局区)和UGA(用户全局区) 38
2.4.7如何获得内存缓冲区的信息 39
2.5 Oracle服务器进程和用户进程 40
2.6 Oracle数据库后台进程 41
2.6.1系统监控进程(SMON) 41
2.6.2进程监控进程(PMON) 41
2.6.3数据库写进程(DBWR) 42
2.6.4重做日志写进程(LGWR) 43
2.6.5归档日志进程(ARCH) 43
2.6.6校验点进程(checkpoint process) 45
2.7本章小结 46
第3章 网络配置管理 47
3.1 Oracle的网络连接 47
3.2服务器端监听器配置 48
3.2.1动态注册 50
3.2.2静态注册 52
3.2.3连接测试 54
3.2.4监听程序管理 55
3.3客户端配置 57
3.3.1本地命名 57
3.3.2简单命名 58
3.4 Oracle数据库服务器支持的两种连接方式 60
3.4.1服务器进程 60
3.4.2共享连接 60
3.4.3共享连接涉及初始化参数 61
3.4.4共享连接的工作过程 61
3.4.5共享连接的配置 62
3.4.6共享连接的一些问题 67
3.4.7专有连接 67
3.5本章小结 69
第4章 管理和维护表 70
4.1 Oracle基本的数据存储机制-表 70
4.1.1数据的存储类型 70
4.1.2行ID(ROWID) 72
4.2创建表 73
4.2.1 Oracle创建表的规则 73
4.2.2创建普通表 73
4.2.3创建临时表 75
4.3段空间管理 77
4.4理解高水位线(HWM) 78
4.5行迁移 79
4.6创建索引组织表(IOT) 79
4.6.1 IOT表的结构 79
4.6.2创建IOT表 81
4.7表参数以及参数维护 81
4.8维护列 84
4.9删除和截断表 88
4.10本章小结 90
第5章 索引 91
5.1索引的概念 91
5.2 Oracle实现数据访问的方法 91
5.2.1全表扫描(FULL TABLE SCAN-FTS) 92
5.2.2通过行ID(ROWID) 92
5.2.3使用索引 93
5.3索引扫描类型 94
5.3.1索引唯一扫描(INDEX UNIQUE SCAN) 95
5.3.2索引范围扫描(INDEX RANGE SCAN) 95
5.3.3索引全扫描(INDEX FULL SCAN) 95
5.3.4索引全扫描(INDEX FULL SCAN) 96
5.4限制索引使用的情况 96
5.4.1使用不等于运算符 96
5.4.2使用IS NULL或IS NOT NULL 97
5.4.3使用函数 98
5.4.4比较不匹配的数据类型 99
5.5集群因子 100
5.6二元高度 100
5.7直方图 101
5.8建立索引 102
5.9查看索引 105
5.10 B树索引 106
5.10.1 B树索引的工作原理 106
5.10.2 B树索引的注意事项 106
5.11位图索引 107
5.11.1位图索引的使用讨论 107
5.11.2创建位图索引 107
5.11.3 B位图索引的插入问题 109
5.12 Hash索引 110
5.13反向键索引 111
5.14基于函数的索引 112
5.15监控索引的使用 113
5.16重建索引 115
5.17维护索引 116
5.18删除索引 118
5.19本章小结 118
第6章 审计与安全 119
6.1审计的5个层次 119
6.2.1强制审计 119
6.2.2标准数据库审计 120
6.2.3使用触发器定制审计 125
6.2.4精细化审计 129
6.2.5对DBA的审计 132
6.3虚拟专用数据库 132
6.3.1应用程序上下文 133
6.3.2创建应用程序上下文 134
6.3.3创建用于FGAC的函数 136
6.4基于列的VPD 138
6.5本章小结 141
第7章 全球化支持 142
7.1理解什么是字符集 142
7.2数据库字符集 143
7.3服务器端字符集 144
7.4客户端字符集 145
7.5数据库字符集与客户端字符集的转换 150
7.6本章小结 154
第8章 重做日志管理 155
8.1 Oracle为何引入重做日志 155
8.2读取重做日志文件信息 156
8.2.1 v$log视图 156
8.2.2 v$logfile视图 157
8.2.3判断是否归档 157
8.2.4设置数据库为归档模式 158
8.3重做日志组及其管理 159
8.3.1添加重做日志组 159
8.3.2删除联机重做日志组 161
8.4重做日志成员及维护 163
8.4.1添加重做日志成员 163
8.4.2删除联机重做日志成员 164
8.4.3重设联机重做日志的大小 165
8.5清除联机重做日志 168
8.6日志切换和检查点事件 168
8.7归档重做日志 169
8.8本章小结 169
第9章 UNDO表空间管理 170
9.1引入还原段的作用 170
9.2还原段如何完成读一致性 171
9.2.1 Oracle如何实现读一致性 171
9.2.2读一致性的进一步复杂化分析 171
9.2.3读一致性的具体步骤 172
9.3还原段的实例恢复与事务回滚 173
9.4 UNDO SEGMENT的选择算法 173
9.5讨论undo_retention参数 174
9.6还原段分类 176
9.7 Oracle的自动还原段管理 176
9.8创建还原表空间 177
9.9维护还原表空间 179
9.10切换还原表空间 180
9.10.1 UNOD表空间切换示例 180
9.10.2 UNOD表空间切换涉及状态 181
9.10.3删除UNDO表空间示例 181
9.11 dba_undo_extents数据字典 184
9.12本章小结 184
第10章 表空间管理 185
10.1 Oracle数据库的逻辑结构 185
10.2 SEGMENT管理方式 188
10.2.1段空间的手动管理 188
10.2.2段空间的自动管理 188
10.3表空间的分类以及创建表空间 190
10.4表空间磁盘管理的两种方案 192
10.4.1数据字典管理的表空间磁盘管理 192
10.4.2本地管理的表空间磁盘管理 193
10.5表空间分类 194
10.5.1永久表空间 194
10.5.2临时表空间 195
10.6创建表空间 195
10.6.1创建数据字典管理的表空间 195
10.6.2创建本地管理的表空间 197
10.6.3创建还原表空间 198
10.6.4创建临时表空间 200
10.6.5临时表空间组 201
10.6.6默认临时表空间 203
10.6.7创建大文件表空间 205
10.6.8创建非标准块表空间 209
10.7表空间管理 210
10.7.1表空间的三种状态 211
10.7.2脱机管理 211
10.7.3只读管理 213
10.8表空间和数据文件管理 215
10.8.1修改表空间大小 215
10.8.2修改表空间的存储参数 218
10.8.3删除表空间 219
10.8.4迁移数据文件 220
10.8.5数据字典和本地管理的表空间 223
10.9本章小结 224
第11章 分区技术 225
11.1分区技术概述 225
11.2分区技术的优势 225
11.3分区表分类 226
11.3.1分区键和分区表 227
11.3.2范围分区 227
11.3.3列表分区 229
11.3.4哈希分区 231
11.3.5组合分区 233
11.4分区键修改引起的问题 236
11.5实例分析分区技术的优势 238
11.5.1提高可用性 238
11.5.2减少维护负担 240
11.5.3改善SQL语句性能 242
11.6索引分区 242
11.6.1本地前缀分区索引 242
11.6.2本地非前缀分区索引 243
11.6.3全局分区索引 244
11.7分区的维护 245
11.7.1新增分区 246
11.7.2移动分区 247
11.7.3截断分区 249
11.7.4删除分区 250
11.7.5拆分分区 250
11.7.6合并分区 253
11.7.7分区交换 254
11.8本章小结 256
第12章 GridControl的安装、配置与使用 257
12.1 GridControl概述 257
12.2深入GridControl架构 257
12.3部署GridControl的准备工作 258
12.4安装GridControl 259
12.4.1安装OMS 259
12.4.2安装GC代理 267
12.4.3启动GC管理数据库的功能 269
12.5管理GridControl 271
12.5.1管理Agent 271
12.5.2管理OMS 272
12.6 GridControl的管理特性 273
12.6.1连接到GC 273
12.6.2 GC的管理特性 274
12.7本章小结 274
第13章 资源管理 275
13.1 Oracle数据库的资源 275
13.2资源管理器可管理的资源 276
13.3使用资源管理器创建资源计划 276
13.3.1分析默认的三个资源计划 276
13.3.2创建资源计划的方法 277
13.4创建资源计划实例 279
13.5启动、停止资源计划实例 286
13.6本章小结 287
第14章 调度管理 288
14.1调度程序的组件 288
14.2调度程序的体系架构 288
14.2.1调度架构 288
14.2.2执行调度程序的权限 289
14.3创建基于时间的调度任务 289
14.3.1创建程序(program) 290
14.3.2创建调度(Schedule) 291
14.3.3创建作业(Job) 291
14.4创建基于事件的调度任务 293
14.5调度的高级部件 296
14.5.1 Job类 296
14.5.2 Window 297
14.6本章小结 301
第15章 RAC真应用集群 302
15.1单实例数据库并发控制原理 302
15.1.1并发访问的数据不一致问题 302
15.1.2事务以及隔离级别 303
15.1.3支持并发的lock机制 304
15.1.4支持并发的latch机制 306
15.1.5 Lock和Latch的使用 308
15.2 RAC并发控制的实现 309
15.2.1 RAC的并发控制问题 309
15.2.2 RAC的实现并发访问 310
15.3 Oracle为何引入RAC 311
15.4 RAC集群简介 312
15.4.1集群分类 312
15.4.2 RAC环境的特殊问题 313
15.4.3 RAC集群 314
15.5 RAC架构详解 316
15.6 RAC与Clusterware 318
15.7安装RAC 319
15.7.1设计RAC应用环境 319
15.7.2确认安装的软件组件 320
15.7.3任务规划 321
15.7.4安装虚拟机 322
15.7.5在虚拟机上安装linux操作系统 325
15.7.6配置主机 331
15.7.7安装Clusterware 344
15.7.8安装数据库软件 354
15.7.9启动监听 357
15.7.10创建ASM 359
15.7.11创建数据库 363
15.8 Failover和Load balance测试 367
15.8.1 Failover失败转移 368
15.8.2 LoadBalance负载均衡 369
15.9本章小结 370
第16章 ASM自动存储管理 371
16.1 Oracle自动存储管理概述 371
16.2自动存储管理的优点 372
16.3 ASM系统架构 373
16.4 ASM和CSS集群同步服务 374
16.5创建ASM实例 375
16.6关闭和启动ASM实例 381
16.7理解ASM实例架构 384
16.8 ASM命令行管理工具 384
16.9管理ASM磁盘组 387
16.9.1使用ASM磁盘组管理文件的优势 387
16.9.2创建磁盘组 389
16.9.3向磁盘组添加磁盘 392
16.9.4删除磁盘和磁盘组 393
16.9.5平衡磁盘组 395
16.9.6 MOUNT和DISMOUNT磁盘组 396
16.10管理ASM文件 397
16.10.1 ASM磁盘组文件名结构 397
16.10.2 ASM磁盘组中目录管理 398
16.10.3添加和删除别名 399
16.10.4删除文件 400
16.10.5使用ASM文件模板 400
16.11使用RMAN将数据库迁移到ASM实例 402
16.12管理ASM的数据字典视图 409
16.13本章小结 409
第17章 管理Clusterware组件及管理指令 410
17.1 Clusterware及其组件 410
17.2备份和恢复VotingDisks 411
17.3添加和删除VotingDisks 412
17.4备份和恢复OCR 414
17.4.1从自动备份中恢复OCR 416
17.4.2从人工备份文件中恢复 416
17.5修改OCR存储配置信息 417
17.6删除OCR存储 419
17.7 ocrconfig指令功能汇总 420
17.8管理Clusterware指令 421
17.8.1 srvctl指令 421
17.8.2 crs stat指令 427
17.8.3 onsctl指令 431
17.8.4 crsctl指令 435
17.8.5 ocrcheck指令 438
17.8.6 ocrdump指令 439
17.8.7 oifcfg指令 441
17.8.8 olsnodes指令 443
17.9本章小结 444
第18章 DataGuard的安装与管理 445
18.1 DataGuard是什么 445
18.2 DataGuard体系结构 445
18.2.1 DataGuard的架构 445
18.2.2 DataGuard的后台进程 446
18.3 DataGuard配置及相关概念 447
18.4 DataGuard服务本质 448
18.4.1 Apply服务 449
18.4.2 Redo应用 449
18.4.3 SQL应用 450
18.4.4角色转换服务 450
18.5 DataGuard的保护模式 451
18.6 DataGuard的优点 452
18.7手工搭建物理DataGuard 453
18.8物理DataGuard的SWITCHOVER 462
18.9物理DataGuard的FAILOVER 465
18.10如何转换FAILOVER后的主库为新备库 467
18.11管理物理Standby数据库 469
18.11.1启动Standby数据库 469
18.11.2关闭Standby数据库 470
18.11.3 Primary数据库结构变化的传播 471
18.11.4自动传播数据文件和表空间的变化 471
18.11.5手工修改数据文件和表空间的变化 472
18.11.6重命名数据文件 475
18.11.7添加或删除重做日志组 477
18.11.8监控DataGuard数据库视图 477
18.11.9设置DataGuard保护模式 480
18.12 DataGuard broker 482
18.12.1 DataGuard Broker概述 482
18.12.2 DataGuard Broker的配置 482
18.12.3 DataGuard Broker的组件 483
18.12.4 DataGuard Broker的DMON进程 484
18.12.5 DataGuard Broker使用的前提条件 485
18.12.6 DataGuard Broker配置实例演示 486
18.12.7 DataGuard Broker的完成物理DG的SWITCHOVER 488
18.12.8 DataGuard Broker实现DG的自动FAILOVER 490
18.12.9 DG的DGMGRL维护指令置 492
18.13 DataGuard的日志传输服务 493
18.13.1通过ARCn进程来传送Redo 494
18.13.2 LGWR进程同步传送Redo 496
18.13.3 LGWR进程异步传送Redo 497
18.14本章小结 498
第19章 RMAN备份与恢复数据库 499
19.1 RMAN概述 499
19.2 RMAN的独特之处 499
19.3 RMAN系统架构详解 500
19.4快闪恢复区(flash recovery area) 501
19.4.1修改快闪恢复区大小 501
19.4.2解决快闪恢复区的空间不足问题 503
19.5建立RMAN到数据库的连接 504
19.6 RMAN的相关概念与配置参数 505
19.7 RMAN备份控制文件 507
19.8 RMAN实现脱机备份 509
19.9 RMAN联机备份 511
19.9.1联机备份前的准备工作 511
19.9.2联机备份整个数据库 512
19.9.3联机备份一个表空间 516
19.9.4联机备份一个数据文件 517
19.9.5 RMAN备份坏块处理方式 518
19.10 RMAN的增量备份 518
19.11快速增量备份 520
19.12在映像副本上应用增量备份 522
19.13创建和维护恢复目录 523
19.14 RMAN的脚本管理 526
19.15 使用RMAN非归档模式下的完全恢复 528
19.15.1控制文件、数据文件以及重做日志文件丢失的恢复 528
19.15.2只有数据文件丢失的恢复 532
19.15.3联机重做日志文件和数据文件损坏的恢复 534
19.15.4如何将数据文件恢复到其他磁盘目录下 537
19.16使用RMAN归档模式下的完全恢复 537
19.16.1非系统表空间损坏的恢复 537
19.16.1系统表空间损坏的恢复 540
19.16.1所有数据文件丢失的恢复 541
19.17 RMAN实现数据块恢复 541
19.18 RMAN的备份维护指令 545
19.18.1 RMAN的VALIDATE BACKUPSET指令 545
19.18.2 RMAN的RESTORE…VALIDATE指令 546
19.18.3 RMAN的RESTORE…PREVIEW指令 547
19.18.4 RMAN的LIST指令 548
19.18.5 RMAN的REPORT指令 551
19.19本章小结 552
第20章 手工管理的备份恢复 553
20.1备份恢复的概念 553
20.1.1物理备份 553
20.1.2逻辑备份 554
20.1.3冷备份与热备份 554
20.1.4数据库恢复 554
20.2非归档模式下的冷备与恢复 555
20.2.1冷备的步骤 556
20.2.2冷备下的恢复 557
20.2.3缺少重做日志文件的恢复方法 559
20.3归档模式与非归档模式 561
20.3.1设置数据库的归档模式 561
20.3.2设置归档进程相关参数 563
20.3.3管理归档文件和归档目录 564
20.4手工热备数据库的步骤 567
20.5热备过程中对数据库崩溃的处理方法 570
20.6热备的原理 572
20.7备份控制文件 573
20.8介质恢复的原理 576
20.9归档模式下的完全恢复 581
20.9.1数据文件在有备份情况下的恢复 581
20.9.2数据文件在无备份情况下的恢复 584
20.9.3系统表空间数据文件损坏的完全恢复 586
20.9.4当前UNDO表空间损坏的完全恢复 587
20.9.5非当前UNDO表空间损坏的完全恢复 589
20.10何时使用不完全恢复 592
20.10.1不完全恢复的场合 592
20.10.2不完全恢复的类型 592
20.11所有控制文件丢失的恢复方法 593
20.11.1使用备份的控制文件 593
20.11.2重建控制文件 596
20.12本章小结 600
第21章 Oracle闪回技术 601
21.1理解闪回级别 601
21.2闪回数据库 602
21.2.1闪回数据库概述 602
21.2.2启用闪回数据库 603
21.2.3关闭闪回数据库 605
21.2.4闪回数据库方法 606
21.2.5使用闪回数据库 607
21.2.6监控闪回数据库 609
21.2.7使用闪回数据库的限制 611
21.3闪回删除 611
21.3.1闪回删除原理 611
21.3.2回收站的使用 612
21.3.3恢复删除的表 615
21.3.4恢复多个同名的表 618
21.3.5应用Purge永久删除表 620
21.4闪回表 622
21.5闪回版本查询 624
21.6闪回事务查询 626
21.7闪回查询 626
21.8复原点技术 627
21.9本章小结 629
第22章 数据迁移-EXP/IMP 630
22.1关于备份的几个概念 630
22.2使用EXP指令实现逻辑备份 631
22.2.1 EXP指令详解 631
22.2.2不带参数的EXP备份 633
22.2.3 EXP指令导出整个数据库 636
22.2.4 EXP指令导出特定的表 637
22.2.5 EXP指令导出指定的用户 638
22.2.6 EXP指令导出特定的表空间 639
22.3使用IMP指令实现逻辑恢复 640
22.3.1 IMP指令详解 641
22.3.2 IMP指令恢复整个数据库 642
22.3.3 IMP指令恢复特定的表 643
22.3.4 IMP指令恢复指定的用户 644
22.4使用EXP/IMP实现传输表空间 646
22.4.1理解Big/Little Endian 646
22.4.2传输表空间的限制 647
22.4.3传输表空间的兼容性问题 648
22.4.4传输表空间的自包含特性 648
22.4.5实现传输表空间的步骤 648
22.4.6使用EXP/IMP实现同平台表空间迁移 650
22.4.7使用EXP/IMP实现跨平台表空间迁移 653
22.5本章小结 657
第23章 数据迁移-EXPDP IMPDP 658
23.1数据泵导出(EXPDP)简介 658
23.1.1数据泵导入导出技术的结构 658
23.1.2数据泵导入导出技术的优点 659
23.1.3数据泵导入导出的目录对象 659
23.2数据泵导入导出与EXP/IMP技术的区别 661
23.3数据泵导出(EXPDP)数据库实例 662
23.3.1数据泵导入的参数含义 662
23.3.2数据泵导入数据库实例 667
23.4数据泵导入数据库实例 672
23.4.1数据泵导入概述及参数含义 672
23.4.2数据泵导入数据库实例 679
23.5使用数据泵迁移表空间 682
23.6使用数据泵生成外部表 684
23.7本章小结 686
第24章 基于CBO的SQL优化 687
24.1性能调整方法 687
24.2 SQL查询处理过程详解 688
24.2.1语法分析 688
24.2.2语句优化 688
24.2.3查询执行 688
24.3基于成本的优化 689
24.3.1选择CBO的优化方式 689
24.3.2优化器工作过程 690
24.4自动统计数据 691
24.5手工统计数据库数据 692
24.6统计操作系统数据 696
24.7手工统计字典数据 698
24.8主动优化SQL语句 699
24.8.1 WHERE谓词的注意事项 699
24.8.2 SQL语句优化工具 700
24.8.3使用索引 708
24.8.4索引类型及使用时机 715
24.8.5使用绑定变量 721
24.8.6消除子查询优化SQL语句 722
24.9被动优化SQL语句 725
24.9.1使用分区表 725
24.9.2使用表和索引压缩 725
24.9.3保持CBO的稳定性 726
24.9.4创建合适的索引 729
24.10详解V$SQL视图 729
24.11本章小结 732
第25章 Oracle数据库实例优化 733
25.1详解SGA与实例优化 733
25.2将程序常驻内存 738
25.2.1创建软件包DBMS_SHARED_POOL 738
25.2.2将程序常驻内存的过程 740
25.2.3从DBMSPOOL脚本理解软件包DBMS_SHARED_POOL 742
25.3将数据常驻内存 744
25.3.1再论数据块缓存池 744
25.3.2将数据常驻内存的过程 745
25.3.3将常驻内存的程序恢复为默认缓冲池 748
25.4优化重做日志缓冲区 749
25.4.1深入理解重做日志缓冲区的工作机制 750
25.4.2重做日志缓冲区相关的等待事件 751
25.4.3设置重做日志缓冲区大小 753
25.5优化共享池(Shared Pool) 755
25.5.1库高速缓存 755
25.5.2使用绑定变量 755
25.5.3调整参数CURSOR_SHARING 759
25.5.4设置共享池的大小 759
25.6优化数据库高速缓存 761
25.6.1调整数据库缓冲区大小 761
25.6.2使用缓冲池 762
25.7优化PGA内存 765
25.8本章小结 769
第26章 Statspack与AWR 770
26.1安装 770
26.2设置Statspack相关参数 772
26.3 statspack数据收集 775
26.3.1 STATSPACK收集统计数据的原理 776
26.3.2创建性能数据报表 777
26.3.3自动收集性能报告 779
26.4初步分析STATSPACK性能报告 781
26.5 AWR是什么 786
26.6管理AWR 787
26.6.1 DBMS_WORKLOAD_REPOSITORY包的使用 788
26.6.2 AWR快照与STATISTICS_LEVEL参数的关系 789
26.6.3手工创建AWR快照 789
26.6.4清除AWR快照 790
26.6.5修改AWR快照参数 791
26.6.6创建和删除AWR快照基线 791
26.6.7创建AWR报告 793
26.7 ASH是AWR的补充 796
26.8创建并分析ASH报告 796
26.9 AWR与ADDM的关系 799
26.10本章小结 804