
Oracle 12c数据库是 Oracle公司最新推出的旗舰级数据库系统。本书全面、详细地讲解了 Oracle 12c数据库管理技术,是学习 Oracle数据库管理的实用教材。
全书共分 24章,通过近千个范例详尽讲解了 Oracle 12c数据库体系结构、安装与卸载、各种数据库对象、 PL/SQL语言、数据库备份与恢复、用户与系统管理等技术。书中每章的内容不但概念清晰、操作步骤明了、示例丰富,而且更侧重于满足实际工作的需要。
本书适合 Oracle数据库初学者以及初级 Oracle数据库管理员使用,也适合作为 Oracle数据库管理技能培训用书。
前 言
本书是一本介绍如何学习 Oracle数据库的入门书籍。Oracle数据库已经成为当今市场的主流数据库产品。目前 Oracle家族中已经不仅仅限于数据库单一产品,还包括操作系统、中间件等,Oracle已经收购了 MySQL、SUN等,其市场份额远远超过其他任何数据库产品,国内几乎所有大型企业,以及政府部门、军方都在使用 Oracle数据库。
Oracle数据库领域市场职位缺口巨大,尤其是中高端人才更是紧缺。众多初学者都想掌握 Oracle数据库技术,并迈入 Oracle高端人才行列,这便产生了对入门技术的庞大需求,而 Oracle也顺应此潮流推出了资质认证体制,本书覆盖 OCA以及 OCP考试的绝大部分知识点,也是初学者必须掌握的基础知识。本书结合笔者多年的 Oracle数据库学习和维护经验,希望它可以成为 Oracle数据库初学者的必读书籍,也希望它可以成为欲准备 Oracle的 OCA、OCP考试的人员很好的参考教材,同时书中对于知识点的介绍更多地站在系统的全局角度考虑,读者可以获得全新的认识和实践体验。
本书是一本全面讲述 Oracle 12c数据库系统管理的书籍,书中内容基于 Oracle 12c
12.1.0.1.0版本。这也是目前 Oracle推出的唯一的 12c版本。本书针对初学者,非常详细地介绍了如何安装 Oracle数据库及基本的配置内容,这样读者就能很快搭建一个学习环境。通过本书的学习,读者能够全面掌握 Oracle数据库的体系架构,数据库对象以及数据库管理、数据库安全、数据库备份与恢复等 DBA所必须掌握的知识和技能。相信本书能够让读者完成基本的数据库管理工作,成为一名合格的 Oracle数据库初级管理员。
全书共分 24章,包括 Oracle数据库基础、数据库启动与关闭、Oracle数据库体系结构、 SQL语言概述、数据字典、网络连接管理、内存管理、用户管理和资源文件、管理控制文件、重做日志管理、管理归档日志、表空间和数据文件、UNDO表空间管理、事务管理、角色管理、表管理、索引管理、系统和对象权限管理、视图、序列号和同义词、RMAN 备份与恢复数据库、闪回技术、手工管理的备份恢复等内容。
本书具有以下特点。
.知识体系涵盖 Oracle DBA管理应掌握的各方面知识,覆盖了跨平台下 Oracle DBA管理应具备的各方面的知识和技能。 .内容全面而深入,实例得当,切中 DBA关注要点,描述内容由浅而深,详尽细致,能够帮助读者较好地掌握 DBA知识和技能。 .注重实践和应用,从数据库管理、开发、安全、性能优化和高可用等方面与数据库管
理员相关的最重要方面做了详尽的描述,本书将使读者在实际应用时能够快速上手,并且在遇到问题时能够获得有益的学习参考。可谓一册在手,管理无忧。 .实例详尽、图文并茂、示列清晰且所有案例均在实践环境中经过检验。
本书可以作为 Oracle 12c数据库操作手册,可供 Oracle数据库管理员、Oracle数据库应用开发人员、Oracle数据仓库工程师使用,还可以作为 Oracle技术支持和培训结构、高等院校数据库课程的参考教材。
除林树泽、卢芬、惠荣勤之外,参与本书编写的还有历铁帅、杨亚琪、李渊、陈玉等人,他们为本书的创作做了大量的工作,在此表示衷心的感谢。
编者 2014年 7月
目 录
第 1章 Oracle数据库基础知识 1
1.1 什么是关系数据库 . 1
1.1.1 关系数据库模型 1
1.1.2 关系数据模型的创始人 2
1.2 Oracle数据库发展简史 . 3
1.2.1 公司之初 3
1.2.2 Oracle数据库的发展历程 4
1.3 数据库 RDBMS 4
1.4 SQL语言简介. 5
1.4.1 SQL语言概述 6
1.4.2 SQL语句 6
1.5 本章小结 . 8
第 2章 Oracle 12c数据库初体验 9
2.1 安装数据库的环境要求 . 9
2.2 Windows环境下 Oracle 12c的安装步骤 . 10
2.3 SQLPLUS工具以及 SCOTT用户 18
2.4 本章小结 . 20
第 3章数据库的启动与关闭 21
3.1 启动数据库 . 21
3.1.1 数据库启动过程 21
3.1.2 数据库启动到 NOMOUNT状态 22
3.1.3 数据库启动到 MOUNT状态 . 28
3.1.4 数据库启动到 OPEN状态 29
3.2 关闭数据库 . 32
3.2.1 数据库关闭过程 32
3.2.2 数据库关闭的几个参数及其含义 35
3.3 Quiesce与 Suspend数据库 36
3.4 本章小结 . 39
第 4章 Oracle数据库体系结构 41
4.1 Oracle体系结构概述 41
4.2 Oracle数据库体系结构 . 41
4.2.1 Oracle服务器和实例 42
4.2.2 Oracle数据库的物理结构(文件组成) 43
4.2.3 Oracle数据库参数文件和密码文件 44
4.3 数据库连接(connection)与会话(session). 44
4.3.1 数据库连接(connection). 44
4.3.2 会话(session). 45
4.4 Oracle数据库的内存结构 . 47
4.4.1 共享池(shared pool) 47
4.4.2 数据库高速缓冲区(database buffer cache) . 52
4.4.3 重做日志高速缓冲区(redo buffer cache) 56
4.4.4 大池(large pool)和 Java池. 58
4.4.5 流池(streaming pool) 59
4.4.6 PGA(进程全局区)和 UGA(用户全局区) 59
4.4.7 如何获得内存缓冲区的信息 61
4.5 Oracle服务器进程和用户进程 . 63
4.6 Oracle数据库后台进程 . 64
4.6.1 系统监控进程(SMON). 64
4.6.2 进程监控进程(PMON). 64
4.6.3 数据库写进程(DBWR) 65
4.6.4 重做日志写进程(LGWR) 66
4.6.5 归档日志进程(ARCH) . 67
4.6.6 校验点进程(checkpoint process) 69
4.7 本章小结 . 70
第 5章 SQL语言概述 71
5.1 SQL语句的分类. 71
5.2 SQL的查询语句. 72
5.2.1 SELECT语句的语法及书写要求 72
5.2.2 简单查询 73
5.2.3 特定的列查询 74
5.2.4 WHERE子句. 75
5.2.5 列标题的默认显示格式 76
5.2.6 在 SQL语句中使用列的别名. 77
5.2.7 算数运算符及其使用 77
5.2.8 DISTINCT运算符. 78
5.2.9 连接(contatenation)运算符及使用. 80
5.3 书写规范 . 81
5.4 单行函数 . 82
5.4.1 字符型单行函数 82
5.4.2 数字型单行函数 86
5.4.3 日期型单行函数 88
5.5 空值(NULL)和空值处理函数 92
5.5.1 什么是空值 92
5.5.2 NVL函数和 NVL2函数. 94
5.5.3 NULLIF函数. 96
5.5.4 COALESCE函数 97
5.6 条件表达式 . 98
5.6.1 CASE表达式. 99
5.6.2 DECODE函数 . 100
5.7 分组函数 . 101
5.7.1 AVG和 SUM函数 101
5.7.2 MAX和 MIN函数 102
5.7.3 COUNT函数 . 102
5.7.4 GROUP BY 子句 103
5.7.5 分组函数的嵌套使用 104
5.7.6 HAVING子句 . 104
5.8 数据操纵语言(DML) 105
5.8.1 INSERT语句 . 106
5.8.2 UPDATE语句 . 108
5.8.3 DELETE语句 110
5.9 本章小结 . 110
第 6章数据字典 .111
6.1 数据字典中的内容 . 111
6.2 使用和操作数据字典视图 . 111
6.3 数据字典视图分类 . 112
6.4 使用数据字典视图 . 117
6.5 动态性能视图及使用 . 120
6.6 本章小结 . 123
第 7章网络配置管理. 124
7.1 Oracle的网络连接 124
7.2 服务器端监听器配置 . 125
7.2.1 动态注册 128
7.2.2 静态注册 131
7.2.3 连接测试 134
7.2.4 监听程序管理 136
7.3 客户端配置 . 138
7.3.1 本地命名 138
7.3.2 简单命名 140
7.4 Oracle数据库服务器支持的两种连接方式 . 141
7.4.1 服务器进程 141
7.4.2 共享连接 142
7.4.3 共享连接涉及初始化参数 142
7.4.4 共享连接的工作过程 143
7.4.5 共享连接的配置 144
7.4.6 共享连接的一些问题 148
7.4.7 专有连接 148
7.5 数据库驻留连接池 . 150
7.5.1 DRCP的工作原理. 150
7.5.2 如何配置 DRCP. 151
7.6 本章小结 . 155
第 8章内存管理 156
8.1 内存架构 . 156
8.1.1 PGA概述 . 157
8.1.2 SGA概述 . 159
8.1.3 UGA概述. 161
8.2 内存管理 . 161
8.2.1 配置内存组件 162
8.2.2 SGA与 PGA的自动调整 . 164
8.2.3 限制 PGA的大小 165
8.2.4 配置数据库智能高速缓存 165
8.3 本章小结 . 167
第 9章用户管理和资源文件 168
9.1 创建用户 . 168
9.1.1 初试新用户的创建 168
9.1.2 创建用户语法及参数含义 171
9.1.3 改变用户参数 172
9.2 删除用户 . 174
9.3 用户和数据库模式 . 175
9.4 用户管理中的重要文件——概要文件 . 176
9.4.1 什么是概要文件 177
9.4.2 资源管理和口令管理概要文件的使用步骤 177
9.4.3 使用概要文件管理会话资源 177
9.4.4 口令管理参数以及含义 179
9.4.5 创建口令管理的概要文件 182
9.5 修改和删除概要文件 . 183
9.6 本章小结 . 185
第 10章控制文件和数据库启动 186
10.1 控制文件和数据库启动概述 . 186
10.2 如何获得控制文件的信息 . 187
10.3 控制文件的内容 . 188
10.3.1 控制文件中所存的内容 188
10.3.2 如何查看控制文件中所存内容的记录信息 189
10.4 存储多重控制文件 . 191
10.4.1 多重控制文件 191
10.4.2 移动控制文件 192
10.4.3 添加控制文件 196
10.5 备份和恢复控制文件 . 196
10.5.1 控制文件的备份 196
10.5.2 控制文件的恢复 198
10.6 本章小结 . 201
第 11章重做日志管理 . 202
11.1 Oracle为何引入重做日志 . 202
11.2 读取重做日志文件信息 . 203
11.2.1 v$log视图 204
11.2.2 v$logfile视图. 204
11.2.3 判断是否归档 205
11.2.4 设置数据库为归档模式 205
11.3 重做日志组及其管理 . 207
11.3.1 添加重做日志组 207
11.3.2 删除联机重做日志组 210
11.4 重做日志成员及维护 . 211
11.4.1 添加重做日志成员 211
11.4.2 删除联机重做日志成员 213
11.4.3 重设联机重做日志的大小 214
11.5 清除联机重做日志 . 217
11.6 日志切换和检查点事件 . 218
11.7 归档重做日志 . 219
11.8 本章小结 . 219
第 12章管理归档日志. 220
12.1 归档模式 . 220
12.2 设置归档模式 . 221
12.3 设置归档进程与归档 . 223
12.4 维护归档 . 229
12.5 本章小结 . 234
第 13章表空间与数据文件管理 235
13.1 Oracle数据库的逻辑结构 . 235
13.2 表空间的分类以及创建表空间 . 237
13.3 表空间磁盘管理的两种方案 . 240
13.3.1 数据字典管理的表空间磁盘管理 240
13.3.2 本地管理的表空间磁盘管理 241
13.4 创建表空间 . 241
13.4.1 创建数据字典管理的表空间 241
13.4.2 创建本地管理的表空间 243
13.4.3 创建还原表空间 244
13.4.4 创建临时表空间 246
13.4.5 默认临时表空间 248
13.4.6 创建大文件表空间 251
13.5 表空间管理 . 255
13.5.1 脱机管理 255
13.5.2 只读管理 257
13.6 表空间和数据文件管理 . 260
13.6.1 修改表空间大小 260
13.6.2 修改表空间的存储参数 264
13.6.3 删除表空间 265
13.6.4 迁移数据文件 265
13.6.5 数据字典和本地管理的表空间 269
13.7 本章小结 . 270
第 14章 UNDO表空间管理. 271
14.1 引入还原段的作用 . 271
14.2 还原段如何完成读一致性 . 272
14.2.1 Oracle如何实现读一致性 272
14.2.2 读一致性的进一步复杂化分析 272
14.2.3 读一致性的具体步骤 274
14.3 还原段的实例恢复与事务回滚 . 274
14.4 UNDO SEGMENT的选择算法. 274
14.5 讨论 undo_retention参数. 275
14.6 还原段分类 . 277
14.7 Oracle的自动还原段管理 . 278
14.8 创建还原表空间 . 279
14.9 维护还原表空间 . 281
14.10 切换还原表空间 . 282
14.10.1 UNDO表空间切换示例 283
14.10.2 UNOD表空间切换涉及的状态 283
14.10.3 删除 UNDO表空间示例. 284
14.11 临时 UNDO. 286
14.12 dba_undo_extents数据字典 . 287
14.13 本章小结 . 288
第 15章事务(Transaction) . 289
15.1 Oracle事务的由来 289
15.2 什么是事务 . 289
15.3 事务的特点 . 290
15.4 事务控制 . 290
15.4.1 使用 COMMIT的显式事务控制 291
15.4.2 使用 ROLLBACK实现事务控制. 293
15.4.3 程序异常退出对事务的影响 294
15.4.4 使用 AUTOCOMMIT实现事务的自动提交 296
15.5 本章小结 . 297
第 16章角色管理 298
16.1 什么是角色 . 298
16.2 创建角色 . 300
16.3 修改角色 . 301
16.4 赋予角色权限 . 302
16.5 赋予用户角色 . 304
16.6 默认角色 . 308
16.7 禁止和激活角色 . 311
16.8 回收和删除角色 . 313
16.9 Oracle预定义的角色 . 316
16.10 本章小结 . 318
第 17章管理和维护表. 319
17.1 Oracle基本的数据存储机制——表 . 319
17.1.1 数据的存储类型 319
17.1.2 行 ID(ROWID) . 321
17.2 创建表 . 322
17.2.1 Oracle创建表的规则 322
17.2.2 创建普通表 322
17.2.3 创建临时表 325
17.3 不可见字段 . 329
17.4 段空间管理 . 333
17.5 理解高水位线(HWM). 333
17.6 理解行迁移 . 334
17.7 创建索引组织表(IOT) 335
17.7.1 IOT表的结构 335
17.7.2 创建 IOT表 337
17.8 表参数以及参数维护 . 337
17.9 维护列 . 340
17.10 删除和截断表 . 345
17.11 表压缩 . 348
17.12 TOP-N查询 349
17.13 本章小结 . 351
第 18章索引 . 352
18.1 索引的概念 . 352
18.2 Oracle实现数据访问的方法 . 353
18.2.1 全表扫描(Full Table Scan,FTS) 353
18.2.2 通过行 ID(ROWID) . 353
18.2.3 使用索引 354
18.3 索引扫描类型 . 355
18.3.1 索引唯一扫描(INDEX UNIQUE SCAN) 355
18.3.2 索引范围扫描(INDEX RANGE SCAN) . 356
18.3.3 索引全扫描(INDEX FULL SCAN) . 356
18.3.4 索引快速扫描(INDEX FAST FULL SCAN) 357
18.4 限制索引使用的情况 . 357
18.4.1 使用不等于运算符 357
18.4.2 使用 IS NULL或 IS NOT NULL 358
18.4.3 使用函数 359
18.4.4 比较不匹配的数据类型 360
18.5 集群因子 . 361
18.6 二元高度 . 361
18.7 直方图 . 363
18.8 建立索引 . 364
18.9 查看索引 . 367
18.10 B-树索引 . 368
18.10.1 B树索引的工作原理 368
18.10.2 B树索引的注意事项 369
18.11 位图索引 . 369
18.11.1 位图索引的使用讨论 369
18.11.2 创建位图索引 370
18.11.3 位图索引的插入问题 371
18.12 HASH索引 . 372
18.13 反向键索引 . 374
18.14 基于函数的索引 . 375
18.15 监控索引的使用 . 376
18.16 重建索引 . 378
18.17 维护索引 . 380
18.18 删除索引 . 382
18.19 本章小结 . 382
第 19章系统和对象权限管理 383
19.1 权限的概念和分类 . 383
19.2 系统权限 . 383
19.3 授予用户系统权限 . 385
19.4 SYSDBA和 SYSOPER系统特权. 389
19.5 回收用户系统权限 . 390
19.6 授予对象权限 . 393
19.7 回收对象权限 . 396
19.8 本章小结 . 397
第 20章视图 398
20.1 什么是视图 . 398
20.2 创建视图 . 398
20.3 使用视图的 WITH子句. 402
20.4 视图的修改 . 404
20.5 Oracle的视图管理 406
20.5.1 通过数据字典查询视图 406
20.5.2 Oracle视图查询的内部过程 407
20.6 视图 DML操作的限制 407
20.6.1 简单视图 408
20.6.2 复杂视图 408
20.7 视图的优点 . 408
20.8 删除视图 . 409
20.9 物化视图 . 409
20.9.1 什么是物化视图 409
20.9.2 查询重写的概念 410
20.9.3 物化视图的同步 410
20.9.4 创建物化视图 412
20.9.5 物化视图的使用环境 414
20.10 本章小结 . 415
第 21章序列号和同义词 . 416
21.1 什么是序列号 . 416
21.2 创建和使用序列号 . 416
21.3 修改序列号 . 420
21.4 会话序列号 . 423
21.5 删除序列号 . 423
21.6 什么是同义词 . 424
21.7 创建公有同义词 . 425
21.8 创建私有同义词 . 426
21.9 删除同义词 . 427
21.10 切换用户模式 . 428
21.11 本章小结 . 429
第 22章 RMAN备份与恢复数据库 430
22.1 RMAN概述 430
22.2 RMAN的独特之处 430
22.3 RMAN系统架构详解 431
22.4 快闪恢复区(flash recovery area). 432
22.4.1 修改快闪恢复区大小 433
22.4.2 解决快闪恢复区的空间不足问题 434
22.5 建立 RMAN到数据库的连接 . 435
22.6 RMAN的相关概念与配置参数 437
22.7 RMAN备份控制文件 439
22.8 RMAN实现脱机备份 442
22.9 RMAN联机备份 444
22.9.1 联机备份前的准备工作 444
22.9.2 联机备份整个数据库 445
22.9.3 联机备份一个表空间 450
22.9.4 联机备份一个数据文件 451
22.9.5 RMAN备份坏块处理方式 . 453
22.10 RMAN的增量备份 453
22.11 快速增量备份 . 456
22.12 在映像副本上应用增量备份 . 457
22.13 创建和维护恢复 . 459
22.14 RMAN的脚本管理 463
22.15 使用 RMAN非归档模式下的完全恢复 . 465
22.15.1 控制文件、数据文件以及重做日志文件丢失的恢复 465
22.15.2 只有数据文件丢失的恢复 471
22.15.3 联机重做日志文件和数据文件损坏的恢复 473
22.15.4 如何将数据文件恢复到其他磁盘下 476
22.16 使用 RMAN归档模式下的完全恢复 . 477
22.16.1 非系统表空间损坏的恢复 477
22.16.2 系统表空间损坏的恢复 480
22.16.3 所有数据文件丢失的恢复 482
22.17 RMAN实现数据块恢复 482
22.18 RMAN的备份维护指令 487
22.18.1 RMAN的 VALIDATE BACKUPSET指令. 487
22.18.2 RMAN的 RESTORE…VALIDATE指令 . 488
22.18.3 RMAN的 RESTORE…PREVIEW指令 489
22.18.4 RMAN的 LIST指令. 490
22.18.5 RMAN的 REPORT指令 494
22.19 本章小结 . 495
第 23章 Oracle闪回技术. 496
23.1 理解闪回级别 . 496
23.2 闪回数据库 . 496
23.2.1 闪回数据库概述 496
23.2.2 启用闪回数据库 497
23.2.3 关闭闪回数据库 501
23.2.4 闪回数据库方法 502
23.2.5 使用闪回数据库 503
23.2.6 监控闪回数据库 506
23.2.7 使用闪回数据库的限制 508
23.3 闪回删除 . 508
23.3.1 闪回删除原理 508
23.3.2 回收站的使用 510
23.3.3 恢复删除的表 512
23.3.4 恢复多个同名的表 517
23.3.5 应用 Purge永久删除表. 519
23.4 闪回表 . 521
23.5 闪回版本查询 . 525
23.6 闪回事务查询 . 527
23.7 闪回查询 . 528
23.8 复原点技术 . 529
23.9 本章小结 . 531
第 24章手工管理的备份恢复 532
24.1 备份恢复的概念 . 532
24.1.1 物理备份 532
24.1.2 逻辑备份 533
24.1.3 冷备份与热备份 533
24.1.4 数据库恢复 533
24.2 非归档模式下的冷备与恢复 . 535
24.2.1 冷备的步骤 535
24.2.2 冷备下的恢复 537
24.2.3 缺少重做日志文件的恢复方法 540
24.3 归档模式与非归档模式 . 542
24.3.1 设置数据库的归档模式 542
24.3.2 设置归档进程相关参数 545
24.3.3 管理归档文件和归档 546
24.4 手工热备数据库的步骤 . 550
24.5 热备过程中对数据库崩溃的处理方法 . 553
24.6 热备的原理 . 556
24.7 备份控制文件 . 557
24.8 介质恢复的原理 . 561
24.9 归档模式下的完全恢复 . 567
24.9.1 数据文件在有备份情况下的恢复 568
24.9.2 数据文件在无备份情况下的恢复 572
24.9.3 系统表空间数据文件损坏的完全恢复 574
24.9.4 当前 UNDO表空间损坏的完全恢复. 576
24.9.5 非当前 UNDO表空间损坏的完全恢复. 579
24.10 何时使用不完全恢复 . 583
24.10.1 不完全恢复的场合 583
24.10.2 不完全恢复的类型 583
24.11 所有控制文件丢失的恢复方法 . 584
24.11.1 使用备份的控制文件 584
24.11.2 重建控制文件 588
24.12 本章小结 . 593