第1章 建立和配置数据库 1
1.1 数据库创建规划 1
1.1.1 规划以及提出正确的问题 1
1.1.2 怎样确定恰当的数据块尺寸 2
1.2 组织文件系统 4
1.2.1 怎样命名数据库文件 4
1.2.2 使用最佳灵活结构 5
1.2.3 怎样配置符合OFA的Oracle文件系统 6
1.3 规划数据库文件布局 7
1.3.1 最大化可用性的规划 7
1.3.2 最小化磁盘争用的规划 8
1.4 建立参数文件 8
1.4.2 建立参数文件的连接 11
1.4.1 配置参数的一些注意事项 11
1.4.3 优化数据字典存储 21
1.5 理解CREATE DATABASE命令 22
1.6 创建数据库的技术 25
1.6.1 利用Oracle安装程序创建数据库 25
1.6.2 使用安装程序创建数据库的注意事项 26
1.6.3 怎样建立自己的定制数据库创建脚本 26
1.6.4 如何从已有数据库克隆数据库 27
1.6.5 怎样利用Database Configuration Assistant创建数据库 31
1.7 完成数据库配置 31
1.7.1 创建表空间 31
1.7.2 执行数据字典配置脚本 31
1.7.3 建立另外的回退段 32
1.7.7 启用归档日志方式 34
1.7.6 建立其他用户和模式对象 34
1.7.4 修改SYSTEM用户的缺省和临时表空间 34
1.7.5 更改SYS和SYSTEM的缺省口令 34
1.7.8 进行数据库完全备份 36
1.7.9 配置数据库自动启动和关闭 36
1.7.10 在数据库投入使用之后对其进行监控 36
1.7.11 怎样列出和描述初始化参数 36
1.7.12 怎样列出无记载参数 50
1.8 回顾 69
第2章 管理数据存储、对象和容量 72
2.1 配置数据存储 72
2.1.1 管理可用空间碎片 74
2.1.2 聚集可用空间的技术 76
2.1.4 查找接近MAXEXTENTS值的对象 77
2.1.3 管理区的碎片 77
2.1.5 避免数据字典的碎片 81
2.1.6 本地管理区 82
2.1.7 进行全数据库重组 83
2.1.8 定义区大小和防止碎片的11个技巧 84
2.1.9 避免区出超错误 84
2.1.10 避免空间出超错误 85
2.1.11 使行链接和行迁移最小化 86
2.1.12 怎样检测行链接/行迁移 86
2.1.13 利用脚本检查模式中的链接行 87
2.1.14 消除行链接 90
2.1.15 消除行迁移 90
2.1.17 怎样定义表的大小 91
2.1.16 行链接/行迁移的技巧 91
2.1.18 怎样确定PCTFREE的最佳值 96
2.1.19 怎样决定PCTUSED的最佳值 97
2.1.20 怎样查找每个数据块的可用数据区域 97
2.2 管理程序对象 98
2.2.1 怎样检查无效对象 98
2.2.2 怎样重新编译无效对象 99
2.2.3 在不同表空间之间移动索引 99
2.2.4 怎样查找最高点 100
2.2.5 怎样释放未用空间 101
2.3 DBMS_SPACE程序包 101
2.3.1 使用DBMS_SPACE.UNUSED_SPACE 101
2.4 管理锁争用 103
2.3.2 使用DBMS_SPACE.FREE_BLOCK 103
2.4.1 怎样查找产生锁的SQL语句 105
2.4.2 怎样释放锁 107
2.4.3 怎样删除用户会话 107
2.4.4 怎样从数据字典中提取视图创建命令 108
2.4.5 怎样从数据字典中提取索引定义 110
2.5 回顾 116
第3章 导出和导入技术 119
3.1 导出/导入特性概述 120
3.1.1 使用导出和导入 120
3.1.2 导出/导入的一般使用 122
3.1.3 导出方式 122
3.1.4 导入方式 124
3.1.6 指定导出/导入参数 125
3.1.5 创建必需的数据字典视图 125
3.1.7 在磁带上直接导出和导入数据 126
3.1.8 估计导出文件的大小 127
3.1.9 直接导出压缩文件 127
3.1.10 从压缩导出文件中直接导入 128
3.1.11 创建一致的导出文件 129
3.1.12 检查导出/导入错误 130
3.1.13 用导出和导入管理区 130
3.1.14 组织和命名导出/导入文件 131
3.1.15 显示导出文件的内容 131
3.1.16 不能对恢复同时使用导出和归档重做日志 131
3.1.17 增量、累积和完全的导出和导入 132
3.2.2 对传统的路径导出使用大的BUFFER值 135
3.2.1 使用DIRECT路径导出 135
3.2 怎样优化导出性能 135
3.2.3 对直接路径导出使用RECORDL-ENGHT参数 136
3.3 怎样优化导入参数 136
3.3.1 使用大的回退段 136
3.3.2 创建几个大的联机重做日志文件 136
3.3.3 在导入过程中关闭归档方式 137
3.3.4 分开导出转储文件、数据表空间、回退段和联机重做日志文件 137
3.3.5 最小化检查点 138
3.3.6 单独创建索引 138
3.3.7 设置大的初始化参数SORT_AREA_SIZE 138
3.4.2 导出/导入多个转储文件 139
3.4.1 子分区的导出和导入 139
3.4 Oracle8i的新特性 139
3.3.9 最小化数据库提交次数 139
3.3.8 使用大的导入缓冲区 139
3.4.3 为卸载表的导出过程的选择语句指定一个查询 140
3.4.4 导出/导入预计算优化程序统计数据 140
3.4.5 可移动表空间 141
3.5 回顾 142
第4章 设计高可用性数据库 145
4.1 如何发现和保护“致命的弱点” 145
4.2 复用数据库控制文件 146
4.3 在硬件级上镜像控制文件 147
4.4 镜像和复用的区别 148
4.5 为高可用性选择磁盘类型 148
4.6 常规的RAID技巧 149
4.7 给控制文件增长的空间 150
4.8 如何配置日志组 150
4.9 保护SYSTEM表空间的三种简单方法 151
4.10 为什么必须保护ORACLE_HOME 152
4.11 保护操作系统 152
4.12 如何保护回退段 152
4.13 分类和划分数据 153
4.14 划分表空间的优先次序 153
4.15 如何配置高可用性的TEMP表空间 154
4.16 确保在归档日志目标位置有足够的可用空间 155
4.17 如何调整联机重做日志 155
4.18 通过优化归档速度避免LGWR等待 155
4.20 如何加速实例的恢复 156
4.19 将联机重做日志和归档重做日志文件分开 156
4.21 回顾 157
第5章 使用热备用数据库 159
5.1 什么是失败切换 159
5.2 热备用数据库 159
5.2.1 热备用数据库的优点 161
5.2.2 热备用数据库的缺点 161
5.2.3 建立和配置热备用数据库 164
5.2.4 创建备用数据库作为主数据库的一个子集 166
5.2.5 选择备用站点 166
5.2.6 选择备用节点 167
5.2.7 进行热备用的失败切换 167
5.2.8 关于备用激活要记住的三个要点 168
5.2.10 将归档重做日志自动传送到备用数据库 169
5.2.9 备用激活后的四项工作 169
5.2.11 启动管理恢复 171
5.2.12 只读打开备用数据库 171
5.2.13 热备用数据库的维护 172
5.3 回顾 173
第6章 高级的失败切换方法 176
6.1 将Oracle并行服务器用于失败切换 176
6.2 并行服务器失败切换的优点 179
6.3 并行服务器失败切换的缺点 179
6.4 性能考虑 180
6.5 降低并行服务器失败切换的时间 180
6.6 透明的应用程序失败切换 181
6.7 客户机失败切换的说明 182
6.10 用Oracle复制实现失败切换 183
6.8 将客户机失败切换用于负载平衡 183
6.9 为预定的节点停机使用客户机失败切换 183
6.10.1 基本复制 184
6.10.2 基本复制失败切换的优点 185
6.10.3 基本复制失败切换的缺点 186
6.11 将高级复制用于失败切换 186
6.11.1 高级复制失败切换的优点 188
6.11.2 高级复制失败切换的缺点 188
6.12 利用Oracle Fail Safe 188
6.12.1 选择节点配置 189
6.12.2 Oracle Fail Safe的优点 189
6.13.3 应用程序镜像 190
6.13.2 采用远程镜像 190
6.13.1 鞋带状预算的高可用性:传送备份磁带 190
6.13 其他高可用性的选项 190
6.12.3 Oracle Fail Safe的缺点 190
6.14 利用混合配置技术 191
6.14.1 利用并行服务器与远程热备用数据库 191
6.14.2 利用Oracle Fail Safe与远程热备用数据库 191
6.14.3 利用热备用数据库与远程镜像 191
6.15 回顾 191
第7章 备份和恢复技术 194
7.1 备份选项 194
7.2 操作系统备份 195
7.2.1 冷备份 195
7.2.2 OFA和备份 195
7.2.4 使备份方式的持续时间最小化 196
7.2.3 热备份 196
7.2.5 为什么不应备份联机重做日志 197
7.2.6 ARCHIVELOG和NOARCHIV-ELOG方式 197
7.2.7 为什么应使用ARCHIVELOG方式 198
7.2.8 为什么应该复用归档重做日志 199
7.3 服务器管理备份 199
7.4 逻辑备份 201
7.4.1 文本文件备份 201
7.4.2 逻辑控制文件备份 208
7.4.3 使用导出和导入 209
7.4.4 导入方式 210
7.4.5 增量、累积和完全的导出和导入 211
7.4.6 创建一致的导出文件 212
7.4.7 不能同时使用导出和归档重做日志进行恢复 213
7.5 开发备份和恢复计划 214
7.5.1 常规的备份技巧 214
7.5.2 快速备份的技巧 215
7.6 恢复策略和情况 215
7.7 各种需要恢复的情形 218
7.8 恢复丢失的数据文件 219
7.8.1 SYSTEM数据文件的丢失 219
7.8.2 包含活动回退段的数据文件的丢失 221
7.8.3 其他数据文件的丢失 221
7.8.4 执行表空间恢复 221
7.8.5 执行数据文件恢复 222
7.8.6 在没有数据文件备份时怎样进行恢复 223
7.9 恢复联机重做日志 224
7.8.9 索引表空间丢失 224
7.8.8 只读表空间丢失 224
7.8.7 恢复丢失的临时表空间 224
7.9.1 联机重做日志组某个成员丢失 225
7.9.2 非活动的重做日志组丢失 225
7.9.3 活动重做日志组丢失 226
7.10 恢复丢失的控制文件 227
7.10.1 被复用的控制文件成员丢失 227
7.10.2 控制文件完全丢失 227
7.11 回顾 228
第8章 性能优化 231
8.1 优化系统全局区域的技术 231
8.1.1 怎样优化数据缓冲区高速缓存 232
8.1.2 度量和优化库高速缓存的性能 233
8.1.3 度量和优化字典高速缓存的性能 234
8.1.4 怎样估计应用程序的效能 234
8.2 固定应用程序代码 235
8.2.1 怎样确定应该固定的对象 235
8.2.2 怎样确定当前固定的程序对象 236
8.2.3 怎样固定应用程序代码 236
8.2.4 使用DBMS_SHARED_POOL.KEEP的技巧 237
8.2.5 怎样生成进行固定操作的脚本 238
8.2.6 使用DBMS_SHARED POOL.UNKEEP的技巧 239
8.3 优化数据排序的技术 240
8.3.1 在内存中进行全部或大部分排序 240
8.3.2 最小化排序时的空间管理开销 240
8.4.1 使行链接和行迁移最小化 241
8.4 优化数据存储的技术 241
8.3.3 使用多个TEMP表空间分布排序 241
8.4.2 检测行链接/迁移 242
8.4.3 确定模式中的链接行 243
8.4.4 防止和纠正行链接/迁移 244
8.4.5 行链接/迁移的技巧 246
8.4.6 使可用空间碎片最小化 247
8.4.7 使区增长最小化 247
8.4.8 怎样确定代价最高的查询 249
8.5 跟踪SQL 250
8.5.1 设置用户会话内的跟踪 251
8.5.2 使用DBMS_SYSTEM设置用户会话外的跟踪 251
8.5.3 生成系统跟踪 252
8.5.4 使用tkprof解释跟踪文件 252
8.5.5 使用AUTOTRACE获得SQL语句执行计划和统计数据 253
8.6 优化回退段 254
8.6.1 最小化回退段争用 254
8.6.2 使动态扩充最小化 255
8.6.3 分布回退段的I/O 255
8.7 优化索引 256
8.7.1 怎样确定和重建产生碎片的索引 256
8.7.2 怎样确定表的索引 256
8.8 优化磁盘I/O 257
8.8.1 怎样查找和避免I/O热点 258
8.8.2 使用原始文件系统 259
8.9 生成优化程序统计数据 259
8.9.1 使用DBMS_UTILITY.ANALYZE_SCHEMA收集统计数据 260
8.10.1 怎样优化Net8/SQL*Net 261
8.10 优化环境 261
8.9.2 使用DBMS_UTILITY.ANALYZE_DATABASE收集统计数据 261
8.9.3 使用DBMS_STATS收集性能统计数据 261
8.10.2 监控并优化系统资源 262
8.11 回顾 263
第9章 Oracle8i的新特性 267
9.1 新的性能优化特性 267
9.1.1 设计的稳定性和存储概要 267
9.1.2 排序改进 268
9.1.3 实体化视图 268
9.1.4 利用DBMS_STATS收集性能统计数据 268
9.2.3 降序索引 269
9.2.2 反向键索引 269
9.2.1 基于函数的索引 269
9.2 新索引类型 269
9.2.4 索引编排表 270
9.2.5 管理索引的新特性 270
9.3 新备份和恢复特性 270
9.3.1 多目标归档 270
9.3.2 多归档日志进程 271
9.3.3 使用LogMiner 271
9.3.4 快速启动恢复 272
9.4 新导出/导入特性 272
9.4.1 使用多个导出/导入转储文件 272
9.4.2 选择性的查询导出 273
9.4.3 预先计算优化程序统计数据的导出/导入 273
9.4.5 混合导出/导入特性 274
9.4.4 可移动表空间 274
9.5 新备用数据库特性 275
9.5.1 归档重做日志的自动传送 275
9.5.2 启用管理恢复 276
9.5.3 以只读方式打开备用数据库 277
9.6 管理作业队列的新特性 277
9.7 管理存储和对象的新功能 278
9.7.1 重新定位和组织表 278
9.7.2 删除表中的列 278
9.7.3 将表列标记为不可用 279
9.7.4 本地管理的表空间 279
9.8 回顾 280
10.1 Oracle8i—Internet数据库 283
第1O章 Internet DBA 283
10.2 Oracle与Java 284
10.3 Oracle8i Java虚拟机 284
10.4 Java VM与Oracle 8i服务器怎样通讯 286
10.5 Java与Oracle应用程序服务器 286
10.6 Oracle Jdeveloper 287
10.7 与Java有关的初始化参数 287
10.8 Oracle Internet文件系统 287
10.9 Oracle应用服务器概览 288
10.10 OAS组件 289
10.11 调整OAS内存请求 292
10.12 检查建议的最小硬件 293
10.13 设计Oracle应用服务器配置 293
10.14 Oracle应用服务器的安装 294
10.16 怎样启动和停止OAS组件 302
10.15 使用OAS管理程序 302
10.17 OAS怎样利用负载平衡 303
10.18 监控CPU的消耗情况 303
10.19 监控内存消耗 304
10.20 回顾 304
第11章 使用Oracle提供的程序包 306
11.1 DBMS_JOB和DBMS_IJOB程序包 308
11.1.1 Oracle作业队列的概念 308
11.1.2 配置SNP进程的技巧 309
11.1.3 利用DBMS_JOB和DBMS_IJOB 310
11.1.4 调度作业 312
11.1.5 更改作业 313
11.1.6 停止作业 315
11.1.7 其他作业队列过程 316
11.1.8 监控作业队列 316
11.1.9 管理属于其他用户的作业 316
11.1.10 利用作业队列定期分析模式对象 317
11.2 DBMS_SYSTEM程序包 317
11.2.1 使用DBMS_SYSTEM.SET_SQL_TRACE_IN_SESSION 317
11.2.2 使用DBMS_SYSTEM.SET_EV 319
11.2.3 使用DBMS_SYSTEM.READ_EV 320
11.2.4 确定当前会话中设置的事件级别 320
11.2.5 其他DBMS_SYSTEM程序 322
11.3 DBMS_SPACE程序包 322
11.3.1 使用DBMS_SPACE.UNUSED_SPACE 322
11.4 DBMS_SHARED_POOL程序包 324
11.3.2 使用DBMS_SPACE.FREE_BLOCKS 324
11.4.1 使用DBMS_SHARED_POOL.SIZES过程 325
11.4.2 使用DBMS_SHARED_POOL.SIZES的技巧 325
11.4.3 使用DBMS_SHARED_POOL.KEEP过程 325
11.4.4 使用DBMS_SHARED_POOL.KEEP的技巧 327
11.4.5 使用DBMS_SHARED_POOL.UNKEEP过程 328
11.4.6 使用DBMS_SHARED_POOL.UNKEEP的技巧 328
11.4.7 使用DBMS_SHARED_POOL.ABORTED_REQUEST_THRESHOLD过程 329
11.4.8 使用DBMS_SHARED_POOL.ABORTED_REQUEST_THRESHOLD的技巧 329
11.5 DBMS_UTILITY 330
11.5.1 使用DBMS_UTILITY.COMPILE_SCHEMA过程 330
11.5.2 使用DBMS_UTILITY.COMPILE_SCHEMA的技巧 331
11.5.3 使用DBMS_UTILITY.ANALYZE_SCHEMA 331
11.5.5 使用DBMS_UTILITY.GET_PARAMETER_VALUE 332
11.5.4 使用DBMS_UTILITY.ANALYZE_DATABASE 332
11.5.6 使用DBMS_UTILITY.PORT_STRING 333
11.5.7 使用DBMS_UTILITY.DB_VERSION 333
11.5.8 使用DBMS_UTILlTY.MAKE_DATA_BLOCK_ADDRESS 334
11.5.9 使用DBMS_UTILITY.DATA_BLOCK_ADDRESS_FILE 334
11.5.10 使用DBMS_UTILITY.DATA_BLOCK_ADDRESS_BLOCK 334
11.5.11 使用DBMS_UTILITY.IS_PARALLEL_SERVER 335
11.5.12 使用DBMS_UTILITY.CURRENT_INSTANCE 335
11.5.13 使用DBMS_UTILlTY.ACTIVE_INSTANCES 335
11.6 DBMS_ROWID 335
11.6.1 使用DBMS_ROWID.ROWID_BLOCK_NUMBER 336
11.6.2 使用DBMS_ROWID.ROWID_CREATE 336
11.6.6 使用DBMS_ROWID.ROWID_TO_ABSOLUTE_FNO 337
11.6.5 使用DBMS_ROWID.ROWID_ROW_NUMBER 337
11.6.4 使用DBMS_ROWID.ROWID_RELATIVE_FNO 337
11.6.3 使用DBMS_ROWID.ROWID_OBJECT 337
11.6.7 使用DBMS_ROWID.ROWID_TO_EXTENDED 338
11.6.8 使用DBMS_ROWID.ROWID_TO_RESTRICTED 338
11.6.9 使用DBMS_ROWID.ROWID_TYPE 338
11.6.10 使用DBMS_ROWID.ROWID_VERIFY 339
11.6.11 使用DBMS_ROWID.ROWID_INFO 339
11.7 回顾 339
第12章 Oracle安装和升级 344
12.1 Oracle软件 345
12.2 Oracle数据库 345
12.3.2 怎样配置一个符合OFA的Oracle文件系统 346
12.3.1 最佳灵活结构 346
12.3 配置Oracle文件系统 346
12.3.3 怎样命名数据库文件 348
12.3.4 为什么应对参数文件使用链接 349
12.4 安装Oracle服务器软件 349
12.5 安装前阶段 351
12.5.1 规则1:确保软件产品版本的兼容性 351
12.5.2 规则2:为Oracle配置操作系统 352
12.5.3 规则3:分配足够的磁盘空间 353
12.5.4 规则4:配置安装环境 355
12.6 安装阶段 356
12.6.1 步骤1:配置安装环境 356
12.6.2 步骤2:启动Oracle安装 357
12.7 安装后阶段:坚持五点 358
12.7.1 步骤1:检查错误 358
12.6.3 步骤3:选择和安装软件产品 358
12.7.2 步骤2:运行root.sh脚本 359
12.7.3 步骤3:验证文件的许可权 360
12.7.4 步骤4:测试Oracle安装 360
12.7.5 步骤5:配置环境 360
12.7.6 其他安装后的任务 360
12.8 快速进行Oracle安装的五个技巧 361
12.8.1 从硬盘的准备区域进行安装 361
12.8.2 不安装文档 361
12.8.3 不安装产品的文档 361
12.8.4 不选择重新连接可执行文件 361
12.8.5 设置环境变量DEF_INSTALL=TRUE和NO_README=TRUE 361
12.9 在Windows NT上安装Oracle 361
12.9.1 安装前阶段 361
12.9.2 安装阶段 362
12.9.3 安装后阶段 363
12.10 修补、升级和移植Oracle 363
12.10.1 始终将Oracle软件安装到新的ORACLE_HOME目录中 365
12.10.2 数据库升级前进行数据库冷备份 365
12.10.3 移植Oracle 367
12.10.4 使用Migration Utility移植到Oracle 8.0.x 367
12.10.5 用导出和导入移植 369
12.11 安装UNIX上的Oracle 8 370
12.11.1 安装前阶段 370
12.11.2 安装阶段 373
12.11.3 安装后阶段 374
12.12 回顾 376
附录A Oracle服务器介绍 378
附录B 动态性能(V$)视图 413