
本书以 Oracle 11g R2数据库为主线,针对 Oracle DBA,详细讲解了 Oracle各种重要概念以及相关知识点,使得读者从新的系统层面和角度理解 Oracle技术内涵、架构的组成以及各类组件的作用。
本书共 13章,讲解了 Oracle的主流技术,包括 Oracle数据库创建、体系结构、网络配置、表的管理和维护、索引、审计与安全、全球化支持、重做日志管理、UNDO表空间管理、表空间管理、分区技术、GridControl、资源管理以及调度管理。内容覆盖 Oracle DBA需要掌握的几乎所有重要的知识点,用于全面系统地学习 Oracle、获得技术提升以及知识拓展。
对于打算系统深入学习 Oracle的读者,准备 OCP/OCM考试的读者,以及 Oracle DBA,本书都是很好的必备书籍和手头工具书。
Oracle数据库已经成为当今市场的主流数据库产品。目前 Oracle家族中已经不仅仅限于数据库单一产品,还包括操作系统、中间件等, Oracle已经收购了 MySQL、SUN等,其市场份额远远超过其他任何数据库产品,国内几乎所有大型企业,以及政府部门,军方都在使用 Oracle数据库。
Oracle DBA市场职位缺口巨大,尤其是中高端人才更是紧缺。众多初学者想掌握 Oracle数据库技术,并迈入 Oracle高端人才行列,这样产生了一个庞大的对进阶技术的需求。本书结合笔者多年的 Oracle数据库学习和维护经验,希望它可以成为初中级 Oracle DBA的必读书籍,同时书中对于知识点的介绍更多的是站在系统的全局角度考虑,读者可以获得全新的认识和实践体验。
当前,众多具有一定经验的初级 DBA,以及具有中级实战水平的 DBA,希望继续提高自己,往往受到理论和实践机会限制,本书在编写过程中也考虑到这个因素,书中不但重视实践操作(毕竟 Oracle对动手能力要求很高),而且给出详尽的理论解释,对于提高大家的实战能力和理论水平很有帮助。
各章内容安排
本书分章讲解了 Oracle数据库创建、体系结构、网络配置、表的管理和维护、索引、审计与安全、全球化支持、重做日志管理、UNDO表空间管理、表空间管理、分区技术、 GridControl、资源管理以及调度管理。每一章内容都通过示例给出几个重要概念的解释,虽然这些内容对于高手而言已经无须再学习,但是笔者始终认为这些是 Oracle数据库高手的根基,需要读者领悟透彻。
本书各章具体的内容安排请读者参看目录。
本书的特点
本书侧重于 Oracle数据库进阶学习,难度属于中级水平。如果读者具有扎实的 Oracle数据库维护经验,具备 OCP级别的理论水平,相信读者可以顺利地完成本书的学习,本书不会介绍 Oracle的基本概念,如什么是实例、如何创建表空间等内容,所以在读本书之前请先复习 Oracle的基础知识。
本书各章内容相对独立,各章内容之间的耦合度是松散的。比如,读者需要了解书中有关数据库体系结构的内容,就可以单独学习第 2章的内容;需要先掌握分区技术的内容,书中也有一章单独介绍。每部分相对独立,读者对书中某一部分感兴趣可以单独学习。
由于目前大多数生产环境的数据库都升级到 Oracle 11g R2,推荐读者使用 Oracle 11g R2数据库配合本书做实验学习。
如果读者需要进一步掌握 Oracle高级技术,或者参加 OCM考试,推荐继续学习《Oracle DBA 高可用、备份恢复与性能优化》,这本书已经出版了。这两本书结合起来,相对完整地涵盖了 OCM考试全部需要掌握的内容。
本书读者对象
本书是一本高阶主题的 Oracle书籍,所以适用于具有一定经验的初级 DBA,以及具有中级实战水平的 DBA。如果您正在准备 OCM考试,相信书中的内容会对您有所帮助。参与本书写作的除了林树泽、卢芬、杨亚琦外,还有历铁帅、柳冬青、李渊、陈玉等人,他们为本书的创作做了大量的工作,在此表示衷心的感谢。由于时间仓促,加之水平有限,书中不足之处在所难免,敬请读者批评指正。
编者 2016年 1月
第 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 校验点进程(CKPT) 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 FAST FULL ACAN).. 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 位图索引的插入问题 . 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.1.1 强制审计 .. 119
6.1.2 标准数据库审计 .. 120
6.1.3 使用触发器定制审计 125
6.1.4 精细化审计 . 129
6.1.5 对 DBA的审计 . 132
6.2 虚拟专用数据库 132
6.2.1 应用程序上下文 .. 133
6.2.2 创建应用程序上下文 134
6.2.3 创建用于 FGAC的函数.. 136
6.3 基于列的 VPD 138
6.4 本章小结 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 UNDO表空间切换示例 180
9.10.2 UNDO表空间切换涉及状态. 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 class .. 296
14.5.2 Window 297
14.6 本章小结 . 301