Professional Documents
Culture Documents
OCP官方配需系列 - 数据库管理基础 4 PDF
OCP官方配需系列 - 数据库管理基础 4 PDF
学生指南 • 第 2 册
D11297CN11
产品版 1.1
2002 年 3 月
D34486
作者 版权所有 © Oracle Corporation,2000,2001。保留所有权利。
出版商
John B Dawson
目录
前言
1 联网概览
目标 1-2
网络环境的挑战 1-3
简单网络:两层 1-5
简单网络到复杂网络:N 层 1-6
复杂的网络 1-7
Oracle9i 联网解决方案 1-8
连接性:Oracle Net Services 1-9
连接性:使用 IIOP 和 HTTP 连接数据库 1-11
目录命名 1-12
目录服务:Oracle Internet Directory 1-14
可伸缩性:Oracle Shared Server 1-15
可伸缩性:连接管理器 (Connection Manager) 1-16
安全性:高级安全性 (Advanced Security) 1-18
高级安全性 (Advanced Security) 加密 1-19
安全性:Oracle Net Services 和防火墙 1-20
可访问性:异种服务 1-21
可访问性:外部过程 1-22
Oracle Net Configuration Assistant 1-23
Oracle Net Manager 1-24
小结 1-25
2 Oracle Net 体系结构
目标 2-2
Oracle Net 连接 2-3
客户机-服务器应用程序连接:无中间层 2-4
Web 客户机应用程序连接 2-6
Web 客户机应用程序连接:Web 服务器中间层 2-7
Web 客户机应用程序连接:Java 应用程序客户机 2-8
Web 客户机应用程序连接:Java 小程序客户机 2-9
Web 客户机应用程序连接:无中间层 2-10
连接概念与术语 2-12
Oracle Net 配置模型 2-14
Oracle Net 配置文件 2-15
小结 2-17
3 Oracle Net 服务器端基本配置
目标 3-2
监听程序进程 3-3
连接方法 3-4
衍生、继承和直接传送连接 3-5
重定向会话 3-7
服务配置和注册 3-9
iii
静态服务注册:listener.ora 文件 3-12
静态服务注册:创建监听程序 3-15
配置服务 3-16
事件记录与跟踪 3-17
动态服务注册:配置注册 3-18
动态服务注册:向监听程序注册信息 3-19
为 Oracle9i JVM 配置监听程序:IIOP 和 HTTP 3-20
“监听程序控制实用程序” (Listener Control Utility, LSNRCTL) 3-22
LSNRCTL 命令 3-23
LSNRCTL SET 和 SHOW 修改符 3-25
小结 3-27
练习 3 概览 3-28
4 命名方法配置
目标 4-2
命名方法概览 4-3
主机命名 4-4
主机命名:客户端 4-5
主机命名:服务器端 4-6
主机命名示例 4-7
命名方法配置 4-8
选择主机命名方法 4-9
本地命名 4-10
选择本地命名方法 4-11
配置本地网络服务名 4-12
处理网络服务名 4-13
指定 Oracle 数据库的版本 4-14
数据库服务名 4-15
网络协议 4-16
主机名和监听程序端口 4-17
测试连接 4-18
连接测试的结果 4-19
网络服务名 4-20
保存网络服务名 4-21
生成的文件:tnsnames.ora 4-22
生成的文件:sqlnet.ora 4-24
排除客户端故障 4-25
小结 4-27
练习 4 概览 4-28
5 Oracle Shared Server 的使用和配置
目标 5-2
服务器配置 5-3
专用服务器进程 5-4
Oracle Shared Server 5-5
Oracle Shared Server 的优点 5-7
iv
同时使用专用服务器和 Oracle Shared Server 5-8
连接 5-9
处理请求 5-10
SGA 和 PGA 5-12
配置 Oracle Shared Server 5-13
DISPATCHERS 5-14
MAX_DISPATCHERS 5-16
SHARED_SERVERS 5-18
MAX_SHARED_SERVERS 5-20
CIRCUITS 5-21
SHARED_SERVER_SESSIONS 5-22
相关参数 5-23
验证设置 5-25
动态视图 5-27
小结 5-28
练习 5 概览 5-29
6 备份和恢复概览
目标 6-2
备份和恢复问题 6-3
故障类别 6-4
语句故障的原因 6-6
语句故障的解决方法 6-7
用户进程故障的原因 6-8
用户进程故障的解决方法 6-9
可能的用户错误 6-10
用户错误的解决方法 6-11
例程故障的原因 6-12
从例程故障进行恢复 6-13
介质故障的原因 6-15
介质故障的解决方法 6-16
定义备份和恢复策略 6-17
业务要求 6-18
操作要求 6-19
技术方面的考虑因素 6-21
灾难恢复问题 6-23
小结 6-25
7 例程和介质恢复结构
目标 7-2
概览 7-3
大型共享池 7-6
数据库缓冲区高速缓存、DBWn 和数据文件 7-8
重做日志缓冲区、LGWR 和重做日志文件 7-10
v
多元备份的重做日志文件 7-13
Enterprise Manager 中的重做日志文件 7-15
检查点 7-16
检查点类型 7-17
CKPT 进程 7-18
多元备份的控制文件 7-19
Enterprise Manager 中的控制文件 7-21
ARCn 进程和归档日志文件 7-22
数据库同步 7-24
例程恢复的各个阶段 7-25
优化崩溃恢复和例程恢复的性能 7-27
优化例程恢复和崩溃恢复的持续时间 7-28
影响检查点的初始化参数 7-29
控制例程崩溃恢复时间 7-31
V$INSTANCE_RECOVERY 7-32
优化崩溃恢复和例程恢复的阶段 7-34
优化前滚阶段 7-35
优化回退阶段 7-36
快速启动按需回退 7-37
快速启动并行回退 7-38
控制快速启动并行回退 7-39
监视并行回退 7-40
小结 7-41
练习 7 概览 7-42
8 配置数据库归档模式
目标 8-2
重做日志历史记录 8-3
NOARCHIVELOG 模式 8-4
ARCHIVELOG 模式 8-6
更改归档模式 8-8
设置归档模式 8-10
自动和手动归档 8-11
启用自动归档 8-13
指定多个 ARCn 进程 8-14
停止或启动附加归档进程 8-15
在例程启动时启用自动归档 8-16
在例程启动后启用自动归档 8-17
禁用自动归档 8-18
手动归档联机重做日志文件 8-19
手动归档重做日志文件 8-21
指定归档日志目标 8-22
指定多个归档日志目标 8-23
LOG_ARCHIVE_DEST_n 选项 8-24
指定本地目标的最小数量 8-25
vi
控制归档到目标 8-27
指定文件名格式 8-28
获取归档日志信息 8-29
小结 8-32
9 Oracle Recovery Manager 概览和配置
目标 9-2
恢复管理器功能 9-3
恢复管理器组件 9-5
使用 “备份管理” 向导 9-7
RMAN 资料档案库:使用控制文件 9-8
分配通道 9-9
自动分配通道 9-11
使用 OEM 分配通道 9-12
手动分配通道 9-13
介质管理 9-15
使用 RMAN 的连接类型 9-17
不使用恢复目录进行连接 9-18
其它 RMAN 命令行参数 9-20
恢复管理器模式 9-21
RMAN 命令 9-23
作业命令示例 9-25
RMAN 配置设置 9-26
CONFIGURE 命令 9-27
SHOW 命令 9-29
LIST 命令操作 9-30
LIST 命令 9-31
REPORT 命令 9-32
REPORT NEED BACKUP 命令 9-33
恢复管理器程序包 9-34
使用 RMAN 的注意事项 9-35
小结 9-37
练习 9 概览 9-38
10 用户管理的备份
目标 10-2
术语 10-3
用户管理的备份和恢复 10-5
查询视图以获得数据库文件信息 10-6
获得数据库文件信息 10-8
备份方法 10-9
一致的整体数据库备份(关闭的数据库的备份) 10-10
进行一致的整体数据库备份的优点 10-11
进行一致的整体数据库备份 10-13
打开的数据库的备份 10-15
vii
进行打开的数据库的备份的优点 10-16
打开的数据库的备份的要求 10-17
打开的数据库的备份的选项 10-18
进行联机表空间的备份 10-19
结束联机表空间备份 10-20
备份状态信息 10-21
联机表空间备份过程中出现故障 10-23
结束联机备份 10-24
只读表空间备份 10-26
只读表空间备份问题 10-27
与记录和不记录选项相关的备份问题 10-28
手动备份控制文件 10-29
备份初始化参数文件 10-31
使用 DBVERIFY 实用程序验证备份 10-32
DBVERIFY 命令行界面 10-33
小结 10-35
练习 10 概览 10-36
11 RMAN 备份
RMAN 备份概念 11-3
恢复管理器备份 11-4
备份集 11-5
备份集的特性 11-6
备份片 11-7
备份片大小 11-8
BACKUP 命令 11-9
创建备份集 11-12
多元备份集 11-13
备份集的并行化 11-14
双重备份集 11-16
备份集的备份 11-17
归档重做日志文件的备份 11-18
归档重做日志的备份集 11-19
备份约束 11-20
映像副本 11-21
映像副本的特性 11-22
创建映像副本 11-23
映像副本示例 11-24
COPY 命令 11-25
映像复制并行性 11-26
复制整个数据库 11-27
制作增量备份 11-28
差异增量备份的示例 11-30
累积增量备份的示例 11-32
viii
在 NOARCHIVELOG 模式下进行备份 11-33
自动备份 RMAN 控制文件 11-34
备份和映像副本的标记 11-36
RMAN 动态视图 11-37
监视 RMAN 备份 11-38
其它 RMAN 问题 11-40
小结 11-42
练习 11 概览 11-43
12 用户管理的完全恢复
目标 12-2
介质恢复 12-3
恢复步骤 12-4
使用用户管理的过程而执行的还原和数据文件介质恢复 12-5
ARCHIVELOG 模式和 NOARCHIVELOG 模式 12-6
在 NOARCHIVELOG 模式下进行恢复 12-7
在 NOARCHIVELOG 模式下使用重做日志文件备份进行恢复 12-9
在 NOARCHIVELOG 模式下不使用重做日志文件备份进行恢复 12-10
在 ARCHIVELOG 模式下进行恢复 12-11
完全恢复 12-12
在 ARCHIVELOG 模式下进行完全恢复 12-13
确定需要恢复哪些文件 12-14
用户管理的恢复过程:RECOVER 命令 12-16
在恢复过程中使用归档重做日志文件 12-17
使用用户管理的过程将数据文件还原到新的位置 12-19
完全恢复方法 12-20
完全恢复关闭的数据库 12-22
关闭的数据库恢复示例 12-23
恢复打开的数据库(数据库最初是打开的) 12-25
打开的数据库恢复示例 12-26
恢复打开的数据库(数据库最初是关闭的) 12-28
打开的数据库恢复示例 12-29
在没有备份的情况下恢复数据文件 12-31
在没有备份的情况下重新创建丢失的数据文件 12-32
在没有备份的情况下进行恢复的示例 12-33
只读表空间恢复 12-35
只读表空间的恢复问题 12-36
丢失控制文件 12-37
恢复控制文件 12-38
小结 12-39
练习 12 概览 12-40
13 RMAN 完全恢复
目标 13-2
使用 RMAN 执行还原和数据文件介质恢复 13-3
ix
使用 RMAN 恢复 ARCHIVELOG 模式下的数据库 13-4
使用 “恢复向导” (Recovery Wizard) 13-5
使用 RMAN 将数据文件还原到新位置 13-6
还原到新位置 13-7
使用 RMAN 恢复表空间 13-8
表空间恢复 13-9
使用 RMAN 重新定位表空间 13-10
小结 13-12
练习 13-1 和 13-2 概览 13-13
14 RMAN 完全恢复
目标 14-2
不完全恢复概览 14-3
需要进行不完全恢复的情况 14-4
不完全恢复类型 14-5
不完全恢复原则 14-7
不完全恢复和警报日志 14-9
用户管理的不完全恢复的过程 14-10
RECOVER 命令概览 14-11
基于时间的恢复示例 14-12
UNTIL TIME 恢复 14-13
基于取消的恢复示例 14-15
恢复期间使用备份控制文件 14-18
当前重做日志文件丢失 14-21
小结 14-23
练习 14-1 和 14-2 概览 14-24
15 RMAN 不完全恢复
目标 15-2
使用 RMAN 进行数据库的不完全恢复 15-3
指定还原时间 15-4
使用 UNTIL TIME 进行 RMAN 不完全恢复的示例 15-5
使用 UNTIL SEQUENCE 进行 RMAN 不完全恢复的示例 15-7
小结 15-8
练习 15 概览 15-9
16 RMAN 维护
目标 16-2
交叉查对备份和副本 16-3
CROSSCHECK 命令 16-4
删除备份和副本 16-5
DELETE 命令 16-6
删除备份和副本 16-7
更改 RMAN 备份和副本的可用性 16-8
更改可用性状态 16-9
使备份或副本脱离保留策略 16-10
x
CHANGE … KEEP 命令 16-11
将归档重做日志文件和用户管理的备份列入目录 16-12
CATALOG 命令 16-13
不将 RMAN 记录列入目录 16-14
CHANGE … UNCATALOG 命令 16-15
小结 16-16
练习 16 概览 16-17
17 恢复目录的创建和维护
目标 17-2
概览 17-4
恢复目录内容 17-5
使用恢复目录的优点 17-7
创建恢复目录 17-8
使用恢复目录连接 17-11
恢复目录维护 17-12
目录维护 17-13
恢复目录的重新同步 17-14
使用 RESYNC CATALOG 进行重新同步 17-15
重置数据库复本 17-16
恢复目录报告 17-18
查看恢复目录 17-19
已存储的脚本 17-21
脚本示例 17-22
管理脚本 17-23
恢复目录备份 17-24
恢复恢复目录 17-25
小结 17-26
练习 17 概览 17-27
18 在数据库之间传输数据
目标 18-2
Oracle 导出和导入实用程序 18-3
Oracle 导出和导入实用程序概览 18-4
调用导出和导入实用程序的方法 18-6
导出模式 18-7
调用导出实用程序 18-9
使用导出向导 18-12
直接路径导出概念 18-13
直接路径导出功能 18-14
直接路径导出的限制 18-15
指定直接路径导出 18-16
使用导入实用程序进行恢复 18-17
导入模式 18-18
调用导入实用程序 18-19
使用导入向导 18-21
xi
作为 SYSDBA 调用导入实用程序 18-22
导入进程序列 18-23
全球化支持注意事项 18-24
小结 18-25
练习 18 概览 18-26
19 专题讨论
目标 19-2
专题讨论方法 19-4
专题讨论的方法步骤 19-6
业务要求 19-7
排除数据库故障 19-8
排除网络故障 19-10
启用跟踪 19-11
使用跟踪文件 19-12
小结 19-15
练习 19 19-17
附录 A:练习答案
附录 B:专题讨论中出现的情况
附录 C:全球支持公告板
附录 D:将数据加载到数据库中
xii
前言
前言 - 2
配置文件
课前须知
在开始本课程的学习之前,您应该具备以下条件:
• 了解 SQL 命令和基本的操作系统命令(Unix 或 NT)
前提条件
• Oracle 9i 数据库管理基础 I (D11321GC11)(课内)
本课程的组织结构
Oracle 9i 数据库管理基础 II 课程由教师讲解,同时还包括实际操作练习。通过联机演示和笔头练
习,还可强化对课程中介绍的概念和技能的理解。
前言 - 3
相关出版物
Oracle 出版物
书名 编号
Oracle9i Backup and Recovery Concepts A90133-02
Oracle9i Database Administrator's Guide A90117-01
Oracle9i Database Concepts A88856-02
Oracle9i Database Error Messages A90202-02
Oracle9i Database New Features A90120-02
Oracle9i Database Reference A90190-02
Oracle9i Database Utilities A90192-01
Oracle9i Enterprise Manager Administrator’s Guide A88767-02
Oracle9i Enterprise Manager Concepts Guide A88770-01
Oracle9i Enterprise Manager Configuration Guide A88769-01
Oracle9i Net Services Administrator’s Guide A90154-01
Oracle9i Net Services Reference Guide A90155-01
Oracle9i Recovery Manager Reference A90136-02
Oracle9i Recovery Manager User’s Guide A90135-01
Oracle9i SQL Reference A90125-01
Oracle9i User-Managed Backup and Recovery Guide A90134-01
其它出版物
• 系统发行公告牌
• 安装指南和用户指南
• read.me 文件
• International Oracle User’s Group (IOUG) 文章
• Oracle Magazine
前言 - 4
用户管理的完全恢复
完成这一课的学习后,您应该能达到下列目标:
• 描述介质恢复
• 在 NOARCHIVELOG 模式下执行恢复
• 在 ARCHIVELOG 模式下执行完全恢复
• 将数据文件还原到其它位置
• 使用归档重做日志文件重新定位和恢复表空间
• 描述对只读表空间的恢复
• 用于恢复丢失的或损坏的当前数据文件或控制文件
• 要求显式调用
• 操作如下所示:
– 从备份还原文件
– 将重做数据从归档重做日志文件和联机重做日志应用到
还原的文件中
介质恢复
介质恢复用于恢复丢失的或损坏的当前数据文件或控制文件。它还可用于恢复数据文件脱
机时由于未使用 OFFLINE NORMAL 选项而丢失的那些更改。
还原文件
在还原文件时,其实是使用备份副本替代丢失的或损坏的文件。
文件恢复
在恢复文件时,将重做日志文件中记录的更改应用到所还原的文件中。
联机
重做日志
应用了重做 应用了还原
2 4
数据文件 1 数据文件 1 数据文件 1
恢复步骤
1. 从备份还原损坏的或丢失的文件。
2. 根据需要应用归档重做日志文件和联机重做日志文件中的更改。此时将生成还原块。
这称为前滚或高速缓存恢复。
3. 数据库此时可能包含已提交的和未提交的更改。
4. 还原块用于回退任何未提交的更改。这称为回退或事务处理恢复。
5. 数据库现处于已恢复状态。
• 使用操作系统命令还原文件
• 使用 SQL*Plus RECOVER 命令恢复文件
使用用户管理的过程而执行的还原和数据文件介质恢复
在还原文件时,使用操作系统命令从备份中复制文件。可以还原数据文件、控制文件、归
档重做日志文件和服务器参数文件。
使用 SQL*Plus RECOVER 命令将重做日志文件应用到还原的文件中。可以执行自动恢复,
或者逐个查看日志文件以应用更改。
• 在 NOARCHIVELOG 模式下,必须还原以下数据库文件:
– 所有数据文件
– 控制文件
• 也可以还原以下文件:
– 重做日志文件
– 口令文件
– 参数文件
• 优点
– 易于操作,出错的风险小
– 恢复时间即为还原所有文件所花的时间
• 缺点
– 数据将丢失,必须手动重新应用
– 将整个数据库还原到上次备份时的状态(关闭的数据库的整
体备份)
在 NOARCHIVELOG 模式下进行恢复:优点和缺点
是否决定在 NOARCHIVELOG 模式下操作数据库,应考虑在恢复时的以下优缺点:
优点
• 易于操作,原因是只需从一个备份中还原所有的文件。唯一的风险在于操作本身:还
原错误的备份、覆盖备份、还原之前未关闭数据库或者备份无效。经过充分的培训和
测试,可最大限度地降低此类风险。
• 在给定的硬件和操作系统下,恢复时间只是还原所有文件所花的时间长度。
缺点
• 自上一次备份后用户输入的所有数据将丢失,必须手动重新应用。
• 即使只丢失了一个数据文件,也必须从上次执行的、关闭的数据库的整体备份中还原
整个数据库。
在 NOARCHIVELOG 模式下进行用户管理的恢复
示例
磁盘 2 被损坏,结果丢失了数据文件 2。仅有 2 个联机重做日志文件。
上次备份是在日志序列 144 进行的,当前日志序列号为 146。
不能恢复该数据文件,因为重做日志 144 已被覆盖。如果尝试进行恢复,将会证实这一问
题。因此,必须关闭数据库并还原所有的 Oracle 文件。
SQL> SHUTDOWN ABORT
要还原文件,请:
UNIX: cp /BACKUP/* /databases/db01/ORADATA
Windows NT: copy d:\disk1\backup\*.* d:\disk1\data\
复制结束后,重新启动例程:
SQL> CONNECT / as sysdba
SQL> STARTUP
通知用户,他们需要重新输入自上一次备份以后输入的数据。
1. 关闭例程。
2. 从数据库的最新而且完整的备份中还原数据文件
和控制文件。
3. 执行基于取消的恢复。
4. 使用 RESETLOGS 选项打开数据库。
不使用重做日志文件备份进行恢复
1. 如果数据库已打开,则按如下方式关闭它:
SQL> SHUTDOWN IMMEDIATE
2. 使用操作系统命令还原对数据库的最新而且完整的备份。必须还原所有的数据文件和
控制文件,而不仅仅是还原损坏的文件。以下示例还原了数据库的完整备份:
$ cp /db01/BACKUP/*.dbf /ORADATA/u*/* # restores datafiles
$ cp /db01/BACKUP/*.ctl /ORADATA/u*/* # restores control file
3. 因为您没有备份联机重做日志,所以不能使用数据文件和控制文件还原它们。因此,
Oracle 允许重置联机重做日志,您必须按如下方式仿效进行不完全恢复:
SQL> RECOVER DATABASE UNTIL CANCEL USING BACKUP
CONTROLFILE
SQL> CANCEL
4. 然后,使用 RESETLOGS 选项打开数据库,将当前的重做日志序列重置为 1(如下所
示):
SQL> ALTER DATABASE OPEN RESETLOGS;
• 完全恢复
– 使用重做数据或增量备份
– 将数据库更新到最近的时间点
– 应用所有的重做更改
• 不完全恢复
– 使用备份和重做日志生成数据库的除当前版本之外的
其它版本
在 ARCHIVELOG 模式下进行恢复
比较完全恢复和不完全恢复
在执行介质恢复时,您将还原的文件更新到当前时间,或者更新到由用户指定的、除当前
时间之外的时间。
在完全恢复中,使用重做日志文件或增量备份将还原文件更新到最近的时间点。将归档重
做日志文件和联机重做日志文件中包含的重做更改全部应用到这些文件中。可以对数据库、
表空间或数据文件执行完全恢复。
对于不完全恢复,其实就是将数据库恢复到当前时间以前的某一时刻。通常,您并不会应
用备份后生成的所有重做条目。
• 确保要还原的数据文件处于脱机状态。
• 仅还原丢失的或损坏的数据文件。
• 不要还原控制文件、重做日志文件、口令文件
或参数文件。
• 恢复数据文件。
• 优点
– 仅需还原丢失的文件
– 将所有数据恢复到发生故障前那一刻的情形
– 恢复时间即为还原所丢失的文件以及应用所有归档日志文件
所花的时间
• 缺点
– 必须有自您正用于还原的那个备份之后得到的所有归档日志
文件
在 ARCHIVELOG 模式下进行恢复:优点和缺点
优点
• 仅需还原丢失或损坏的文件。
• 已提交的数据不会丢失。通过还原上述文件并应用归档日志和重做日志,就可将数据
库恢复至当前的时间点。
• 恢复的总时间就等于还原文件并应用所有归档日志和重做日志所需的时间。
• 可以在数据库打开的情况下进行恢复(包含联机还原段的系统表空间文件和数据文件
除外)。
缺点
必须有自上次备份起到当前时间的所有归档重做日志文件。如果缺失一个文件,则无法执
行完全恢复,原因是必须依次应用所有的归档重做日志文件;即,先应用归档日志 144,
其次是 145,再次是 146,以此类推。
• 查看 V$RECOVER_FILE 以确定需要恢复哪些数据文件。
• 查看 V$ARCHIVED_LOG 以得到数据库的所有归档重做
日志文件的列表。
• 查看 V$RECOVERY_LOG 以得到进行恢复时所需的所有
归档重做日志文件的列表。
确定需要恢复哪些文件
确定需要恢复的数据文件
要确定需要恢复哪些数据文件以及需要从哪里开始恢复,请按如下方式使用
V$RECOVER_FILE 视图:
SQL> SELECT * FROM v$recover_file;
FILE# ONLINE ERROR CHANGE# TIME
----- ------- ------ ------- ---------
2 OFFLINE 288772 02-MAR-01
ERROR 列返回两个可能的值,从而定义需要恢复该文件的原因:
• NULL(如果原因未知)
• OFFLINE NORMAL(如果不需要恢复)
CHANGE# 列返回 SCN(系统更改号),必须从 SCN 开始进行恢复。
• 恢复装载的数据库:
SQL> RECOVER DATABASE
或
SQL> RECOVER DATAFILE
2> ‘/ORADATA/u03/users01.dbf’
• 恢复打开的数据库:
SQL> RECOVER TABLESPACE users
或
SQL> RECOVER DATAFILE
2> ‘/ORADATA/u03/users01.dbf’
RECOVER 命令
要恢复数据库,可以发出以下命令之一:
• RECOVER [AUTOMATIC] DATABASE
此命令只能用于恢复关闭的数据库。
• RECOVER [AUTOMATIC] TABLESPACE <NUMBER> | <NAME>
此命令只能用于恢复打开的数据库。
• RECOVER [AUTOMATIC] DATAFILE <‘filename’> | <NAME>
此命令既可用于恢复打开的数据库,又可用于恢复关闭的数据库。
其中:AUTOMATIC 会自动应用归档日志文件和重做日志文件。
• 要更改归档位置,请使用
ALTER SYSTEM ARCHIVE LOG. . . 命令。
• 要自动应用重做日志文件:
– 在开始介质恢复前,先发出 SET AUTORECOVERY ON 命令。
– 当提示输入一个归档日志文件时,请输入 auto。
– 使用 RECOVER AUTOMATIC. . . 命令。
在恢复过程中使用归档重做日志文件
在恢复过程中,Oracle 服务器可以手动或自动应用所需的归档重做日志文件和联机重做日
志文件,以重新构建数据文件。在应用重做日志文件之前,Oracle 服务器会建议您提供所
要应用的日志文件的名称。
将归档还原至不同的位置
如果归档重做日志文件不还原到 LOG_ARCHIVE_DEST 目录中,则需要采取以下方法之
一,在开始恢复之前或在恢复过程中通知 Oracle 服务器:
• 在恢复提示下指定位置和名称:
Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
• 使用 ALTER SYSTEM ARCHIVE 命令:
SQL> ALTER SYSTEM ARCHIVE LOG START TO <new location>;
• 使用 RECOVER FROM <LOCATION> 命令:
SQL> RECOVER FROM ‘<new location>’ DATABASE
• 使用操作系统命令将数据文件还原到新的位置。
• 使用 ALTER DATABASE RENAME FILE 命令将更改
记录到控制文件中。
用于将数据文件还原到新位置的、用户管理的过程
1. 使用操作系统命令将文件还原到新的位置。
注:在 UNIX 环境中,在发出 ALTER DATABASE RENAME 命令之前,文件必
须位于新位置。在 Windows NT 环境中,则不必如此。
2. 启动该例程并装载数据库。
3. 使用 ALTER DATABASE 命令来更新控制文件,将其更新为新的文件名或更新到
新的位置:
SQL> ALTER DATABASE RENAME FILE
2> ‘/ORADATA/u03/users01.dbf‘
3> to ‘/ORADATA/u04/users01.dbf‘;
• 恢复关闭的数据库,用于:
– 系统数据文件
– 还原段数据文件
– 整个数据库
• 恢复打开的数据库,并且数据库最初是打开的
(用于恢复丢失的文件)
• 恢复打开的数据库,并且数据库最初是关闭的
(用于在发生硬件故障后进行恢复)
• 在没有数据文件备份的情况下恢复数据文件
完全恢复方法
执行完全恢复的方法有 4 种:
方法 1:恢复关闭的数据库
此方法适用于以下情况:
• 数据库不是全天候(每周 7 天、每天 24 小时)运行。
• 恢复的文件属于系统表空间或还原段表空间。
• 需要恢复整个数据库或大部分数据文件。
方法 2:恢复打开的数据库(数据库最初是打开的)
此恢复方法一般在以下情况下使用:
• 发生了文件损坏、文件意外丢失或介质故障,但未导致数据库关闭。
• 数据库全天候(每周 7 天、每天 24 小时)运行。必须最大限度地减少数据库的停机时
间。
• 恢复的文件不属于系统表空间或还原段表空间。
恢复关闭的数据库,用于:
• 系统表空间数据文件
• 回退段数据文件
• 整个数据库
恢复关闭的数据库
在以下情况中,通常将此恢复方法与 RECOVER DATABASE 命令或 RECOVER DATAFILE
命令一起使用:
• 恢复的文件属于系统表空间或回退段表空间。
• 需要恢复整个数据库或大部分数据文件。
• 数据库不是全天候(每周 7 天、每天 24 小时)运行。
关闭的数据库恢复示例
已确定 u01(数据文件 1 存储在其中)包含被损坏的块。通过查询 V$DATAFILE 和
V$TABLESPACE 视图,可以发现数据文件 1 是系统表空间所属的文件之一。请按照以下
步骤恢复数据库:
1. 如果例程尚未关闭,请按如下方式发出 SHUTDOWN 命令:
SQL> SHUTDOWN ABORT
2. 从备份(可用的最新备份)中还原该文件:
UNIX> host cp /BACKUP/system01.dbf /ORADATA/u01
Windows NT > host copy c:\backup\df1.dbf d:\data\
3. 以 “装载” 模式启动例程,并恢复该数据文件:
SQL> STARTUP MOUNT
SQL> RECOVER DATABASE
or SQL> RECOVER DATAFILE ‘/ORADATA/u01/system01.dbf‘
ORA-00279: change 148448 ...03/29/01 17:04:20 needed for thread
ORA-00289: suggestion : /ORADATA/ARCHIVE1/arch_144.arc
ORA-00280: change 148448 for thread 1 is in sequence #144
Log applied.
...
Media recovery complete.
此方法适用于以下情况:
• 数据库当前已打开
• 在恢复期间数据库将一直保持打开状态
• 介质故障不会影响 SYSTEM 表空间
恢复打开的数据库
恢复打开的数据库(数据库最初是打开的)
此恢复方法一般在以下情况下使用:
• 未导致数据库关闭的文件损坏、文件意外丢失或介质故障。
• 数据库全天候(每周 7 天、每天 24 小时)运行。必须最大限度地减少数据库的停机时
间。
• 受到影响的文件不属于系统表空间或还原/回退段表空间。
打开的数据库恢复示例
数据库当前已打开,并且已使用操作系统命令误删了数据文件 2。因为数据库当前已打
开,所以可以使用以下命令确定该数据文件属于哪个表空间:
SQL> SELECT file_id f#, file_name,
2> tablespace_name tablespace, status
3> FROM dba_data_files;
F# FILE_NAME TABLESPACE STATUS
--- ------------------------- ---------- ---------
1 /disk1/data/system01.dbf SYSTEM AVAILABLE
2 /disk2/data/df2.dbf USER_DATA AVAILABLE
3 /disk1/data/rbs01.dbf RBS AVAILABLE
...
此方法适用于以下情况:
• 数据库当前已关闭
• 将在恢复期间打开数据库
• 介质故障不会影响 SYSTEM 表空间
恢复打开的数据库
恢复打开的数据库(数据库最初是关闭的)
此恢复方法一般在以下情况下使用:
• 介质或硬件故障导致系统关闭。
• 数据库全天候(每周 7 天、每天 24 小时)运行。必须最大限度地减少数据库的停机时
间。
• 损坏的文件不属于系统表空间或还原段表空间。
打开的数据库恢复示例
您刚刚确定介质故障是由于某个磁盘控制器发生故障而引起的,该控制器只包含磁盘 2。
根据您对数据库的了解,您知道数据文件 2 不是系统数据文件或还原段数据文件,并且并
不会由于无法使用该文件而妨碍用户运行其月末报告。
1. 装载该数据库。由于数据文件 2 无法打开,因此无法打开该数据库。
SQL> STARTUP MOUNT
Database mounted.
2. 如果该数据文件未脱机,则无法打开数据库。因此,必须将该文件脱机。您已经
查询了 V$DATAFILE 并确定该文件处于联机状态。
必须发出以下命令:
SQL> ALTER DATABASE datafile ‘/disk2/data/df2.dbf‘ offline;
注:此时不能使用 ALTER TABLESPACE 命令,原因是数据库尚未打开。
3. 然后就可以打开数据库,使用户能够访问系统:
SQL> ALTER DATABASE OPEN;
• 从未备份过的数据文件丢失了
• 当文件属于 SYSTEM 表空间时不能使用
• 如果重新创建了控制文件,则不能使用
在没有备份的情况下恢复数据文件
此恢复方法一般在下列情况使用:
• 介质故障或用户故障导致丢失了从未备份过的数据文件
• 自该文件创建以来的所有归档日志都存在
• 受到影响的文件不属于系统表空间或还原段表空间
• 当丢失的数据文件由于从未备份过而无法还原时使用。
• 对丢失的数据文件的说明仍保留在数据字典和控制文件
中。
• 重新创建该数据文件:
SQL> ALTER DATABASE CREATE DATAFILE ‘filename’;
• 使用另一个文件名重新创建该数据文件:
SQL> ALTER DATABASE CREATE DATAFILE ‘filename’
AS ‘new file name’;
在没有备份的情况下重新创建丢失的数据文件
• 如果定期备份中不包含新的表空间或数据文件,或者该数据文件的备份丢失了,则通
常使用该方法。
• 使用 ALTER DATABASE 命令,用相同的名称重新创建该数据文件:
SQL> ALTER DATABASE CREATE DATAFILE
2> ‘/ORADATA/u03/users01.dbf‘;
将使用数据字典中记录的原始文件名创建该文件。
• 使用以下版本重新创建该数据文件,但使用新的文件名或位置:
SQL> ALTER DATABASE CREATE DATAFILE
2> ‘/ORADATA/u03/users01.dbf‘
3> AS ‘/ORADATA/u04/users01.dbf‘;
146 4 将数据文件或表空间
数据文件 4 联机
恢复的数据库
在没有备份的情况下进行恢复的示例
数据文件 4(在磁盘 1 上)丢失了。在通过磁带还原该数据文件时,出现一个错误,指
明该文件以前没有进行备份。您找到两天前创建 TABLE_DATA 表空间的那个 DBA,结
果发现该表空间中包含重要的用户数据,但它从未被纳入备份策略中。由于数据文件 4
不是系统数据文件或回退段数据文件,并且您有过去两天的所有归档日志,因此,可以
按如下方式进行恢复:
1. 如果数据库已关闭,则装载该数据库、将该数据文件(无备份)脱机,然后打开数
据库。这将允许不需要 TABLE_DATA 表空间的用户对系统执行操作。如果数据库
已打开,则将该数据文件或表空间脱机。
注:如果数据库已打开,则必须包含 “立即” (IMMEDIATE) 选项,以避免数据库写
入器试图写入到一个并不存在的文件中:
SQL> ALTER TABLESPACE table_data OFFLINE IMMEDIATE;
Tablespace altered.
情况 1 只读
情况 2 只读 读写
情况 3 读写 只读
备份 1 备份 2 恢复
恢复情况
情况 1:被恢复的表空间现在是只读的,并且在上次备份时也是只读的。在这种情况下,
只需从备份中还原表空间。无需应用任何重做信息。
情况 2:被恢复的表空间现在可读写,但在上次备份时则是只读的。在这种情况下,需要
从备份中还原表空间,并应用自表空间被设置为可读写状态以来的重做信息。
情况 3:被恢复的表空间现在是只读的,但在上次备份时是可读写的。因为您应该在将表
空间设置为只读状态后始终对它进行备份,所以不应该遇到这种情况。但是,如果确实出
现这种情况,则必须从备份中还原表空间,并将其恢复到被设置为只读状态前的那一刻。
当出现以下情况时,必须为只读表空间考虑一些特殊事项:
• 重新创建控制文件
• 重命名数据文件
• 使用备份的控制文件
恢复只读表空间
重新创建控制文件
如果您需要用 CREATE CONTROL FILE 命令重新创建控制文件,并且您的数据库有只读
表空间,则必须按照特殊的过程进行操作。发出 ALTER DATABASE BACKUP
CONTROLFILE TO TRACE 命令以获得这些过程的列表。
重命名数据文件
如果不能将只读数据表空间中的数据文件副本还原到正确的目标位置,则可以使用
ALTER DATABASE RENAME 命令将这些文件放到新的位置。
备份控制文件
带备份控制文件的只读表空间与脱机正常表空间的恢复过程实质上是相同的,只是您需要
在打开数据库后将表空间联机。
如果出现以下情况,则可能需要创建控制文件:
• 所有控制文件由于某个故障而丢失
• 需要更改数据库的名称
• 需要更改控制文件中的当前设置
丢失控制文件
以下是三种可能需要您恢复或重新创建控制文件的情形:
• 所有控制文件由于某个故障而丢失。如果您已正确地多元备份了控制文件并将这些文
件分布到多个物理设备上,则很少会遇到这种问题。
• 您需要更改数据库的名称。如果数据库将成为分布式环境的一部分,并且其它数据库
具有相同的名称,则有必要更改数据库的名称。如果是出于恢复目的而还原数据库,
则可能也需要更改其名称。
• 您需要更改控制文件中的设置。控制文件中的很多设置是在文件创建之时确定下来的。
在创建了控制文件后,就不能动态地更改这些设置;若要更改这些设置,必须重新创
建控制文件。
在丢失控制文件后进行恢复的方法:
• 使用当前的控制文件
• 创建新的控制文件
• 使用备份的控制文件
恢复控制文件
有三种方法可以用于还原和恢复控制文件:
• 用当前副本还原丢失的文件。这种方法假定您没有丢失所有的控制文件。
• 使用 CREATE CONTROLFILE 命令创建一个新文件。要完成此项操作必须知道数据库
的所有文件。间或备份控制文件以进行跟踪有助于完成此过程。
• 使用 RECOVER DATABASE USING BACKUP CONTROLFILE 命令。如果丢失了所有
的控制文件,则需要使用此命令。
注:如果使用镜像的数据文件正确配置数据库,则丢失所有控制文件的可能性将降至最低。
在这一课中,您应该能够掌握:
• 确定需要使用哪种恢复类型
• 确定需要还原和恢复哪些文件
• 恢复 NOARCHIVELOG 模式下的数据库
• 恢复 ARCHIVELOG 模式下的数据库
• 如果原位置不可用,将数据文件还原到其它位置
这两个练习涉及以下主题:
• 当数据库处于 NOARCHIVELOG 模式时对数据库执行完
全恢复
• 当数据库处于 ARCHIVELOG 模式时对数据库执行完全
恢复
完成这一课的学习后,您应该能达到下列目标:
• 描述 RMAN 在还原和恢复操作中的用法
• 在 ARCHIVELOG 模式下执行完全恢复
• 将数据文件还原到其它位置
• 使用归档重做日志文件重新定位和恢复表空间
使用 RMAN 执行还原和数据文件介质恢复
RMAN 自动执行还原文件的过程。发出 RESTORE 命令后,RMAN 将使用服务器会话还
原正确的备份和副本。RMAN 资料档案库用于选择最完整的可用备份集或映像副本来进
行还原。缺省情况下,如果某一文件已处于正确位置且其文件头包含有正确的信息,则
RMAN 将不还原该文件。而在 Oracle9i 以前的版本中,将始终还原该文件。
发出 RMAN RECOVER 命令后,RMAN 将应用联机重做日志文件和归档重做日志文件中
的更改,或使用增量备份来恢复已还原的文件。
使用 RMAN 可以在以下级别执行恢复:
• 数据库
• 表空间
• 数据文件
在完全恢复过程中,归档重做日志文件和联机重做日志文件中的所有重做条目都将用于恢
复数据库。损坏的文件将从备份进行还原,而日志文件则用于将数据文件更新到当前时间
点。
rman target /
RMAN> STARTUP MOUNT
RMAN> RESTORE DATABASE;
RMAN> RECOVER DATABASE;
RMAN> ALTER DATABASE OPEN;
• 使用 SWITCH 命令可在控制文件中记录更改。
SWITCH DATAFILE ALL;
将数据文件还原到新位置
如果遇到介质故障,如磁盘驱动器丢失,则可能需要将数据文件还原到新位置。
示例
1. 连接到 RMAN。
rman target
2. 装载数据库。
RMAN> STARTUP MOUNT
3. 使用 RMAN 将数据文件还原到新位置并在控制文件中记录更改。
run{
set newname for datafile 1 to ‘/<newdir>/system01.dbf’;
restore database;
switch datafile all;
recover database;
alter database open; }
使用 RMAN 恢复表空间
如果已确定需要还原和恢复 USERS 表空间,则可发出下面的 RMAN 命令:
run{
sql “alter tablespace users offline immediate”;
restore tablespace users;
recover tablespace users;
sql “alter tablespace users online”;
}
使用 RMAN 重新定位表空间
如果由于磁盘故障而无法访问某一数据文件,则需要将其还原到一个新位置或切换到现有
的映像副本。
如果由于某个驱动器的磁盘空间不足,或需要重新组织数据库来提高性能,因而您需要重
新定位表空间,上述过程也非常有用。
示例
您注意到,u03 已经损坏,但数据库仍然打开。有时用户会抱怨无法访问编号为 3 的数据
文件中的信息。
按照以下过程操作可将该数据文件还原到一个新位置:
1. 使用以下命令检查 u03 上数据文件的位置和大小:
SQL> SELECT file#, name, bytes FROM v$datafile;
FILE# NAME BYTES
----- ------------------------ ----------
1 /ORADATA/u01/system01.dbf 120586240
2 /ORADATA/u02/undotbs.dbf 31457280
3 /ORADATA/u03/users01.dbf 5242880
...
确定 u04 上是否有足够的空间来容纳数据文件 3。
在这一课中,您应该能够掌握:
• 恢复 ARCHIVELOG 模式下的数据库
• 如果原位置不可用,将数据文件还原到其它位置
这两个练习涉及以下主题:
• 使用 RMAN 恢复表空间
• 使用 RMAN 恢复重新定位的数据文件
完成这一课的学习后,您应该能达到下列目标:
• 说明不完全恢复的各个步骤
• 执行不完全数据库恢复
• 确定当前联机重做日志文件的丢失情况
例程
用户 服务器 SGA
共享池
进程 进程
共享 SQL
PGA 锁 大型共享池 和 PL/SQL
重做日志 数据字典
数据缓冲区
缓冲区 高速缓存
用户 服务器
进程 进程 SMON DBWn PMON CKPT LGWR ARCn
PGA
1 1 1
数据文件 1 控制文件 重做日志
文件 1
参数文件 1 0 归档日
数据文件 2 重做日志 志文件
文件 2
1
数据文件 3
口令文件
数据库
不完全恢复
不完全恢复能够重建数据库,使之恢复到以前的某个时间点(发生故障之前)。
注:该情况会导致进行恢复操作后提交的事务处理中丢失数据。如果需要,这些数据将需
要手动重新输入。只在绝对必要的情况下执行这种恢复操作。不完全恢复操作可能比较困
难而且耗费时间较长。
要执行不完全恢复,需要:
• 恢复时间点之前制作的所有数据文件的有效脱机或联机备份
• 截止到指定的恢复时间之前,备份中生成的所有归档日志
通常在完全恢复操作失败的情况下进行不完全恢复。
• 因归档日志丢失而导致完全恢复失败。
• 所有未归档的重做日志文件和数据文件均丢失。
• 用户错误
– 某个重要的表被删除。
– 在表中提交了无效数据。
• 当前控制文件丢失,必须使用备份控制文件才能
打开数据库。
需要进行不完全恢复的常见情况
• 丢失归档:由于归档日志损坏或丢失,完全恢复操作失败。数据库只能恢复到应用归
档日志之前的过去的某一时间的状态。
• 丢失重做日志:未镜像重做日志,并且重做日志在归档之前丢失,数据文件也丢失。
恢复无法继续到丢失的重做日志之后。
• 用户错误:用户错误地删除了某个表,提交了用错误的 WHERE 子句更新的数据等等。
• 丢失控制文件:您未镜像控制文件,不知道数据库的结构,但您有旧的二进制副本的
备份。
• 不完全恢复有三种类型:
– 基于时间的恢复
– 基于取消的恢复
– 基于更改的恢复
• 在下面的情况下,可能需要使用还原的控制文件进行
恢复:
– 控制文件丢失
– 执行不完全恢复,使数据库恢复到某一时间点,而这一
时间点的数据库结构与当前数据库结构不同
不完全恢复的类型
基于时间的恢复
截止指定时间点之前的所有更改提交后,该恢复方法终止。在以下情况下使用此方法:
• 对数据作出了不必要的更改,或者删除了重要的表,并且知道错误发生的大概时间。
如果您立即得到通知,恢复时间最短、数据损失最少。精心测试过的程序、安全性和
过程应当可以避免此类恢复。
• 知道未镜像的联机重做日志损坏的大概时间。镜像日志可以避免此类恢复。
基于取消的恢复
在恢复提示符下输入 CANCEL(而不是日志文件名),即可终止该恢复方法。在以下情况
下使用此方法:
• 当前重做日志文件或组被破坏,并且不可用于恢复。镜像可以避免此类恢复。
• 进行恢复所需的归档重做日志文件丢失。经常备份并将归档存放在多个目标位置可以
避免此类恢复。
• 请认真按照所有步骤进行操作。
• 恢复前后均应执行整体数据库备份。
• 始终要验证恢复是否成功。
• 备份并删除归档日志。
不完全恢复原则
• 认真按照所有恢复步骤进行操作很重要,因为不完全恢复的大多数问题都是由恢复过
程中的 DBA 错误造成的。
• 事务活动只能前滚至期望的时间,而不能回退至期望的时间。这就是对要及时恢复的
数据库必须还原所有数据文件的原因。如果没能还原所有数据文件,将无法打开(非
同步)数据库。
• 开始不完全恢复之前应执行整体关闭数据库备份(包括控制文件和重做日志)。这样
做的好处有:
– 允许从错误中恢复。如果恢复失败(例如,恢复超出了期望的恢复点),重做
日志和控制文件将无法用于下一次恢复,除非存在这些文件的备份。
– 如果恢复失败,可以节省时间。在这种情况下,您可以从新备份中还原数据文
件,而不是从需要应用归档的上一次备份中还原。
注:如果不执行整体备份,至少应归档当前重做日志 (ALTER SYSTEM
ARCHIVE LOG CURRENT) 并备份控制文件 (ALTER DATABASE BACKUP
CONTROLFILE TO <LOCATION>)。
• 恢复成功后,执行关闭的数据库的整体备份。如果需要进行恢复才能完成下一次排定
的备份,则建议使用这种方法。
• 在恢复前后均应检查警报日志
• 包含错误信息、提示和 SCN
警报日志
恢复过程中,进度信息存储在警报日志中。恢复前后,都应检查该文件。下面是一个
alert.log 文件示例:
$ vi /disk1/BDUMP/alert_DB00.log
...
Media Recovery Log
ORA-279 ... RECOVER database until time ‘2001...
Wed Mar 07 11:55:13 2001
RECOVER DATABASE CONTINUE DEFAULT
Media Recovery Log /disk1/archive/arch_34.rdo
Incomplete recovery done UNTIL CHANGE 309121
Media Recovery Complete
Completed: RECOVER DATABASE CONTINUE DEFAULT
Wed Mar 07 11:55:13 2001
alter database open resetlogs
...
Oracle9i 数据库管理基础 II 14-9
用户管理的不完全恢复的过程
1. 关闭数据库,然后备份数据库。
2. 还原所有数据文件。不要还原控制文件、重做日志、
口令文件或参数文件。
3. 装载数据库。
4. 将数据文件恢复到故障前的某一点。
5. 使用 RESETLOGS 打开数据库。
6. 执行关闭数据库备份。
使用用户管理的过程的不完全恢复步骤
出现故障而要求进行不完全恢复时,必须拥有下列文件才能进行恢复:
• 包含所有数据文件的有效脱机或联机备份。
• 从上次还原的备份到发生故障之前的所有归档重做日志。
请按照下列步骤进行恢复:
1. 对现有数据库执行关闭的数据库的完全备份。关闭数据库,从备份还原所有数据
文件(包括系统表空间文件)。
2. 还原所有数据文件,以及时恢复数据库。
3. 将数据库置于装载模式并确保数据文件处于联机状态。
4. 恢复数据库。
5. 使用 RESETLOGS 选项打开数据库并验证恢复。
6. 对数据库执行关闭的数据库的整体备份。
• 恢复发出取消命令之前的数据库:
RECOVER DATABASE until cancel
• 恢复某一时间之前的数据库:
RECOVER DATABASE
until time ‘2001-03-04:14:22:03’
• 使用备份控制文件恢复:
RECOVER DATABASE
until time ‘2001-03-04:14:22:03’
using backup controlfile
用于不完全恢复的 RECOVER 命令
以下命令用于执行不完全恢复:
RECOVER [AUTOMATIC] DATABASE <Option>
其中:
automatic:自动应用归档和重做日志文件。
option: until time ‘YYYY-MM-DD:HH:MI:SS’
until cancel
until scn <integer>
using backup control file
注:要在恢复过程中自动应用重做日志文件,可以使用 SQL*Plus 命令 SET
AUTORECOVERY ON,在恢复提示符后输入 AUTO,或者使用 SQL 命令 RECOVER
AUTOMATIC。
情况:
• 当前时间是 2001 年 3 月 9 日夜间 12:00。
• EMPLOYEES 表已被删除。
• 删除该表的时间大约是上午 11:45。
• 由于大多数员工当前都在开会,数据库的活动很少。
• 该表必须进行恢复。
恢复的数据库 6 备份数据库
情况:
• 当前时间是 2001 年 3 月 9 日夜间 12:00。
• 某人尝试修复损坏的块时删除了 EMPLOYEES 表。
• 日志文件都位于同一磁盘上。
• 删除该表的时间大约是上午 11:45。
• 员工当前正在开会。
发现:
• 重做日志未多元备份。
• 有一个联机重做日志缺失。
• 缺失的重做日志未归档。
• 重做日志包含自上午 11:34 以来的信息。
• 26 分钟的数据将丢失。
• 用户可恢复其数据。
情况:
• 当前时间是 2001 年 3 月 9 日夜间 12:00。
• 包含 EMPLOYEES 表的表空间已被删除。
• 错误出现的时间大约是上午 11:45。
• 许多员工记录都在这一天早晨更新,但上午 11:00 之后
没有更新。
• 每天晚上都进行备份。
使用备份控制文件进行不完全恢复
1. 包含 EMPLOYEES 表的表空间已被删除,如下所示:
SQL> drop tablespace emp_ts including contents;
2. 您立即要求用户注销并保留过去 15 分钟内输入的数据记录。在等待所有用户注销并且
其余会话终止时,您将数据库置于受限模式以防止进一步的访问:
SQL> alter system enable restricted session;
3. 调查过程中,您从前一晚的备份中找到了二进制控制文件。由于当前的控制文件将被
替换,因此应仔细收集数据库结构信息,以备不时之需:
SQL> select * from v$log;
GROUP#...SEQ# BYTES ...ARC STATUS ... FIRST_TIME
------...---- ------...--- --------... --------------
1 … 61 153600... NO CURRENT ... 01-03-09:11:55
2 ...60 153600... NO INACTIVE... 01-03-09:11:34
发现:
• 前一晚的备份包含恢复所需的数据文件和控制文件。
• EMP_TS 表空间有一个数据文件。
• 当前日志序列号是 61。
• 确认该表空间是在 2001 年 3 月 9 日上午 11:44:54
被删除的。
• 数据文件编号 4 处于脱机状态。
使用备份控制文件进行不完全恢复(续)
4. 您通过检查警报日志确定错误发生时间:
UNIX: vi /disk1/BDUMP/alert*.log
Windows NT: notepad c:\BDUMP\alert_DB00.log
...
Fri Mar09 11:44:54 1999
drop tablespace emp_ts including contents
...
5. 关闭数据库、备份控制文件、然后还原表空间存在时的某个时间点的数据库的所有数
据文件和控制文件。尝试打开数据库之后,以下错误将通知您重做日志与控制文件不
同步:
ORA-00314: log 1 of thread 1,expected sequence# doesn't
match
ORA-00312: online log 1 thread 1: '/disk1/data/log1a.rdo'
如果数据库已经关闭:
• 尝试打开数据库。
• 查找当前日志序列号。
• 恢复发出取消命令之前的数据库。
• 如果需要,应删除并重新创建日志文件。
• 使用 RESETLOGS 打开数据库。
• 执行整体数据库备份。
当前重做日志文件丢失
如果数据库关闭,可能发生了介质故障或者后台进程可能已终止。按照以下步骤纠正该情
况:
1. 如果尝试打开数据库,以下消息将立即通知您当前的重做日志组:
Database mounted.
ORA-00313: open failed for members of log group 2 of
thread 1
ORA-00312: online log 2 thread 1: '/disk1/archive/log2a.rdo'
ORA-27037: unable to obtain file status
SVR4 Error: 2: No such file or directory
Additional information: 3
由于日志组 2 是当前日志组,因此尚未归档。使用 CLEAR LOGFILE 命令无效,
原因是:
SQL> alter database clear unarchived logfile group 2;
ORA-01624: log 2 needed for crash recovery of thread 1
ORA-00312: online log 2 thread 1: 'disk1/archive/log2a.rdo'
在这一课中,您应该能够掌握:
• 执行不完全数据库恢复
• 在当前联机重做日志文件丢失的情况下进行恢复
这两个练习包括下列主题:
• 从用户失败进行恢复
• 在丢失归档重做日志文件的情况下进行恢复
完成这一课的学习后,您应该能达到下列目标:
• 使用 UNTIL TIME 进行不完全数据库恢复
• 使用 UNTIL SEQUENCE 进行不完全数据库恢复
1. 装载数据库。
2. 为并行化分配多个通道。
3. 还原所有数据文件。
4. 使用 UNTIL TIME、UNTIL SEQUENCE 或 UNTIL SCN
恢复数据库。
5. 使用 RESETLOGS 打开数据库。
6. 执行整体数据库备份。
使用 RMAN 进行数据库的不完全恢复
不完全恢复的还原和恢复进程的步骤和语法与完全恢复相同,只是需要从过去的备份中还
原所有数据文件。
注
• 目标数据库必须处于已装载的状态。
• 要还原的文件必须处于脱机状态。只有在备份是通过 RMAN 生成或注册的情况下,才
能使用 RMAN 进行还原。
RMAN> run {
2> allocate channel c1 type DISK;
3> allocate channel c2 type DISK;
4> set until time = ‘2000-12-09:11:44:00';
5> restore database;
6> recover database;
7> alter database open resetlogs; }
RMAN> RUN {
2> SET UNTIL SEQUENCE 120 THREAD 1;
3> ALTER DATABASE MOUNT;
4> RESTORE DATABASE;
5> RECOVER DATABASE; # recovers through log 119
6> ALTER DATABASE OPEN RESESTLOGS;
7> }
在这一课中,您应该能够掌握:
• 使用 UNTIL TIME 进行不完全数据库恢复
• 使用 UNTIL SEQUENCE 进行不完全数据库恢复
本练习说明如何在丢失归档重做日志文件的情况下进行恢复。
完成这一课的学习后,您应该能达到下列目标:
• 执行备份和副本的交叉查对
• 删除备份后更新资料档案库
• 更改备份和副本的可用性状态
• 使备份或副本脱离保留策略
• 将使用操作系统命令制作的备份列入目录
使用 CROSSCHECK 命令可以:
• 确保资料档案库信息与实际文件同步
• 检查备份或副本的状态
• 使用操作系统命令删除文件后更新资料档案库
• 交叉查对数据库中的所有备份:
CROSSCHECK BACKUPSET OF DATABASE;
• 交叉查对数据库中的所有副本:
CROSSCHECK COPY;
使用 CROSSCHECK 命令
您可以发出 CROSSCHECK BACKUPSET 命令来交叉查对通过介质管理软件创建的备份集、
备份片和代理副本。缺省情况下,RMAN 会交叉查对整个数据库的备份。
您可以发出 CROSSCHECK COPY 命令来交叉查对数据文件副本、控制文件副本、归档重
做日志以及归档重做日志的映像副本。缺省情况下,将查对数据库中状态为 AVAILABLE
或 EXPIRED 的所有文件。
使用 CROSSCHECK 命令时还可带有选项,以便将查对限制于特定的备份片、备份集、数
据文件或控制文件副本。
使用 DELETE 命令可以:
• 删除物理备份和映像副本
• 将资料档案库状态更新为 DELETED
• 从恢复目录中删除记录
删除备份和副本
您可以使用 DELETE 命令删除备份和映像副本,并更新档案库和恢复目录。发出该命令
后,RMAN 将显示文件列表并提示您确认删除请求。
• 删除特定备份集:
DELETE BACKUPSET 102;
• 不经确认而删除过期备份:
DELETE NOPROMPT EXPIRED BACKUP OF TABLESPACE
users;
• 根据已配置的保留策略删除所有备份、副本和归档重做
日志文件:
DELETE OBSOLETE;
使用 DELETE 命令
缺省情况下,DELETE 命令显示文件列表,并在删除列表中的任何文件之前提示您确认删
除操作。您可以使用 NOPROMPT 选项取消确认提示。如果从命令文件运行 DELETE 命
令,则缺省使用 NOPROMPT。
如果在 DELETE 命令中指定了 EXPIRED 选项,则仅删除已由 CROSSCHECK 命令标记为
EXPIRED 的文件。您可以使用 LIST 命令来确定哪些备份或副本已过期。
您可以指定 OBSOLETE 选项来删除那些被保留策略视为 OBSOLETE 的文件。通过使用
CONFIGURE RETENTION POLICY,您可以指定保留策略。您还可以按如下所示在
DELETE 命令中指定 REDUNDANCY 和 RECOVERY WINDOW 选项
RMAN> DELETE OBSOLETE RECOVERY WINDOW OF 7 DAYS;
更改可用性状态
如果无法找到备份或副本,或由于硬件维护的原因而导致备份或副本不可用,您可以使用
CHANGE ... UNAVAILABLE 命令。如果某个文件被标记为 UNAVAILABLE,则当发出
RESTORE 或 RECOVER 命令时,RMAN 将不会使用该文件。
如果找到了该文件或维护过程已完成,则可以通过发出 CHANGE ... AVAILABLE 命令
再次将其标记为可用。
• 更改特定数据文件的状态:
CHANGE DATAFILECOPY '/DB01/BACKUP/users01.dbf'
UNAVAILABLE;
• 更改控制文件备份的状态:
CHANGE BACKUP OF CONTROLFILE UNAVAILABLE;
CHANGE BACKUP OF CONTROLFILE AVAILABLE;
• 更改归档重做日志文件的状态:
CHANGE COPY OF ARCHIVELOG SEQUENCE BETWEEN 230
AND 240 UNAVAILABLE;
更改不可用状态
发出 CHANGE … UNAVAILABLE 命令后,状态将标记在资料档案库中。您可以通过
LIST 命令查看状态。
CHANGE 命令的 BACKUP 关键字指示该命令应对哪些备份集、备份片或代理副本进行操作。
如果不为 BACKUP 指定选项,则 CHANGE BACKUP 将对资料档案库中记录的所有备份进
行操作。
CHANGE 命令的 COPY 关键字指示该命令应对哪些数据文件副本、归档重做日志或归档重
做日志的映像副本进行操作。如果不为 COPY 指定选项,则 CHANGE COPY 将对资料档案
库中记录的所有备份进行操作。
脱离保留策略
保留策略指定 RMAN 何时应将它所创建的备份和副本视为已过时。
您可以使用 CHANGE … KEEP 命令来使文件脱离保留策略;使用 CHANGE … NOKEEP 来
使该文件遵守保留策略。
KEEP 覆盖任何已为该备份或副本配置的保留策略,从而使备份不过时。您可以使用此选
项来创建一个长期备份。已脱离保留策略的备份仍然是一个完全有效的备份,可以象其它
任何 RMAN 备份一样进行还原。
NOKEEP 指定备份或副本将根据用户的保留策略过期。如果在 BACKUP 或 COPY 命令中未
指定 KEEP 选项,这是缺省行为。
• 创建长期备份:
CHANGE BACKUPSET 123 KEEP FOREVER NOLOGS;
• 使数据文件脱离保留策略 60 天:
CHANGE DATAFILECOPY '/DB01/BACKUP/users01.dbf'
KEEP UNTIL 'SYSDATE+60';
使用 CHANGE…KEEP 命令
FOREVER 参数指定备份或副本永不过期。如果指定了 FOREVER,则必须使用恢复目录,
否则,备份记录最终将超出控制文件的时间范围。
如果指定 LOGS 参数,则意味着:只要该备份或副本可用,则恢复此备份或副本所需的所
有归档日志都必须保持可用。
NOLOGS 指定由于不保留恢复此备份所需的归档日志,因此无法恢复该备份或副本。您只
能使用此备份或副本将数据库还原到制作该备份或副本的时间点。如果备份或副本不一
致,则此选项无效。您必须在已装载(但不打开)数据库的情况下制作一个一致的备份。
此外,该数据库在上一次打开时不能出现过崩溃或异常中止的情况。
您可以使用 UNTIL TIME = 'date_string' 参数来指定一个日期,在该日期之前必
须保留备份或副本。您可以使用当前 NLS_DATE_FORMAT 或一个 SQL 日期表达式(如
'SYSDATE+365')来指定一个特定的时间。
将文件列入资料档案库的目录
当您使用操作系统命令制作备份时,资料档案库中不会记录任何信息。如果使用操作系统
实用程序制作备份,则必须手动通知 RMAN。
要列入目录的操作系统备份必须符合以下条件:
• 位于磁盘上,可以访问
• 具有单个文件的完整映像副本
• 具有一致或不一致的数据文件、控制文件或归档重做日志备份。如果不一致,则必须
是使用 BEGIN BACKUP/END BACKUP 语句创建的。如果是控制文件备份,则应该是
通过 ALTER DATABASE BACKUP CONTROLFILE 语句制作的。
RMAN 将操作系统备份视为数据文件副本。在列入目录期间,RMAN 只检查文件头。它
不检查操作系统实用程序是否已正确复制该文件。
您可以使 RMAN 注意到有未记录在资料档案库中的归档重做日志文件。如果您已从备份
中还原控制文件,并且要使用归档重做日志文件信息对资料档案库进行更新,则需要完成
这一工作。
• 将使用操作系统命令制作的备份列入目录:
CATALOG DATAFILECOPY '/DB01/BACKUP/users01.dbf';
• 将归档重做日志文件列入目录
CATALOG ARCHIVELOG
'/ORADATA/ARCHIVE1/arch_12.arc',
'/ORADATA/ARCHIVE1/arch_13.arc';
使用 CATALOG 命令
可以使用 CONTROLFILECOPY 参数来指定要添加到资料档案库中的、或要在资料档案库
中进行更新的控制文件副本的文件名。
DATAFILECOPY 指定要添加到资料档案库中的、或要在资料档案库中进行更新的数据文
件副本的文件名。
可以使用 ARCHIVELOG 参数来指定要添加到资料档案库中的、或要在资料档案库中进行
更新的归档重做日志文件的文件名。
不将 RMAN 资料档案库记录列入目录
如果您已通过 RMAN 之外的一种方法删除了备份或副本,则可以使用该命令。在对
RMAN 备份发出 CHANGE … UNCATALOG 命令后,RMAN 将永远不能使用该备份。
• 删除已删除的归档重做日志文件的记录:
CHANGE ARCHIVELOG … UNCATALOG;
• 删除已删除的数据文件的记录:
CHANGE DATAFILECOPY
'/DB01/BACKUP/users01.dbf' UNCATALOG;
使用 CHANGE…UNCATALOG 命令
CHANGE ... UNCATALOG 命令用于更新资料档案库。它不删除物理备份或副本。如果您
使用其它方法(而非 RMAN DELETE 命令)删除了文件,则可以使用该命令通知 RMAN。
在这一课中,您应该能够掌握:
• 执行备份和副本的交叉查对
• 删除备份后更新资料档案库
• 更改备份和副本的可用性状态
• 使备份或副本脱离保留策略
• 将使用操作系统命令制作的备份列入目录
本练习包括下列主题:
• 执行交叉查对
• 将文件列入资料档案库的目录
完成这一课的学习后,您应该能达到下列目标:
• 描述恢复目录的内容
• 列出需要恢复目录的 RMAN 功能
• 创建恢复目录
• 通过使用 RMAN 命令来维护恢复目录
• 使用 RMAN 注册、重新同步和重置数据库
• 查询恢复目录以生成报告和列表
• 创建、存储和运行脚本
• 描述备份和恢复恢复目录的方法
还原/恢复
恢复管理器 Enterprise
备份 (RMAN) Manager
报告
目标数据库 控制文件 REPORT
LIST 已存储的脚本
目录维护
注册
重新同步
重置 目录数据库
更改/删除/目录
备份/还原/恢复
概览
恢复目录是在单独的数据库中创建的方案。它包含从目标数据库的控制文件中获取的
RMAN 元数据。RMAN 将有关数据库结构、归档重做日志、备份集以及数据文件副本的
信息从目标数据库的控制文件传播到恢复目录中。
当要管理多个目标数据库时,应该使用目录。
RMAN 存储、使用和维护恢复目录中的信息。当执行以下操作时,恢复目录是由 RMAN
维护的:
1. 在目录中注册目标数据库。
2. 重新同步该目录和目标数据库的控制文件。
3. 将数据库重置为以前的复本。
4. 更改有关备份或文件的信息。
5. 执行备份、还原或恢复操作。
可以使用 REPORT 和 LIST 命令从恢复目录中获取信息。可以将脚本存储在恢复目录中。
恢复目录是一个包含以下信息的可选资料档案库:
• 数据文件和归档重做日志文件备份集和备份片
• 数据文件副本
• 归档重做日志文件
• 目标数据库的物理结构
恢复目录内容
恢复目录包含关于如下内容的信息:
• 数据文件和归档重做日志文件备份集和备份片:
该目录存储备份集名称和时间等信息。
• 数据文件副本:
该目录记录数据文件副本的时间戳和名称。
• 归档重做日志文件及其副本:
该目录维护服务器创建的归档日志以及 RMAN 制作的任何副本的记录。
• 目标数据库的物理结构:
它包含的信息与目标数据库控制文件中包含的信息类似。
恢复目录还可能包含:
• 永久性的 RMAN 配置设置
• 已存储的作业脚本
恢复目录内容
恢复目录还可能包含:
• 在 RMAN 会话期间持续有效的配置设置,以及使用 CONFIGURE 命令设置的配置设置。
• 已存储的脚本是命令的命名序列。脚本不能存储在目标数据库的控制文件中。
仅当使用恢复目录时,才能使用以下功能:
• 在一个目录中存储多个目标数据库的元数据
• 单个目标数据库的多个复本的元数据
• 历史记录元数据
• 报告非当前时间的目标数据库
使用恢复目录的优点
可以使用恢复目录将多个目标数据库的相关信息存储在单个恢复目录中。恢复目录可用于
存储单个数据库的多个复本的信息。这样,就可以从非当前的复本报告目标数据库。
1.创建表空间
2.创建目录所有者
3.授予权限
目录数据库
4.创建目录
5.连接到目标数据库
6.注册目标数据库
目标数据库
控制文件
如何创建恢复目录
要创建恢复目录,请执行以下步骤:
1. 连接到目录数据库并为该目录创建表空间:
SQL> create tablespace rman_ts datafile
2> ‘<directory>/<name>’
3> size 20M default storage
4> (initial 100K next 100K pctincrease 0);
2. 创建恢复目录的用户和方案:
SQL> create user rman_db01 identified by rman_db01
2> default tablespace rman_ts
3> quota unlimited on rman_ts;
3. 授予该用户维护恢复目录和执行备份、恢复操作的角色和权限。
SQL> grant recovery_catalog_owner to rman_db01;
SQL> grant connect, resource to rman_db01;
• UNIX 上的示例
$ ORACLE_SID=db01; export ORACLE_SID
$ rman target /
RMAN> connect catalog rman_db01/rman_db01@catdb
• Windows NT 上的示例
C:\> set ORACLE_SID=db01
C:\> rman target /
RMAN> connect catalog rman_db01/rman_db01@catdb
如何连接恢复管理器
要使用恢复目录连接到 RMAN,请按照以下步骤操作:
1. 从目标数据库启动 RMAN 会话。
在 Windows NT 中,您可以在发出下面的 RMAN 命令之前调用命令提示符,或者您
可以使用 “开始” (Start) 菜单的 “运行” (Run) 选项调用命令行界面。
rman target sys/oracle@db01
RMAN-06005:connected to target database:
DB01(DBID=XXXXXXXXXX)
RMAN>
2. 连接到恢复目录数据库。
RMAN> connect catalog rman_db01/rman_db01@catdb
RMAN-06008: connected to recovery catalog database
RMAN>
还原/恢复
恢复管理器 Enterprise
备份 (RMAN) Manager
报告
控制文件 REPORT
目标数据库 LIST 已存储的脚本
目录维护
注册
重新同步
重置 目录数据库
更改/删除/目录
备份/还原/恢复
目录维护命令
CATALOG、CHANGE 和 DELETE 命令可用于手动更新恢复目录。在上一课中已介绍了这
些命令。
RESYNC 和 RESET 将在本课中介绍。
可以通过以下两种方式来重新同步恢复目录:
• 使用 BACKUP 和 COPY 命令自动执行
• 使用 RESYNC CATALOG 命令手动执行
目录数据库
RMAN >
目标数据库
控制文件
重新同步恢复目录
重新同步恢复目录可确保元数据与目标控制文件的最新状态保持一致。
可以进行部分或完全重新同步。在部分重新同步中,RMAN 读取当前的控制文件以更新
更改的数据,但并不重新同步与数据库物理方案相关的元数据:数据文件、表空间、重
做线程回退段以及联机重做日志。在完全重新同步中,RMAN 更新所有更改的记录,包
括方案记录。
RMAN 自动检测何时需要执行完全或部分重新同步,并根据需要执行该操作。也可以通
过发出 RESYNC CATALOG 命令强制执行完全重新同步。
要确保目录处于最新状态,请定期运行 RESYNC CATALOG 命令。经验表明,应每隔 n 天
至少运行一次该命令,其中,n 是初始化参数。
CONTROL_FILE_RECORD_KEEP_TIME 的设置值。因为控制文件使用一个循环重用的系
统,所以最终会覆盖备份和副本记录。通过重新同步该目录,可确保将这些记录存储在目
录中,而不会丢失。
使用 RESYNC CATALOG 命令
数据库的任何结构变化都会造成控制文件和恢复目录 “不同步”。在对目录发出 BACKUP
或 COPY 命令时,会自动同步该目录。但是,该同步过程可能会延迟备份操作。
RESYNC CATALOG 命令更新以下记录:
• 日志历史记录:在进行日志切换时创建。恢复管理器跟踪该信息,以便明确应该查找
哪些归档日志。
• 归档重做日志:与通过归档联机日志、复制现有的归档日志或还原归档日志备份集创
建的归档日志相关联。
• 备份历史记录:与备份集、备份片、备份集成员、代理副本和映像副本相关联。
• 物理方案:与数据文件和表空间相关联。
使用 Oracle Enterprise Manager
使用 “目录维护向导” (Catalog Maintenance Wizard) 的 “操作选项” (Operation Choice) 页重
新同步该目录。
使用 RESET DATABASE 命令
数据库的复本号是在将日志序列号重置为零前用于标识数据库版本的号码。它可防止将归
档和联机重做日志应用到错误的数据库复本中。恢复管理器使用 RESET DATABASE 命令
在恢复目录中存储数据库复本信息。所有后续备份和日志归档均与新数据库复本相关联。
如果将目标数据库恢复到过去的某一时刻,则必须使用 RESETLOGS 选项打开该数据库。
这种情况下,在发出 RESET DATABASE 命令前,恢复管理器无法再次使用恢复目录。这
样,恢复管理器就可以区分 RESETLOGS 和旧控制文件的故障还原了。
使用 Oracle Enterprise Manager
使用 “目录维护向导” (Catalog Maintenance Wizard) 的 “操作选项” (Operation Choice) 页重
置目标数据库的恢复目录。
还原/恢复
恢复管理器 Enterprise
备份 (RMAN) Manager
报告
控制文件 REPORT
目标数据库 LIST 已存储的脚本
目录维护
注册
重新同步
重置 目录数据库
更改
备份/还原/恢复
恢复目录报告
这些命令可以分析并列出包含在恢复目录中的信息。
REPORT 命令
可以使用 REPORT 命令来分析备份、复制、还原和恢复操作的各个方面。
LIST 命令
可以使用 LIST 命令显示备份集、文件副本和归档日志的相关信息(存储在恢复目录中)。
视图
除了 REPORT 和 LIST 命令外,还可以使用 SQL 命令查询创建恢复目录时创建的数据字
典和动态视图。
数据字典视图:
• RC_DATABASE
• RC_DATAFILE
• RC_STORED_SCRIPT
• RC_STORED_SCRIPT_LINE
• RC_TABLESPACE
数据字典视图
恢复目录视图不是正规的视图,这些视图针对 RMAN 使用进行了优化,而不是针对用户
查询进行了优化。通常,可以使用 RMAN 报告命令从恢复目录获取所需的信息。
可以按下面的示例所示使用恢复目录视图:
示例 1
确定哪些数据库当前已在恢复目录中注册:
SQL> select * from rc_database;
DB_KEY DBINC_KEY DBID NAME CHANGE# RESETLOGS
------ --------- ---------- -------- -------- ---------
1 2 1943591421 DB01 1 20-APR-99
还原/恢复 恢复 Enterprise
管理器 Manager
备份 (RMAN)
报告
控制文件 REPORT
目标数据库 LIST 已存储的脚本
目录维护
注册
重新同步
重置 目录数据库
更改
备份/还原/恢复
已存储的脚本
恢复管理器脚本是一组命令,它:
• 可以指定频繁使用的备份、恢复和还原操作
• 是由 CREATE SCRIPT 命令创建的
• 存储在恢复目录中
• 只有通过 RUN 命令才能调用
• 使您能够设计、开发和测试用于备份、还原和恢复数据库的命令组
• 可以使操作者出错误的可能性降到最低
存储和查看脚本
作为一个示例,创建名为 level0backup 的脚本,并将它存储在恢复目录中以制作增量 0 级
备份。通过将脚本存储在恢复目录中,任何使用恢复管理器的 DBA 都可以访问这些脚本。
可通过查询 RC_STORED_SCRIPT 视图,显示已存储的脚本的列表。
可以查询 RC_STORED_SCRIPT_LINE 视图以列出指定的已存储脚本的文本,或者使用
PRINT SCRIPT 命令。
创建和使用已存储的脚本
通常,备份、还原和恢复操作是使用脚本自动执行的。RMAN 提供了一种将这些脚本存
储在恢复目录中的方法。可使用 CREATE SCRIPT 命令来创建脚本。使用 RUN 命令来执
行脚本。
管理已存储的脚本
可以使用 REPLACE SCRIPT 命令重写脚本。必须提供整个脚本,而不仅仅是更改的行。
• 包含恢复目录的数据库的整体数据库备份
• 包含恢复目录的表空间的表空间备份
• 导出:
– 如果目录数据库不是很大,则可以定期导出该数据库。
– 如果目录数据库很大,则导出包含恢复目录的方案。
恢复目录备份
拥有经过检验的恢复目录备份策略是至关重要的。恢复目录是数据库中存储的对象的方案。
备份恢复目录的注意事项与备份方案相似。
您可以使用下列策略之一来备份恢复目录:
• 整体数据库备份:可以使用 RMAN 或操作系统命令进行整体数据库备份。
• 表空间备份:如果恢复目录存储在单独的表空间中(建议如此)并且目录数据库在
ARCHIVELOG 模式下操作,您可以联机备份包含恢复目录的表空间。
• 导出:如果包含目录的数据库不是很大,则可以定期导出该数据库。但是,当目录数
据库很大时,导出将花费很长的时间并占用大量磁盘存储空间。这时,可以只导出包
含恢复目录的方案。
始终将恢复目录存储在不同于目标数据库的数据库中。另外,还要确保将目录数据库的相
关文件与目标数据库的相关文件存储在不同的磁盘上。
• 用以前的恢复目录数据库备份创建一个数据库。
• 将目录重新定位到另一个数据库中并导入数据。
• 从导出内容中导入整个数据库。
恢复恢复目录
恢复恢复目录的策略应取决于故障的性质和使用的备份策略。
如果包含恢复目录的数据库损坏并且需要重建,则应考虑下列恢复选项:
• 可以用以前的恢复目录数据库备份创建数据库。
• 您可能决定将目录放置到另一个数据库中。在该数据库中,创建一个用户并授予该用
户 RECOVERY_CATALOG_OWNER 权限。可以从以前目录所有者的导出内容中将数据
导入到新建用户的方案中。
• 可以创建一个新的数据库,并从恢复目录数据库的导出内容中导入整个数据库
当重建了恢复目录后,应该立即重新同步该目录与目标数据库的控制文件。
在重新同步期间,恢复管理器可能为已不存在的文件添加记录,这是因为没有对重新编入
目录的文件进行验证。请发出 CHANGE … UNCATALOG 命令删除这些记录。
在这一课中,您应该能够掌握:
• 在使用恢复目录之前,必须注册目标数据库
• 应该经常使用控制文件重新同步该目录
• 可以将脚本存储在恢复目录中
此练习涉及以下主题:
• 创建恢复目录
• 在恢复目录中注册目标数据库
• 列出目标数据库的复本
• 将脚本存储在恢复目录中并执行该脚本
完成这一课的学习后,您应该能达到下列目标:
• 描述导出和导入实用程序的使用
• 描述导出和导入的概念与结构
• 执行简单的导出和导入操作
• 列出使用导出和导入操作的原则
Oracle
数据库
导出
导入
Oracle
数据库
导出和导入实用程序
导出实用程序提供了一种简单方法,使用该方法,您可以在 Oracle 数据库之间传送数据
对象,即使这些数据库位于具有不同硬件和软件配置的平台上。
对 Oracle 数据库运行导出实用程序时,该实用程序将提取对象(如表),如果这些对象
还存在相关对象,则继续提取这些相关对象(如索引、注释和授权)。提取出的数据写
入一个导出文件中,该文件是一个 Oracle 二进制格式的转储文件,且通常位于磁盘或磁
带上。
导入实用程序从导出转储文件中读取对象定义和表数据。它用于将数据对象插入 Oracle
数据库。
您可以使用这两个实用程序来执行以下任务:
• 归档历史数据
• 保存表定义以防止出现用户错误故障
• 在计算机和数据库之间,或在不同版本的 Oracle
服务器之间移动数据
• 在数据库之间传输表空间
导出和导入实用程序概览
导出实用程序可以提供以下内容的逻辑备份:
• 数据库对象
• 表空间
• 整个数据库
导入实用程序用于读取有效的导出文件,以便将数据移动到数据库中。重做日志历史记录
不能应用于从导出文件中导入的对象,因此,虽然仍可能会造成数据丢失,但是可以使丢
失减至最少。
您可以使用导出和导入实用程序来执行正常的操作系统备份,方法是使用这两个实用程序
执行以下操作:
• 创建某个数据库对象或整个数据库的历史归档;例如,在修改某个方案以支持不断变
化的业务要求时。
• 将表定义保存在一个二进制文件中。这对于创建和维护一个给定方案结构的基线可能
非常有用。
• 将数据从一个 Oracle 数据库版本移动到另一个 Oracle 数据库版本,例如从 Oracle8i 升
级到 Oracle9i。
• 命令行界面
• 交互式对话
• 参数文件
• Oracle Enterprise Manager
调用导出和导入实用程序
您可以通过以下任何一方法来调用导出和导入实用程序并指定参数:
• 命令行输入
• 交互式提示
• 参数文件
• Oracle Enterprise Manager 数据管理向导
要使用导出实用程序,必须对 Oracle 数据库拥有 CREATE SESSION 权限。要导出由另
一个用户拥有的表,必须已启用了 EXP_FULL_DATABASE 角色。该角色授予所有 DBA。
如果您不具有 EXP_FULL_DATABASE 角色中所包含的系统权限,则无法导出包含在另一
个用户的方案中的对象。
要使用导入实用程序,需要具有 CREATE SESSION 权限以便登录到 Oracle 数据库服务
器。此权限属于在创建数据库期间建立的 CONNECT 角色。
即使您没有创建导出文件,也可以执行导入。但是,如果导出文件是由其他人而不是您创
建的,则只当您具有 IMP_FULL_DATABASE 角色的权限时,才可以导入该文件。
注:许多选项只能通过命令行界面才能使用。不过,您可以将参数文件与命令行一起使用。
完全数据库
表模式 用户模式 表空间模式 模式
表定义 表定义 表定义 表定义
所有者的表授权 所有者的授权 授权 授权
所有者的表索引 所有者的索引 索引 索引
导出模式
表模式
表模式可以导出用户方案中的指定的表,而不是导出所有表。已授权的用户可以导出其他
用户所拥有的指定的表。
用户模式
用户模式可以导出某个用户方案的所有对象。已授权的用户可以导出一组指定用户的方案
中的所有对象。此模式可用于执行完全数据库导出。
表空间模式
表空间模式可用于导出指定表空间中的所有表。
使用可移动的表空间功能,可以将一组表空间从一个 Oracle 数据库移动到另一个 Oracle
数据库。
利用可移动的表空间来移动数据,其速度比对相同数据执行导入/导出要快得多,原因是
传输表空间只需要复制数据文件,然后并入表空间结构信息即可。您还可以使用可移动的
表空间来移动索引数据,从而避免在导入表数据时必须重建索引。
• 语法:
exp keyword = value, value2, … ,valuen
• 示例:
exp hr/hr TABLES=employees,departments
rows=y file=exp1.dmp
调用导出实用程序
命令行导出
可以使用导出实用程序的命令行模式将数据库数据复制到某个操作系统文件中。只有导入
实用程序才能读取该文件。
示例
创建名为 exp1.dmp 的导出文件,其中包含 HR 方案中的表 EMPLOYEES 和
DEPARTMENTS(包括表行):
exp hr/hr tables=employees,departments rows=y file=exp1.dmp
注:表名称中可包含任意数量的 '%' 模式匹配字符,其中每个字符可将表名称中的零或多
个字符与数据库中的表对象相匹配。
创建一个名为 expdat.dmp 的快速导出文件,其中包含 HR 方案的所有对象:
exp system/manager owner=hr direct=y
注:缺省的导出文件名为 expdat.dmp。
导出 Oracle 服务器
双任务 SQL 缓冲区高
生成 SQL 命令 公用协议 命令处理 速缓存 写入块
(Two-Task 管理器
common,
导出 TTC)
TTC 缓冲区高 读取块
转储文件 评估缓冲区 速缓存
缓冲区
直接路径
直接路径
常规路径
直接路径导出概念
使用直接路径功能可以大大加快提取数据的速度。如果指定了 DIRECT=Y 参数,导出实
用程序将直接从数据层读取,而不必通过 SQL 命令处理层。
直接路径导出机制
• 直接导出模式可以通过指定 DIRECT=Y 参数来设置。
• 直接路径导出不与例程的其它资源竞争。
• 在直接读取模式中,它将数据库的数据块读入由会话使用的一个专用区域中。
• 行将被直接传送到双任务通信协议 (Two-Task Common, TTC) 缓冲区以供传输。
• TTC 协议缓冲区中数据的格式是导出实用程序预期的格式。
• 导出类型将显示在屏幕输出、导出转储文件和日志
文件中。
• 数据已经是导出实用程序所预期的格式,从而避免
了不必要的数据转换。
• 使用优化的 SQL SELECT 语句。
直接路径导出
导出实用程序的直接路径选项引入了一些有别于常规路径导出的功能。
直接路径功能
• 导出的类型将显示在屏幕输出、导出转储文件和以 LOG 参数指定的日志文件中。
• 数据已经是导出实用程序所预期的格式,因此避免了不必要的数据转换。数据将
传送到导出客户机,该客户机随后将数据写入导出文件。
• 直接路径导出使用经过优化的 SELECT * FROM 表,而不带任何谓词。
注:导出转储文件中的列数据和说明的格式与常规路径导出的相应格式不同。
• 直接路径选项不能交互式调用。
• 客户端和服务器端的字符集必须相同。
• BUFFER 参数不起作用。
• 不能使用直接路径选项来导出包含 LOB、BFILE、REF
的行或对象类型。
直接路径的限制
导出实用程序的直接路径选项具有一些有别于常规路径导出的限制。
• 直接路径导出功能不能通过使用交互式 EXP 会话来进行调用。
• 在使用直接路径选项时,客户端的字符集必须与服务器端的字符集相匹配。可以使用
环境变量 NLS_LANG 设置为与服务器端相同的字符集。
• 导出实用程序的 BUFFER 参数对直接路径导出不起作用;只有常规路径选项使用该参
数。
• 不能使用直接路径导出功能来导出包含有 LOB、BFILE、REF 数据类型的行或对象类
型列(包括 VARRAY 列和嵌套表)。只导出用来创建表的数据定义,而不导出数据。
• 使用导出命令的命令行参数:
exp userid=hr/hr full=y direct=y
• 使用参数文件中的关键字:
exp parfile=<Parameter file>
参数文件
…..(其它参数)
DIRECT = Y
…...(其它参数)
指定直接路径导出
在可以使用直接路径导出之前,必须确保已运行了 catexp.sql 脚本。它位于
$HOME/rdbms/admin/ 目录下。
命令行选项
可以在操作系统提示符下使用 DIRECT 命令行参数来调用直接路径导出。
$ exp user=hr/hr full=y direct=y
参数文件
exp_par.txt是参数文件的一个示例:
USERID=hr/hr
TABLES=employees,departments
FILE=exp_one.dmp
DIRECT=Y
从操作系统提示符下使用参数文件调用导出实用程序:
$ exp parfile=exp_param.txt
• 创建表定义
• 从有效的导出文件中提取数据
• 从完全或累积导出文件中导入
• 从用户错误故障中恢复
导入实用程序
导入实用程序从导出转储文件中读取对象定义和表数据。它将数据对象插入 Oracle 数据
库。导入功能包括:
• 创建表定义(因为表定义存储在导出文件中)。选择导入不带行的数据将只创建表定
义。
• 从有效的导出文件中提取数据,方法是使用表模式、用户模式、表空间模式或完全导
入模式
• 从完全或累积导出文件中导入数据
• 使用前面所述的方法之一从用户操作失败而导致的错误中(如意外删除或截断了某个
表)恢复
模式 说明
表模式 将指定的表导入方案中。
用户模式 导入属于某个方案的所有对象
表空间模式 导入表空间中包含的所有的对象定义
完全数据库模式 从导出文件中导入所有对象
导入模式
表模式
表模式可以导入用户方案中所有指定的表,而不是导入所有表。已授权的用户可以导入其
他用户拥有的指定的表。
用户模式
用户模式可以导入某个用户方案的所有对象。已授权的用户可以导入一组指定用户的方案
中的所有对象。
表空间模式
表空间模式允许已授权的用户将一组表空间从一个 Oracle 数据库移动到另一个 Oracle 数
据库。
完全数据库模式
完全数据库模式可以导入所有数据库对象,SYS 方案中的对象除外。只有已授权的用户才
能以此模式执行导入。
• 语法:
imp keyword = value or keyword = value,
value2, … value n
• 示例:
imp hr/hr TABLES=employees,departments
rows=y file=exp1.dmp
调用导入实用程序
导入示例
使用名为 exp1.dmp 的导出文件,将表 EMPLOYEES 和 DEPARTMENTS(包括表行)导
入 HR 方案中。
$ imp hr/hr tables=employees,departments rows=y file=exp1.dmp
使用名为 exp2.dmp 的导出文件,导入所有属于 HR 方案的对象(包括表行)。
$ imp system/manager FROMUSER=hr file=exp2.dmp
使用名为 expdat.dmp 的导出文件,导入所有属于表空间 TS_EMPLOYEES 的对象定义。
$ imp \'username/password AS SYSDBA\' \
TRANSPORT_TABLESPACE=y TABLESPACES=ts_employees
如果未指定文件参数,导入实用程序会查找缺省的文件 expdat.dmp。
注:命令行模式选项与交互模式选项相似,但却提供更多的功能。
参数 说明 缺省值
BUFFER 指定用来传送数据行的缓冲区大小 取决于操作系统
(以字节为单位)
DATAFILES 列出要传输到数据库中的数据文件 无
DESTROY 指定是否应重复使用构成数据库的现 N
有数据文件
FEEDBACK 为已导入的 n 行显示时间段形式的进 0
度表
FILE 指定要导入的导出文件的名称 expdat.dmp
FROMUSER 要导入的方案的列表 无
FULL 指定是否导入整个导出文件 N
HELP 显示导入参数的说明 N
IGNORE 指定应如何处理对象创建错误 N
INDEXES 指定是否导入索引 Y
INDEXFILE 指定接收索引创建语句的文件 无
LOG 指定接收信息性消息和错误消息的文件 无
PARFILE 指定包含有导入参数列表的文件 无
RECORDLENGTH 指定文件记录长度(以字节为单位) 取决于操作系统
ROWS 指定是否导入表数据的行 Y
TABLES 指定以表模式导入,并列出要导入的 无
表名称、分区和子分区名称
TABLESPACES 指定要传输到数据库中的表空间列表 无
TOUSER 指定其方案要作为导入目标的用户名 无
列表
TRANSPORT_ 从导出文件中导入可移动的表空间元 N
TABLESPACE 数据
USERID 指定执行导入操作的用户的用户名/ 无
口令
作为 SYSDBA 导入
SYSDBA 在内部使用并具有专门功能。它的行为与一般用户的行为不同。因此,通常应不
需要以 SYSDBA 用户身份来调用导入实用程序,除了以下两种情况:
• 应 Oracle 技术支持的要求
• 在导入可移动的表空间集时
要以 SYSDBA 用户身份来调用导入实用程序,请使用下面的语法,并添加任何所需的参
数或参数文件名:
imp \'username/password AS SYSDBA\'
或者,也可以使用:
imp \'username/password@instance AS SYSDBA\'
如果遗漏了用户名或口令,导入实用程序将提示您输入它。在该示例中,完整的连接字符
串由引号和反斜杠括起来。这是因为字符串 AS SYSDBA 中包含一个空格;在这种情况
下,大多数操作系统都要求将整个连接字符串放在引号内,或用某种方法将其标记为一个
字。此外,某些操作系统还要求命令行中的引号前应具有转义符。在该示例中,反斜杠即
用作转义符。如果没有反斜杠,导入实用程序所使用的命令行语法分析器将无法理解引
号,而会在调用导入实用程序前删除它们。
1. 创建新表
2. 导入数据
3. 建立索引
4. 导入触发器
5. 对新表启用完整性约束
6. 建立所有位图、函数和/或域索引
导入进程序列
在导入一个表时,将读取导出文件,并按照以下顺序创建表和数据:
1. 创建新表
2. 导入数据
3. 建立索引
4. 导入触发器
5. 对新表启用完整性约束
6. 建立所有位图、函数和/或域索引
该顺序可防止数据由于表的导入顺序而被拒绝。该顺序还可防止对同一数据两次触发冗余
触发器(一次在初始插入时,一次在导入过程中)。
如果不导入某个用户拥有的所有对象,那么导入表的顺序将非常重要。例如,如果具有外
键的表对具有主键的表进行引用检查,而且先导入外键表,则在启用了约束条件的情况
下,将拒绝所有引用该尚未导入的主键的行。在完全数据库导出中不存在该问题。
• 导出文件确定该文件中字符数据所使用的字符编码方案。
• 导入实用程序将数据转换成其主机系统的字符集。
• 多字节字符集导出文件必须导入到具有相同特征的系统
中。
全球化支持注意事项
将数据从使用一种字符集的 Oracle 数据库移动到另一个使用其它字符集的数据库时,请
确保必须对数据进行相应的转换。可以将 NLS_LANG 环境变量设置为要从其中导出数据
的数据库的字符集定义,以便进行数据转换。如果没有正确设置该变量,数据中的字符可
能会出现意外转换,从而导致数据丢失。
示例
将 7 位 ASCII 字符集(如美国英语)转换为 8 位字符集(如丹麦语)时,因为所有字符
在丹麦语字母表中均有对应的字符,所以无需转换。
而将 8 位 ASCII 字符集(如丹麦语)转换为 7 位字符集(如美国英语)时,会将美国英
语字母表中找不到的特别的丹麦语字符转换为问号 (?)。在这种情况下,使用问号代替未
知的丹麦语字符是一个合适的结果。
在 8 位至 8 位的数据移动中,是否丢失字符取决于用来输入数据的语言的特性。例如,西
班牙语字母表中的某些字母在丹麦语字母表中没有,所以将数据从西班牙语数据库移动到
丹麦语数据库时可能会需要数据转换,从而可能会丢失这些字符。
在这一课中,您应该能够掌握:
• 描述导出和导入实用程序的使用
• 说明导出和导入的概念与结构
• 执行简单的导出和导入操作
• 列出使用导出和导入操作的原则
此练习涉及以下主题:
• 使用导出实用程序
• 使用导入实用程序
完成这一课的学习后,您应该能达到下列目标:
• 使用数据库配置工作表记录数据库配置
• 配置 Oracle9i 数据库以支持规定的业务要求
• 恢复出现故障的数据库,并使停机时间和数据
损失降至最小
• 启用并使用跟踪输出以进行故障排除
• 识别并排除以下故障:
– 监听程序问题
– 客户机配置问题
• 面向学习小组并鼓励组间交流
• 强化的实践诊断和问题解决
• 多种故障类型
• 恢复解决方案
• 多种配置错误
• 练习故障排除技能
面向学习小组的交互式结构
专题讨论的结构是将学员分组,每个人在各自的小组中执行数据库备份、还原和恢复操作。
鼓励每个组与班级中的其它组共享其排除数据库故障的方法。
强化的实践诊断和问题解决
旨在为您提供尽可能多的实践经验,以便诊断并应付各种备份和恢复情况。从本课程中获
得的经验和知识对于成功完成每个课时的目标将起到关键作用。
• 实际调查:
– 使用视图和工具以获得信息
– 查看跟踪文件和日志文件
– 查看命令输出和日志文件
– 使用视图和工具以确认正确的数据库配置
• 数据库配置:
– 启用归档
– 镜像控制文件和日志文件
– 备份控制文件
实际调查
使用 Oracle9i 环境中的工具,如 V$ 视图、数据字典视图、SQL*Plus 中的工具以及 Oracle
Enterprise Manager(如果有),可获得有关数据库环境的信息。记住业务要求,并记录所
有您感到为支持这些业务要求需要纠正或改进的不足之处。
您将使用命令(tnsping、sqlplus 和 lsnrctl 等等)输出和日志文件来执行必要的
故障排除。对于第二部分,您可以使用 Oracle9i 环境中的工具(如 V$ 视图和 SQL*Plus
中的工具)来设置和测试您的配置。
数据库配置
真正修改数据库的配置,以确保:
• 启用归档
• 控制文件和日志文件在多个设备上镜像和分布
• 控制文件既备份到跟踪文件,也以二进制格式备份
• 24 小时可用性
• 使用高峰期在各个时区互不相同
• 需要每日进行备份
• 需要执行完全数据库恢复
业务要求
在配置数据库进行备份和恢复时,应了解以下业务要求。
24 小时可用性:数据库必须每周 7 天、每天 24 小时可用。每个月的第一个星期六,在例
程可以关闭时安排一个 8 小时维护窗口。
使用高峰期随可用时间段的变化而不同:该数据库供全球访问,所以每天 24 小时均会使
用该数据库。
每日备份:需要每日进行完全数据库备份。
完全数据库恢复:这是一个关键业务应用,绝不允许丢失任何数据。每天 24 小时均会发
生大量的事务处理。
• 第一阶段:诊断问题
• 第二阶段:还原相应的文件
• 第三阶段:恢复数据库
• 第四阶段:备份数据库
解决专题讨论故障情况
故障和恢复方案是一些实践练习,每个学习小组均可以灵活地执行自己认为是正确的还原
和恢复操作。专题讨论期间大约练习六种故障和恢复情况。
教师不会告诉您练习哪种情况。在排除故障时,请按照本课介绍的诊断步骤操作。
• 首先检查日志文件以诊断问题
• 使用跟踪文件以获得详细信息
• 谨慎地使用跟踪,并定期调整跟踪文件,因为这些文件
可能会迅速增大
网络专题讨论
本专题讨论引入了八种故障情况。每个脚本都在 Oracle 网络产品的其中一个配置文件中
引发一个错误。在教师引发配置中的错误后,请尝试使用网络进行连接,然后在继续运行
下一脚本之前排除并修正该问题。例如,要启动第一个故障情况,应运行下面的命令:
$ sqlplus system/manager@your_service_name
(应该会生成某些错误)
使用命令输出和日志文件来更正该错误。使用编辑器修正包含该错误的文件
(tnsnames.ora、sqlnet.ora 或 listener.ora)并尝试再次连接。
如果不能解决该问题,并希望继续练习下一个故障情况,可以使用以下三个脚本来还原原
始文件:FIX_CLIENT.sh(tnsnames.ora)、FIX_NAMING.sh(sqlnet.ora) 和
FIX_LISTENER.sh(listener.ora)。仅当您无法自行修复该问题时再运行与该问题
相关的 FIX 脚本,然后告诉教师希望继续练习下一个情况。
跟踪
客户机跟踪受以下 sqlnet.ora 参数的控制:
TRACE_DIRECTORY_CLIENT:设置将用于写入跟踪文件的目录
TRACE_FILE_CLIENT:设置跟踪文件名
TRACE_UNIQUE_CLIENT:强制为每个连接创建一个新的跟踪文件
TRACE_LEVEL_CLIENT:控制跟踪输出量。值可以是 OFF、USER、ADMIN 和
SUPPORT,按从小到大顺序排列
要使用 Oracle Net Manager 配置对客户机的跟踪,请执行以下操作:
在目录树中单击 “配置文件” (Profile) 图标。从下拉菜单中选择 “常规” (General) 并单击
“跟踪” (Tracing) 选项卡。从位于 “客户机信息” (Client Information) 部分的菜单中选择跟踪
级别。在 “跟踪目录” (Trace Directory) 字段中输入有效的目录名,然后在 “跟踪文件”
(Trace File) 字段中输入文件名。如果您希望在每个新创建的跟踪文件后附加一个唯一标识
符,请选择 “唯一文件跟踪名称” (Unique File Trace Name) 复选框,然后保存您的配置。
跟踪文件会让您更好地了解以下内容:
• 网络节点之间的数据包流
• 哪一个 Oracle Net 组件发生故障
• 相关的错误代码
使用跟踪文件
通过评估跟踪文件,您可以更好地了解数据包流、组件故障和错误代码,这样会有助
于您诊断和排除网络问题。检查数据包数据和确定数据包类型的能力是一个无价的故
障排除工具。数据包类型代码如下所列:
1. 连接数据包
2. 接受数据包
3. 确认数据包
4. 拒绝数据包
5. 重定向数据包
6. 数据包
7. 空数据包、空数据
8. 中止数据包
9. 重新发送数据包
10. 标记数据包
11. 提示数据包
12. 控制信息数据包
这是客户机为建立连接而向监听程序发送的第一个数据包。从第 1 行,我们可以看到这
是一个连接数据包(TYPE 1)。从剩下的输出中,我们可以看到发送至该监听程序的数
据包的长度、初始化设置和连接数据。尽管由于文件太大而无法完全显示,但是您可以
找到连接协商数据和重要的错误代码。此类信息对于排除很难的网络问题非常有价值。
• 教师引导的专题讨论
• 面向学习小组
• 实践方法
• 模拟 “现实世界” 环境
• 使停机时间和数据损失减至最小
• 使用工具和诊断程序以确定故障类型
教师引导的专题讨论
教师将提供相应的指导和附加信息来引导专题讨论。
强调小组作用
着重强调与专题讨论中的其他同学进行团队合作,以便诊断并排除故障。成功应对每种情
况的能力取决于每个组积累的知识和解决问题的技能。
实践方法
这是一个旨在实践的专题讨论,它为您提供尽可能长的时间来练习 lab 情况。
表空间名称 数据文件名称(完整路径)
联机重做日志文件信息
组号 重做日志文件名称(完整路径) 大小 状态
控制文件信息
控制文件名称
参数名称 值
BACKGROUND_DUMP_DEST
CORE_DUMP_DEST
DB_FILES
DB_NAME
LOG_ARCHIVE_DEST_n
LOG_ARCHIVE_DEST_n
LOG_ARCHIVE_FORMAT
LOG_ARCHIVE_MIN_SUCCEED_DEST
LOG_ARCHIVE_START
USER_DUMP_DEST
TNS_ADMIN 变量值
监听程序名称
端口号
协议
listener.ora 文件的位置
服务名称
tnsnames.ora 文件的位置
sqlnet.ora 文件的位置
跟踪文件的位置
日志文件的位置
练习答案
练习 3 答案
1. 使用 Oracle Net Manager 创建监听程序 listenernn(nn 是教师为您分配的一个两位
数字编号)。必须按教师指定的步骤为服务器配置监听程序。必须将监听程序配置
为只用于 TCP/IP 协议,并且监听程序必须监听教师提供的端口上的传入连接。
注:如果学生 PC 上安装了 Oracle9i Oracle Net 软件,则使用 Oracle Net Manager 在
客户机 PC 上创建监听程序配置文件,然后在以后的步骤中,通过 FTP 或类似的文
件传输应用程序将该文件传输到服务器上。
对于本练习和后续网络练习,TNS_ADMIN 环境变量必须指向您的 UNIX 帐户所在
主机上的 $HOME/NETWORK/ADMIN 目录。
可以在 UNIX 提示符下执行以下命令以验证设置:
echo $TNS_ADMIN
或者可查看 .profile 文件(位于您的主目录中)并搜索以下条目:
TNS_ADMIN=$HOME/NETWORK/ADMIN
export TNS_ADMIN
如果这些条目不在该文件中,则编辑该文件并添加上述行。注销然后重新登录以使
更改生效。
如果您的 PC 上没有安装 Oracle9i 客户机软件,则必须编辑 listener.ora。在
$HOME/LABS 目录下可找到示例联网文件。示例文件的扩展名为 .sam。将
$HOME/STUDENT/LABS/listener.sam 复制为
$TNS_ADMIN/listener.ora,并使用 vi 编辑该文件。
$ cd $TNS_ADMIN
$ cp $HOME/STUDENT/LABS/listener.sam listener.ora
使用 Oracle Net Manager
a. 从 “开始” (Start) 菜单,选择 “程序” (Programs > Oracle - Oracle Home > “配置
和移植工具” (Configuration and Migration Tools) > Net Manager。
b. 展开 “Oracle 网络配置” (Oracle Net Configuration) 树中的 “本地” (Local) 文件
夹,然后单击 “监听程序” (Listeners) 文件夹。从 “编辑” (Edit) 菜单中选择 “创
建” (Create),或者单击 “+” 图标。
c. 在出现的 “选择监听程序名” (Choose Listener Name) 对话框中输入监听程序
(listenernn) 的名称,然后单击 “确定” (OK)。在左侧窗格的 Listeners 文件夹下
面将出现新监听程序的名称。
d. 如果尚未选定,请从屏幕右侧的下拉菜单中选择 “监听位置” (Listening
Locations)。
e. 单击 “添加地址” (Add Address) 按钮。此时,就会出现一个选项卡供您输入有
关监听程序地址的详细信息。
f. 选择 TCP 协议(如果尚未选定)。
g. 在 “主机” (Host) 字段中输入服务器的名称,并在 “端口” (Port) 字段中输入为
监听程序分配的端口号(端口号是由教师提供的)。
h. 从屏幕右侧的下拉菜单中选择 “数据库服务” (Database Services)。
专题讨论中
出现的情况
网络专题讨论中出现的情况
情况 1:TNSNAMES.ORA 中的端口已损坏
情况 2:TNSNAMES.ORA 中 “CONNECT_DATA” 的标点符号不正确
情况 3:TNSNAMES.ORA 中存在 PROTOCOL 错误
情况 4:TNSNAMES.ORA 中存在 SERVICE_NAME 错误
情况 5:SQLNET.ORA 中 NAMES.DIRECTORY_PATH 的值不正确
情况 6:LISTENER.ORA 的监听程序定义中存在 PORT 错误
情况 7:LISTENER.ORA 的 SID_LIST 中存在 LISTENER 错误
情况 8:LISTENER.ORA 中的监听程序名称存在错误
完成这一课的学习后,您应该能达到下列目标:
• 掌握直接加载插入操作的用法
• 说明 SQL*Loader 的用法
• 执行基本的 SQL*Loader 操作
• 列出使用 SQL*Loader 和直接加载插入的原则
其它应用程序
Oracle
数据库
导出
SQL*Loader
导入
Oracle
数据库
直接加载插入
加载数据
可以使用几种方法向 Oracle 数据库的表中加载数据。此处讨论其中的直接加
载插入和 SQL*Loader 这两种方法。导出和导入将在另一课中讨论。
SQL*Loader
SQL*Loader 可将数据从外部文件加载到 Oracle 数据库的表中。SQL*Loader
包含一个功能强大的数据分析引擎,该引擎对数据文件中数据的格式几乎没有
限制。
直接加载插入
直接加载插入可用于在同一数据库中将数据从一个表复制到另一个表。此方法
绕过缓冲区高速缓存直接将数据写入数据文件,从而提高了插入操作的速度。
可以使用以下方法执行直接加载插入:
• 正常(串行)或并行
• 插入到分区表、非分区表或表的单个分区中
• 记录或不记录重做数据
直接加载插入
直接加载插入(串行或并行)只支持 INSERT 语句的 INSERT ... SELECT
语法,而不支持 INSERT ...values 语法。INSERT ... SELECT 的并行
性是由并行提示或并行表定义决定的。Oracle9i 提供了语法扩展,可扩大
INSERT ... SELECT 语句的使用范围,这样就可以将行作为单个 DML 语
句的一部分插入到多个表中。
可使用 APPEND 提示调用直接加载插入,命令如下所示:
INSERT /*+APPEND */ INTO [ schema. ] table
[ [NO]LOGGING ]
sub-query;
其中:
schema 是表的所有者
table 是表的名称
sub-query 是用于选择插入的列和行的子查询
服务器
EMPLOYEES 表 进程
已使用的块 高水位标记
删除后得到的空闲空间 插入行所使用的块
串行直接加载插入
到非分区表、分区表或子分区表中的串行直接加载插入
将数据插入到表段或各分区段的当前高水位标记之上。高水位标记是一个分界
线,分界线以上的块不会被格式化,因而无法接收数据。执行一条语句后,就
会将高水位标记更新为一个新值,使其它段能够看到数据。当加载分区表或子
分区表时,SQL*Loader 就会对行进行分区并维护索引(索引也可进行分区)。
如果对分区表或子分区表进行直接路径加载,则可能会消耗大量的资源。
从属 从属
EMPLOYEES 表 进程 进程
已使用的块 高水位标记
删除后得到的空闲空间 临时段
并行直接加载插入
可以使用下列方法之一并行执行直接加载插入操作:
• 在 INSERT 语句中使用 PARALLEL 提示,如示例中所示
• 创建表或更改表以指定 PARALLEL 子句
执行并行直接加载插入时,Oracle 服务器使用多个称为 “并行查询从属” 的进
程将数据插入到表中。分配临时段以存储各个从属进程插入的数据。提交事务
处理时,这些段中的区就成为插入了记录的那个表的一部分。
注:
• 必须在事务处理开始时执行 ALTER SESSION ENABLE PARALLEL DML
命令。
• 在同一事务处理中,不能再次查询或修改使用并行直接加载插入修改的对
象。
有关并行直接加载插入的详细讨论,请参阅 Oracle9i Reference 中的 “Parallel
Execution”。
参数文件 SQL*Loader
(可选) 拒绝
字段处理
废弃 接受
记录选择
坏文件
选定
Oracle 服务器
废弃文件 拒绝
(可选) 插入
日志文件
数据库数据文件
SQL*Loader 功能
SQL*Loader 可将数据从外部文件加载到 Oracle 数据库的表中。SQL*Loader
具有下列功能:
• SQL*Loader 可以使用一个或多个输入文件
• 可以将多个输入记录合并为一个逻辑记录以进行加载
• 输入字段的长度可以是固定的,也可以是不固定的
• 输入数据可以采用任何格式:字符、二进制、压缩十进制、日期和分段十
进制
• 可以从磁盘、磁带或命名管道等不同类型的介质加载数据
• 可以在一次运行中将数据加载到多个表中
• 可以使用替换或附加到表中现有数据的选项
• 在将行存储到数据库中之前,可以将 SQL 函数应用于输入数据
• 可基于规则自动生成列值。例如,可以生成连续键值并将其存储到列中
• 可以绕过数据库缓冲区高速缓存,将数据直接加载到表中
数组插入
常规
直接
表 数据 路径
保存
高水位标记
仅供常规加载使用的空间
加载方法
SQL*Loader 提供两种加载数据的方法:
• 常规路径
• 直接路径
常规路径加载
常规路径加载将需要插入的行排成一个数组,并使用 SQL INSERT 语句加载
数据。在常规路径加载期间,将基于字段说明来分析输入记录,而且将记录排
成一个数组并将其插入到控制文件所指定的表中。不符合字段说明的记录将被
拒绝,而不满足选择标准的记录则被废弃。
可通过常规路径加载将数据加载到集簇表及非集簇表中。至于重做日志的生成
情况,则受所加载表的记录属性的控制。
常规路径加载 直接路径加载
可以加载到集簇表中 无法加载到集簇表中
其他用户可以对表进行更改 其他用户不能对表进行更改
直接路径加载和常规路径加载的比较
保存数据的方法
常规路径加载使用 SQL 处理及数据库 COMMIT 来保存数据。在插入记录数组
后将执行提交操作。每次数据加载都可能涉及多个事务处理。
直接路径加载使用数据保存将数据块写入到 Oracle 数据文件中。数据保存与
COMMIT 之间存在以下区别:
• 数据保存期间,只将已满的数据库块写入数据库。
• 块写在表的高水位标记之后。
• 数据保存之后,高水位标记就会移动。
• 数据保存之后不释放内部资源。
• 数据保存并不结束事务处理。
• 每次数据保存时均不更新索引。
临时段
load1.dat SQL*Loader
load1.ctl
SQL*Loader
load2.dat
load2.ctl
SQL*Loader
load3.dat
load3.ctl
表
高水位标记
并行直接路径加载
使用多个 SQL*Loader 会话可提高直接路径加载的性能。有三种并发模式可用
于最大限度地缩短数据加载所需的时间:
• 并行常规路径加载
• 在直接路径加载方法中使用段间并发
• 在直接路径加载方法中使用段内并发
并发常规路径
如果触发器或完整性约束出现问题,但又希望获得更快的加载速度,则应该考
虑使用并发常规路径加载。请在具有多个 CPU 的系统上使用多个并发执行的
加载会话。在逻辑记录边界上将输入数据文件拆分为多个单独的文件,然后使
用常规路径加载会话分别加载拆分得到的输入数据文件。
段间并发
段间并发可用于同时加载不同的对象。在直接路径加载中,这种技术可用于同
时加载不同的表或同时加载同一表中的不同分区。
段内并发
并行直接路径加载允许多个直接路径加载会话将数据同时加载到同一表中,或
者加载到某个允许进行段内并发操作的分区表的同一分区中。
Oracle9i 数据库管理基础 II D-15
使用 SQL*Loader
$sqlldr hr/hr \
> control=case1.ctl \
> log=case1.log direct=Y
case1.ctl
SQL*Loader
EMPLOYEES 表
case1.log
使用 SQL*Loader
命令行
在调用 SQL*Loader 时,可以指定一些参数以确定会话的特性。可以按任意顺
序输入参数,并用逗号将它们隔开(可选)。可以指定参数值;在某些情况
下,也可接受缺省值而不输入任何值。
如果调用 SQL*Loader 时未指定任何参数,则 SQL*Loader 显示帮助屏幕,其
中列出了可用的参数及其缺省值。
• 加载数据所在的位置
• 数据格式
• 配置详细信息
– 内存管理
– 有关记录拒绝情况
– 与处理被中断的加载有关的详细信息
• 操纵数据的方式
SQL*Loader 控制文件
SQL*Loader 控制文件是一个文本文件,其中包含一些数据定义语言 (DDL) 指
令。DDL 用于控制 SQL*Loader 会话的以下方面:
• SQL*Loader 到何处查找要加载的数据
• SQL*Loader 希望数据采用什么格式
• SQL*Loader 在加载数据时如何配置(内存管理、拒绝记录、处理被中断的
加载等)
• SQL*Loader 如何操纵正在加载的数据
虽然并未明确定义,但是可以将加载程序控制文件划分为三个部分。
• 第一部分包含会话范围内的信息,例如:
– 全局选项(如绑定大小、行、要跳过的记录等)
– 指定输入数据所在位置的 INFILE 子句
– 加载数据的方式
• 第二部分包含一个或多个 INTO TABLE 块。每个块都包含一些与要在其中
加载数据的那个表有关的信息,如表的名称以及表中各列。
• 第三部分是可选的。如果该部分存在,其中将包含输入数据。
Oracle9i 数据库管理基础 II D-18
SQL*Loader 控制文件(续)
以下示例为一个典型的 SQL*Loader 控制文件:
1 -- This is a sample control file
2 LOAD DATA
3 INFILE ’SAMPLE.DAT’
4 BADFILE ’sample.bad’
5 DISCARDFILE ’sample.dsc’
6 APPEND
7 INTO TABLE emp
8 WHEN (57) = ’.’
9 TRAILING NULLCOLS
10 (hiredate SYSDATE,
deptno POSITION(1:2) INTEGER EXTERNAL(3)
NULLIF deptno=BLANKS,
job POSITION(7:14) CHAR TERMINATED BY WHITESPACE
NULLIF job=BLANKS "UPPER(:job)",
mgr POSITION(28:31) INTEGER EXTERNAL
TERMINATED BY WHITESPACE, NULLIF mgr=BLANKS,
ename POSITION(34:41) CHAR
TERMINATED BY WHITESPACE "UPPER(:ename)",
empno POSITION(45) INTEGER EXTERNAL
TERMINATED BY WHITESPACE,
sal POSITION(51) CHAR TERMINATED BY WHITESPACE
"TO_NUMBER(:sal,’$99,999.99’)",
comm INTEGER EXTERNAL ENCLOSED BY ’(’ AND ’%’
":comm * 100"
)
以下是对示例控制文件的说明:
1. 此行显示在控制文件中输入注释的方法。注释可以出现在文件的命令部
分中的任何地方,但不能出现在数据中。
2. LOAD DATA 语句通知 SQL*Loader 将要开始一个新的数据加载。如果要
继续执行已中断的加载进程,应该使用 CONTINUE LOAD DATA 语句。
3. INFILE 关键字指定一个数据文件的名称,其中包含要加载的数据。
Oracle9i 数据库管理基础 II D-19
SQL*Loader 控制文件(续)
4. BADFILE 关键字指定一个文件的名称,用于保存被拒绝的记录。
5. DISCARDFILE 关键字指定一个文件的名称,用于保存废弃的记录。
6. APPEND 关键字是将数据加载到非空表中时使用的选项之一。要将数据
加载到空表中,请使用 INSERT 关键字。
7. INTO TABLE 关键字用于标识表、字段和数据类型。它定义了数据文件
中的记录与数据库中的表之间的关系。
8. WHEN 子句指定了一个或多个字段条件。在 SQL*Loader 加载数据之前,
每条记录都必须满足这些条件。在此示例中,仅当第 57 个字符是小数点
时,SQL*Loader 才会加载这条记录。该小数点用于分隔字段中的美元和
美分,如果 SAL 没有值,就会拒绝这条记录。
9. TRAILING NULLCOLS 子句告知 SQL*Loader 将任何处于相对位置的列
(即不在该记录中的列)作为空列处理。
10. 控制文件的剩余部分包含字段列表,该列表提供了有关要加载的表中列
格式的信息。
• 控制文件的语法在格式方面没有任何限制
• 控制文件的语法不区分大小写
• 注释是从标记注释开始的两个连字符 (--) 开始,
一直延续到行尾
• CONSTANT 关键字是系统保留字
与控制文件的语法有关的注意事项
• 控制文件的语法在格式方面没有任何限制(语句可以长达数行)。
• 它不区分大小写。但是,单引号或双引号内的字符串必须完全保留原样
(包括大小写在内)。
• 在控制文件的语法中,注释从标记注释开始的两个连字符 (--) 开始一直延
续到行尾。控制文件的第三部分(可选)被认为是数据(而非控制文件的
语法),因此,在此部分中不支持注释。
• 对 SQL*Loader 来说,CONSTANT 关键字具有特殊含义,因此系统将该关
键字加以保留。为避免出现潜在的冲突,建议不要将 CONSTANT 用作任何
表或列的名称。
• SQL*Loader 从控制文件所指定的一个或多个文件中读
取数据
• 从 SQL*Loader 的角度看,数据文件中的数据是以记录
的形式出现的
• 数据文件可以采用以下三种格式之一:
– 固定记录格式
– 可变记录格式
– 流式记录格式
数据文件格式
固定记录格式
如果数据文件中的所有记录具有相同的字节长度,则文件采用的是固定记录格
式。虽然这种格式最为死板,但是采用后的系统性能比采用可变记录格式或流
式记录格式要好。此外,指定固定记录格式的语法十分简单。例如:
INFILE <datafile_name> "fix n"
在此示例中,告知 SQL*Loader 特定数据文件采用的是固定记录格式,其中每
条记录具有 n 个字节。
以下示例显示这样的控制文件:它指定数据文件采用固定记录格式。该数据文
件包含四条物理记录。第一条记录是 [0001, abcd],数据长度刚好是 9 个字节
(使用单字节字符集),回车符是第 10 个字节。
load data
infile ’example.dat’ "fix 10"
into table example
fields terminated by ’,’
(col1, col2)
example.dat:
0001,abcd
0002,fghi
0003,klmn Oracle9i 数据库管理基础 II D-22
数据文件格式(续)
可变记录格式
如果数据文件中每条记录的开头都包含了该记录在字符字段中的长度,则文件
采用的是可变记录格式。这种格式与固定记录格式相比具有更大的灵活性,与
流式记录格式相比具有更高的系统性能。例如,可以按以下方法指定一个采用
可变记录格式的数据文件:
INFILE "datafile_name" "var n"
在此示例中,n 指定记录长度字段中的字节数。如果未指定 n,则 SQL*Loader
假定记录长度为 5 个字节。如果指定的 n 大于 40,就会出现错误。以下示例
显示的是一个控制文件说明,它告知 SQL*Loader 在数据文件 example.dat
中查找数据,并且指明该数据文件采用可变记录格式,记录长度字段为 3 个字
节的字符。example.dat 数据文件包含三条物理记录。其中,第一条记录的
长度为 009(即 9)个字节,第二条记录的长度为 010 个字节(包括一个字符
的新行符),第三条记录的长度为 012 个字节。此示例还假定该数据文件使用
单字节字符集。
load data
infile ’example.dat’ "var 3“
into table example
fields terminated by ’,’ optionally enclosed by ’"’
(col1 char(5),col2 char(7))
example.dat:
009hello,cd,
010world,im,
012my,name is,
流式记录格式
如果不是按大小来指定记录,而是让 SQL*Loader 通过扫描记录结束符 来判断
记录的起始和结束,则文件采用的是流式记录格式。流式记录格式是最灵活的
格式,但可能会使系统性能下降。要使数据文件采用流式记录格式,请使用类
似以下语句来加以说明:
INFILE <datafile_name> ["str terminator_string"]
将 terminator_string 指定为 ’char_string’ or X’hex_string’ 其
中:
’char_string’ 是一个用单引号或双引号引起来的字符串
X’hex_string’ 是一个采用十六进制格式的字节字符串
以下是两种生成逻辑记录的策略。可以指示 SQL*Loader
采用其中一种策略:
• 将固定数量的物理记录合并为一条逻辑记录
• 当满足某种条件时,将物理记录合并为逻辑记录
逻辑记录
SQL*Loader 按照指定的记录格式,以物理记录的形式来组织输入数据。缺省
情况下,一条物理记录就是一条逻辑记录。但是为了增加灵活性,可以指示
SQL*Loader 将大量的物理记录合并为一条逻辑记录。SQL*Loader 可以使用以
下两种方法之一完成该操作:
• 将固定数量的物理记录合并为一条逻辑记录
• 当满足某种条件时,将物理记录合并为逻辑记录
使用 CONCATENATE 来组装逻辑记录
如果 SQL*Loader 应该始终将相同数量的物理记录组合成一条逻辑记录,请使
用 CONCATENATE。以下是 CONCATENATE 的一个使用示例,其中 integer 用
于指定要合并的物理记录数:
CONCATENATE integer
使用 CONTINUEIF 来组装逻辑记录
如果要合并的物理记录数不是固定的,必须使用 CONTINUEIF。在
CONTINUEIF 关键字后面跟有一个条件。读取每条物理记录时,都会对该条
件进行判定。例如,如果第一条记录在字符位置为 80 的地方有一个镑字符
Oracle9i 数据库管理基础 II D-25
(#),则可以将两条记录合并。如果该字符位置上是其它字符,则不能将第二
条记录加到第一条记录上。
数据转换
在常规路径加载过程中,分两步将数据文件中的数据字段转
换为数据库中的列:
• 控制文件中的字段说明用于解释数据文件的格式,并使
用该数据将数据文件转换为 SQL INSERT 语句
• Oracle 数据库服务器接受该数据,并执行 INSERT 语句
将数据存储到数据库中
• 坏文件
– 如果记录的输入格式无效,SQL*Loader 将拒绝记录
– 如果 Oracle 数据库发现某行无效,则拒绝该条记录,并且
SQL*Loader 将该记录放到坏文件中
• 废弃文件
– 该文件只有在启用之后方能使用
– 该文件包含被过滤掉的记录,因为这些记录不满足控制文件
中指定的任何记录选择标准
处理被废弃或拒绝的记录
坏文件
坏文件包含被 SQL*Loader 或 Oracle 数据库拒绝的记录。
SQL*Loader 拒绝的记录
如果记录的输入格式无效,SQL*Loader 将拒绝记录。例如,如果记录的右引
号分隔符丢失或者其中某个受限制的字段超过其最大长度,SQL*Loader 将拒
绝该记录。系统将被拒绝的记录放入坏文件中。
Oracle 拒绝的记录
在 SQL*Loader 接受一条记录以进行处理后,就会向 Oracle 发送一行以进行插
入。如果 Oracle 确定该行有效,就会将该行插入到数据库中。否则,将拒绝
这条记录,并且 SQL*Loader 将这条记录放到坏文件中。如果出现以下情况,
该行就可能被拒绝:某个键不是唯一的、某个所需的字段为空,或者字段中包
含的数据对于 Oracle 来说属于无效的数据类型。
• 标头信息
• 全局信息
• 表信息
• 数据文件信息
• 表加载信息
• 概要统计信息
• 直接路径加载的其它统计信息和多线程信息
日志文件的内容
“标头信息” 部分包含以下条目:
• 运行日期
• 软件版本号
“全局信息” 部分包含以下条目:
• 所有输入/输出文件的名称
• 命令行参数的回显
• 续行符说明
“表信息” 部分为加载的每个表提供以下条目:
• 表名
• 加载条件(如有)。即指出是加载所有的记录,还是只加载那些满足
WHEN 子句标准的记录。
• INSERT、APPEND 或 REPLACE 说明
• 以下列信息:
– 位置、长度、数据类型和分隔符(如果能在数据文件中找到)。
– RECNUM、SEQUENCE、CONSTANT 或 EXPRESSION(如果指定)
– DEFAULTIF 或 NULLIF
Oracle9i(如果指定)
数据库管理基础 II D-29
日志文件的内容(续)
如果 SQL*Loader 控制文件包含任何可用于加载日期时间或时间间隔等数据类
型的指令,则日志文件将在数据类型标题下面包含 DATETIME 或 INTERVAL
关键字。如果适用的话,还将在 DATETIME 或 INTERVAL 关键字后面加上相
应的掩码。
仅当数据文件中的数据有错误时,才会显示 “数据文件信息” 部分。该部分包
含以下条目:
• SQL*Loader 和 Oracle 数据记录错误
• 被废弃的记录
“表加载信息” 部分为加载的每个表提供以下条目:
• 加载的行数
• 满足加载条件但由于数据错误而被拒绝的行数
• 由于未通过 WHEN 子句测试而被废弃的行数
• 相关字段均为空的行数
“概要统计信息” 部分显示以下数据:
• 占用的空间量:
– 用于绑定数组(实际使用量基于指定的 BINDSIZE)
– 用于其它开销(始终需要,与 BINDSIZE 无关)
• 累积加载统计信息。即对于所有的数据文件而言跳过、读取或拒绝的记录
数
加载表时,将记录以下统计信息:
• 如果对分区表进行直接路径加载,则报告每个分区的统计信息。
• 常规路径加载无法报告每个分区的统计信息。
如果没有启用介质恢复,则不对加载进行记录。即:如果禁用介质恢复,则忽
略记录操作请求。
• 使用参数文件来指定常用的命令行选项
• 仅当涉及小型、一次性加载时,才将数据放在控制
文件中
• 提高性能的方法包括:
– 分配充足的空间
– 将数据按最大索引排序
– 为临时段指定不同的文件(针对并行加载而言)
SQL*Loader 使用原则
使用 SQL*Loader 时应遵循下列原则,以最大限度地减少错误并提高性能:
• 使用参数文件来指定常用的命令行选项。例如,如果每周都要将数据加载
到数据仓库中,则除文件名外,其它所有选项可能保持不变。
• 将控制文件与数据文件分开,这样可以在多个加载会话中重用控制文件。
• 基于预期的数据量预先分配空间,从而防止在加载期间动态分配区并提高
加载速度。
• 对于直接加载,将使用临时段来生成新数据的索引。加载结束时,这些索
引将与现有索引合并。通过按最大索引的关键字对输入数据进行排序,可
以最大限度地减少排序使用的空间。
• 在并行直接加载中,可指定用于插入数据的临时段的位置。对于每个加载
会话,可指定不同的数据库文件以获得最佳性能。
在这一课中,您应该能够掌握:
• 说明 SQL*Loader 的用法
• 执行基本的 SQL*Loader 操作
• 熟练使用直接加载插入操作
• 列出使用 SQL*Loader 和直接加载插入的原则
此练习涉及以下主题:
• 使用 SQL*Loader 还原数据
– 使用控制文件
– 使用数据文件
• 使用直接加载插入操作来加载数据