前 言知识有一个特性,那就是共享程度越高,增长得越快。这就是我撰写和完成本书的动力。本书浓缩了近几年数据库管理的经验。我希望书中的许多经验和技巧有助于读者克服学习中的困难。怎样阅读本书本书各章按内容划分为几个方面。应该从头到尾通读本书。学习本书所花的时间会在以后的工作中得到数倍的回报。也可以采用模块化的方法,有选择地阅读更适合自己知识水平和目的的章节。如果您不太熟悉 Oracle 或者希望更新自己的基础知识,可先阅读附录 A,其中简明扼要地介绍了 Oracle,然后再从头到尾地通读全书。如果已经对 Oracle 的疹景和基础有所了解,可从任意适合自己或自己感兴趣的章节开始学习。例如,对那些需要学习 Oracle8i 的新数据库管理的新增特征功能以便更新其知识的人员,在阅读其他章节前,可以先看第 9 章“Oracle8i 的新特性”。而希望了解 Oracle 的 Internet 计算功能以及 Oracle 应用服务器的读者可直接阅读第 10 章“Internet DBA”地其他各章也都覆盖了某个特定的重要领域。怎样增加知识在某一领域取得成功的关键是不断丰富自己的知识。知识是竞争的决定因素。因为科技发展日新月异,我们都应该跟上科技发展的步伐。访问数据库专业人员在线社区(http://www.dbtips.com),可以下载很多有用的脚本,包括许多出现在本书中的脚本,以及得到“How to Create SQL Scripts That Work”的免费拷贝,这个拷贝提供了创建和定制更符合您的需求的脚本的技巧和技术。我将会在此站点张贴新的技巧和技术、脚本、论文以及文章。欢迎您在此站点张贴自己的想法、经验、问题、解答以及评论,与大家共享和交换知识。
目录:
贺辞
序
前言
第1章 建立和配置数据库
1.1 数据库创建规划
1.1.1 规划以及提出正确的问题
1.1.2 怎样确定恰当的数据块尺寸
1.2 组织文件系统
1.2.1 怎样命名数据库文件
1.2.2 使用最佳灵活结构
1.2.3 怎样配置符合 OFA 的 Oracle 文件
系统
1.3 规划数据库文件布局
1.3.1 最大化可用性的规划
1.3.2 最小化磁盘争用的规划
1.4 建立参数文件
1.4.1 配置参数的一些注意事项
1.4.2 建立参数文件的连接
1.4.3 优化数据字典存储
1.5 理解 CREATE DATABASE 命令
1.6 创建数据库的技术
1.6.1 利用 Oracle 安装程序创建数据库
1.6.2 使用安装程序创建数据库的注意
事项
1.6.3 怎样建立自己的定制数据库创建
脚本
1.6.4 如何从已有数据库克隆数据库
1.6.5 怎样利用 Database Configuration
Assistant 创建数据库
1.7 完成数据库配置
1.7.1 创建表空间
1.7.2 执行数据字典配置脚本
1.7.3 建立另外的回退段
1.7.4 修改 SYSTEM 用户的缺省和临时
表空间
1.7.5 更改 SYS 和 SYSTEM 的缺省
口令
1.7.6 建立其他用户和模式对象
1.7.7 启用归档日志方式
1.7.8 进行数据库完全备份
1.7.9 配置数据库自动启动和关闭
1.7.10 在数据库投入使用之后对其进行
监控
1.7.11 怎样列出和描述初始化参数
1.7.12 怎样列出无记载参数
1.8 回顾
第2章 管理数据存储、对象和容量
2.1 配置数据存储
2.1.1 管理可用空间碎片
2.1.2 聚集可用空间的技术
2.1.3 管理区的碎片
2.1.4 查找接近 MAXEXTENTS 值的
对象
2.1.5 避免数据字典的碎片
2.1.6 本地管理区
2.1.7 进行全数据库重组
2.1.8 定义区大小和防止碎片的11个
技巧
2.1.9 避免区出超错误
2.1.10 避免空间出超错误
2.1.11 使行链接和行迁移最小化
2.1.12 怎样检测行链接/行迁移
2.1.13 利用脚本检查模式中的链接行
2.1.14 消除行链接
2.1.15 消除行迁移
2.1.16 行链接/行迁移的技巧
2.1.17 怎样定义表的大小
2.1.18 怎样确定 PCTFREE 的最佳值
2.1.19 怎样决定 PCTUSED 的最佳值
2.1.20 怎样查找每个数据块的可用数据
区域
2.2 管理程序对象
2.2.1 怎样检查无效对象
2.2.2 怎样重新编译无效对象
2.2.3 在不同表空间之间移动索引
2.2.4 怎样查找最高点
2.2.5 怎样释放未用空间
2.3 DBMS_SPACE 程序包
2.3.1 使用 DBMS_SPACE.UNUSED
_SPACE
2.3.2 使用 DBMS_SPACE.FREE
_BLOCK
2.4 管理锁争用
2.4.1 怎样查找产生锁的 SQL 语句
2.4.2 怎样释放锁
2.4.3 怎样删除用户会话
2.4.4 怎样从数据字典中提取视图创建
命令
2.4.5 怎样从数据字典中提取索引定义
2.5 回顾
第3章 导出和导入技术
3.1 导出/导入特性概述
3.1.1 使用导出和导入
3.1.2 导出/导入的一般使用
3.1.3 导出方式
3.1.4 导入方式
3.1.5 创建必需的数据字典视图
3.1.6 指定导出/导入参数
3.1.7 在磁带上直接导出和导入数据
3.1.8 估计导出文件的大小
3.1.9 直接导出压缩文件
3.1.10 从压缩导出文件中直接导入
3.1.11 创建一致的导出文件
3.1.12 检查导出/导入错误
3.1.13 用导出和导入管理区
3.1.14 组织和命名导出/导入文件
3.1.15 显示导出文件的内容
3.1.16 不能对恢复同时使用导出和归档
重做日志
3.1.17 增量、累积和完全的导出和导入
3.2 怎样优化导出性能
3.2.1 使用 DIRECT 路径导出
3.2.2 对传统的路径导出使用大的
BUFFER 值
3.2.3 对直接路径导出使用 RECORDL-
ENGHT 参数
3.3 怎样优化导入参数
3.3.1 使用大的回退段
3.3.2 创建几个大的联机重做日志文件
3.3.3 导入过程中关闭归档方式
3.3.4 分开导出转储文件、数据表空间、
回退段和联机重做日志文件
3.3.5 最小化检查点
3.3.6 单独创建索引
3.3.7 设置大的初始化参数 SORT_AREA
_SIZE
3.3.8 使用大的导入缓冲区
3.3.9 最小化数据库提交次数
3.4 Oracle8i 的新特性
3.4.1 子分区的导出和导入
3.4.2 导出/导入多个转储文件
3.4.3 为卸载表的导出过程的选择语句
指定一个查询
3.4.4 导出/导入预计算优化程序统计
数据
3.4.5 可移动表空间
3.5 回顾
第4章 设计高可用性数据库
4.1 如何发现和保护“致命的弱点”
4.2 复用数据库控制文件
4.3 在硬件级上镜像控制文件
4.4 镜像和复用的区别
4.5 为高可用性选择磁盘类型
4.6 常规的 RAID 技巧
4.7 给控制文件增长的空间
4.8 如何配置日志组
4.9 保护 SYSTEM 表空间的三种简单
方法
4.10 为什么必须保护 ORACLE_HOME
4.11 保护操作系统
4.12 如何保护回退段
4.13 分类和划分数据
4.14 划分表空间的优先次序
4.15 如何配置高可用性的 TEMP 表空间
4.16 确保在归档日志目标位置有足够的
可用空间
4.17 如何调整联机重做日志
4.18 通过优化归档速度避免 LGWR 等待
4.19 将联机重做日志和归档重做日志文件
分开
4.20 如何加速实例的恢复
4.21 回顾
第5章 使用热备用数据库
5.1 什么是失败切换
5.2 热备用数据库
5.2.1 热备用数据库的优点
5.2.2 热备用数据库的缺点
5.2.3 建立和配置热备用数据库
5.2.4 创建备用数据库作为主数据库的
一个子集
5.2.5 选择备用站点
5.2.6 选择备用节点
5.2.7 进行热备用的失败切换
5.2.8 关于备用激活要记住的三个要点
5.2.9 备用激活后的四项工作
5.2.10 将归档重做日志自动传送到备用
数据库
5.2.11 启动管理恢复
5.2.12 只读打开备用数据库
5.2.13 热备用数据库的维护
5.3 回顾
第6章 高级的失败切换方法
6.1 将 Oracle 并行服务器用于失败切换
6.2 并行服务器失败切换的优点
6.3 并行服务器失败切换的缺点
6.4 性能考虑
6.5 降低并行服务器失败切换的时间
6.6 透明的应用程序失败切换
6.7 客户机失败切换的说明
6.8 将客户机失败切换用于负载平衡
6.9 为预定的节点停机使用客户机失败
切换
6.10 用 Oracle 复制实现失败切换
6.10.1 基本复制
6.10.2 基本复制失败切换的优点
6.10.3 基本复制失败切换的缺点
6.11 将高级复制用于失败切换
6.11.1 高级复制失败切换的优点
6.11.2 高级复制失败切换的缺点
6.12 利用 Oracle Fail Safe
6.12.1 选择节点配置
6.12.2 Oracle Fail Safe 的优点
6.12.3 Oracle Fail Safe 的缺点
6.13 其他高可用性的选项
6.13.1 鞋带状预算的高可用性:传送备份
磁带
6.13.2 采用远程镜像
6.13.3 应用程序镜像
6.14 利用混合配置技术
6.14.1 利用并行服务器与远程热备用
数据库
6.14.2 利用 Oracle Fail Safe 与远程热
备用数据库(仅 Windows NT
平台有效)
6.14.3 利用热备用数据库与远程镜像
6.15 回顾
第7章 备份和恢复技术
7.1 备份选项
7.2 操作系统备份
7.2.1 冷备份
7.2.2 OFA 和备份
7.2.3 热备份
7.2.4 使备份方式的持续时间最小化
7.2.5 为什么不应备份联机重做日志
7.2.6 ARCHIVELOG 和 NOARCHIV-
ELOG方式
7.2.7 为什么应使用 ARCHIVELOG
方式
7.2.8 为什么应该复用归档重做日志
7.3 服务器管理备份
7.4 逻辑备份
7.4.1 文本文件备份
7.4.2 逻辑控制文件备份
7.4.3 使用导出和导入
7.4.4 导入方式
7.4.5 增量、累积和完全的导出和导入
7.4.6 创建一致的导出文件
7.4.7 不能同时使用导出和归档重做日志
进行恢复
7.5 开发备份和恢复计划
7.5.1 常规的备份技巧
7.5.2 快速备份的技巧
7.6 恢复策略和情况
7.6.1 数据库恢复和涉及的数据库结构
组织
7.7 各种需要恢复的情形
7.8 恢复丢失的数据文件
7.8.1 SYSTEM 数据文件的丢失
7.8.2 包含活动回退段的数据文件的丢失
7.8.3 其他数据文件的丢失
7.8.4 执行表空间恢复
7.8.5 执行数据文件恢复
7.8.6 在没有数据文件备份时怎样进行
恢复
7.8.7 恢复丢失的临时表空间
7.8.8 只读表空间丢失
7.8.9 索引表空间丢失
7.9 恢复联机重做日志
7.9.1 联机重做日志组某个成员丢失
7.9.2 非活动的重做日志组丢失
7.9.3 活动重做日志组丢失
7.10 恢复丢失的控制文件
7.10.1 被复用的控制文件成员丢失
7.10.2 控制文件完全丢失
7.11 回顾
第8章 性能优化
8.1 优化系统全局区域的技术
8.1.1 怎样优化数据缓冲区高速缓存
8.1.2 度量和优化库高速缓存的性能
8.1.3 度量和优化字典高速缓存的性能
8.1.4 怎样估计应用程序的效能
8.2 固定应用程序代码
8.2.1 怎样确定应该固定的对象
8.2.2 怎样确定当前固定的程序对象
8.2.3 怎样固定应用程序代码
8.2.4 使用 DBMS_SHARED_POOL.KEEP
的技巧
8.2.5 怎样生成进行固定操作的脚本
8.2.6 使用 DBMS_SHARED_POOL
.UNKEEP 的技巧
8.3 优化数据排序的技术
8.3.1 在内存中进行全部或大部分排序
8.3.2 最小化排序时的空间管理开销
8.3.3 使用多个 TEMP 表空间分布排序
8.4 优化数据存储的技术
8.4.1 使行链接和行迁移最小化
8.4.2 检测行链接/迁移
8.4.3 确定模式中的链接行
8.4.4 防止和纠正行链接/迁移
8.4.5 行链接/迁移的技巧
8.4.6 使可用空间碎片最小化
8.4.7 使区增长最小化
8.4.8 怎样确定代价最高的查询
8.5 跟踪 SQL
8.5.1 设置用户会话内的跟踪
8.5.2 使用 DBMS_SYSTEM 设置用户
会话外的跟踪
8.5.3 生成系统跟踪
8.5.4 使用 tkprof 解释跟踪文件
8.5.5 使用 AUTOTRACE 获得 SQL 语句
执行计划和统计数据
8.6 优化回退段
8.6.1 最小化回退段争用
8.6.2 使动态扩充最小化
8.6.3 分布回退段的 I/O
8.7 优化索引
8.7.1 怎样确定和重建产生碎片的索引
8.7.2 怎样确定表的索引
8.8 优化磁盘 I/O
8.8.1 怎样查找和避免 I/O 热点
8.8.2 使用原始文件系统
8.9 生成优化程序统计数据
8.9.1 使用 DBMS_UTILITY.ANALYZE
_SCHEMA收集统计数据
8.9.2 使用 DBMS_UTILITY.ANALYZE
_DATABASE 收集统计数据
8.9.3 使用 DBMS_STATS 收集性能统计
数据
8.10 优化环境
8.10.1 怎样优化 Net8/SQL*Net
8.10.2 监控并优化系统资源
8.11 回顾
第9章 Oracle8i 的新特性
9.1 新的性能优化特性
9.1.1 设计的稳定性和存储概要
9.1.2 排序改进
9.1.3 实体化视图
9.1.4 利用 DBMS_STATS 收集性能统计
数据
9.2 新索引类型
9.2.1 基于函数的索引
9.2.2 反向键索引
9.2.3 降序索引
9.2.4 索引编排表
9.2.5 管理索引的新特性
9.3 新备份和恢复特性
9.3.1 多目标归档
9.3.2 多归档日志进程
9.3.3 使用 LogMiner
9.3.4 快速启动恢复
9.4 新导出/导入特性
9.4.1 使用多个导出/导入转储文件
9.4.2 选择性的查询导出
9.4.3 预先计算优化程序统计数据的导出
/导入
9.4.4 可移动表空间
9.4.5 混合导出/导入特性
9.5 新备用数据库特性
9.5.1 归档重做日志的自动传送
9.5.2 启用管理恢复
9.5.3 以只读方式打开备用数据库
9.6 管理作业队列的新特性
9.7 管理存储和对象的新功能
9.7.1 重新定位和组织表
9.7.2 删除表中的列
9.7.3 将表列标记为不可用
9.7.4 本地管理的表空间
9.8 回顾
第10章 Internet DBA
10.1 Oracle8i — Internet 数据库
10.2 Oracle 与 Java
10.3 Oracle8i Java 虚拟机
10.4 Java VM 与 Oracle8i 服务器怎样通讯
10.5 Java 与 Oracle 应用程序服务器
10.6 Oracle Jdeveloper
10.7 与 Java 有关的初始化参数
10.8 Oracle Internet 文件系统
10.9 Oracle 应用服务器概览
10.10 OAS 组件
10.11 调整 OAS 内存请求
10.12 检查建议的最小硬件
10.13 设计 Oracle 应用服务器配置
10.14 Oracle 应用服务器的安装
10.15 使用 OAS 管理程序
10.16 怎样启动和停止 OAS 组件
10.17 OAS 怎样利用负载平衡
10.18 监控 CPU 的消耗情况
10.19 监控内存消耗
10.20 回顾
第11章 使用 Oracle 提供的程序包
11.1.1 程序包:它们是什么?
11.1 DBMS_JOB 和 DBMS_IJOB 程序包
11.1.1 Oracle 作业队列的概念
11.1.2 配置 SNP 进程的技巧
11.1.3 利用 DBMS_JOB 和 DBMS_IJOB
11.1.4 调度作业
11.1.5 更改作业
11.1.6 停止作业
11.1.7 其他作业队列过程
11.1.8 监控作业队列
11.1.9 管理属于其他用户的作业
11.1.10 利用作业队列定期分析模式
对象
11.2 DBMS_SYSTEM 程序包
11.2.1 使用 DBMS_SYSTEM.SET_SQL
_TRACE_IN_SESSION
11.2.2 使用 DBMS_SYSTEM.SET_EV
11.2.3 使用 DBMS_SYSTEM.READ_EV
11.2.4 确定当前会话中设置的事件级别
11.2.5 其他 DBMS_SYSTEM 程序
11.3 DBMS_SPACE 程序包
11.3.1 使用 DBMS_SPACE.UNUSED
_SPACE
11.3.2 使用 DBMS_SPACE.FREE
_BLOCKS
11.4 DBMS_SHARED_POOL 程序包
11.4.1 使用 DBMS_SHARED_POOL.SIZES
过程
11.4.2 使用 DBMS_SHARED_POOL.SIZES
的技巧
11.4.3 使用 DBMS_SHARED_POOL.KEEP
过程
11.4.4 使用 DBMS_SHARED_POOL.KEEP
的技巧
11.4.5 使用 DBMS_SHARED_POOL.UNKEEP
过程
11.4.6 使用 DBMS_SHARED_POOL.UNKEEP
的技巧
11.4.7 使用 DBMS_SHARED_POOL
.ABORTED_REQUEST_THRESHOLD
过程
11.4.8 使用 DBMS_SHARED_POOL
.ABORTED_REQUEST_THRESHOLD
的技巧
11.5 DBMS_UTILITY
11.5.1 使用 DBMS_UTILITY.COMPILE
_SCHEMA过程
11.5.2 使用 DBMS_UTILITY.COMPILE
_SCHEMA 的技巧
11.5.3 使用 DBMS_UTILITY.ANALYZE
_SCHEMA
11.5.4 使用 DBMS_UTILITY.ANALYZE
_DATABASE
11.5.5 使用 DBMS_UTILITY.GET
_PARAMETER_VALUE
11.5.6 使用 DBMS_UTILITY.PORT
_STRING
11.5.7 使用 DBMS_UTILITY.DB
_VERSION
11.5.8 使用 DBMS_UTILITY.MAKE_DATA
_BLOCK_ADDRESS
11.5.9 使用 DBMS_UTILITY.DATA_BLOCK
_ADDRESS_FILE
11.5.10 使用 DBMS_UTILITY.DATA_BLOCK
_ADDRESS_BLOCK
11.5.11 使用 DBMS_UTILITY.IS_PARALLEL
_SERVER
11.5.12 使用 DBMS_UTILITY.CURRENT
_INSTANCE
11.5.13 使用 DBMS_UTILITY.ACTIVE
_INSTANCES
11.6 DBMS_ROWID
11.6.1 使用 DBMS_ROWID.ROWID
_BLOCK_NUMBER
11.6.2 使用 DBMS_ROWID.ROWID
_CREATE
11.6.3 使用 DBMS_ROWID.ROWID
_OBJECT
11.6.4 使用 DBMS_ROWID.ROWID
_RELATIVE_FNO
11.6.5 使用 DBMS_ROWID.ROWID_ROW
_NUMBER
11.6.6 使用 DBMS_ROWID.ROWID_TO
_ABSOLUTE_FNO
11.6.7 使用 DBMS_ROWID.ROWID
_TO_EXTENDED
11.6.8 使用 DBMS_ROWID.ROWID_TO
_RESTRICTED
11.6.9 使用 DBMS_ROWID.ROWID
_TYPE
11.6.10 使用 DBMS_ROWID.ROWID
_VERIFY
11.6.11 使用 DBMS_ROWID.ROWID
_INFO
11.7 回顾
第12章 Oracle 安装和升级
12.1 Oracle 软件
12.2 Oracle 数据库
12.3 配置 Oracle 文件系统
12.3.1 最佳灵活结构
12.3.2 怎样配置一个符合 OFA 的 Oracle
文件系统
12.3.3 怎样命名数据库文件
12.3.4 为什么应对参数文件使用链接
12.4 安装 Oracle 服务器软件
12.5 安装前阶段
12.5.1 规则1:确保软件产品版本的兼
容性
12.5.2 规则2:为 Oracle 配置操作系统
12.5.3 规则3:分配足够的磁盘空间
12.5.4 规则4:配置安装环境
12.6 安装阶段
12.6.1 步骤1:配置安装环境
12.6.2 步骤2:启动 Oracle 安装
12.6.3 步骤3:选择和安装软件产品
12.7 安装后阶段:坚持五点
12.7.1 步骤1:检查错误
12.7.2 步骤2:运行 root.sh 脚本
12.7.3 步骤3:验证文件的许可权
12.7.4 步骤4:测试 Oracle 安装
12.7.5 步骤5:配置环境
12.7.6 其他安装后的任务
12.8 快速进行 Oracle 安装的五个技巧
12.8.1 从硬盘的准备区域进行安装
12.8.2 不安装文档
12.8.3 不安装产品的文档
12.8.4 不选择重新连接可执行文件
12.8.5 设置环境变量 DEF_INSTALL =
TRUE 和 NO_README = TRUE
12.9 在 Windows NT 上安装 Oracle
12.9.1 安装前阶段
12.9.2 安装阶段
12.9.3 安装后阶段
12.10 修补、升级和移植 Oracle
12.10.1 始终将 Oracle 软件安装到新
的 ORACLE_HOME 目录中
12.10.2 数据库升级前进行数据库冷备份
12.10.3 移植 Oracle
12.10.4 使用 Migration Utility 移植到
Oracle 8.0.x
12.10.5 用导出和导入移植
12.11 安装 UNIX 上的 Oracle 8
12.11.1 安装前阶段
12.11.2 安装阶段
12.11.3 安装后阶段
12.12 回顾
附录 A Oracle 服务器介绍
附录 B 动态性能(V$)视图
展开