恢复方法
- 用户管理的恢复
- 必须手动维护文件并将其移动到位。
- 使用 SQL*Plus 命令
- RMAN 恢复(建议)
- 自动管理文件
- 使用 RMAN 功能,包括所有资料档案库维护和报告功能
- 可以通过使用 Oracle Enterprise Manager 来完成
用户管理的恢复
- 执行用户管理的介质恢复的第一步是通过从备份复制数据文件来手动还原数据文件。如果
- 没有将数据文件还原到它的原始位置,则必须通过使用 ALTER DATABASE RENAME
- FILE 命令用新的位置更新控制文件。还必须还原要恢复已还原的数据文件时所需的所有 归档日志文件。
- RECOVER [AUTOMATIC] DATABASE
- 此命令仅能用于关闭的数据库恢复。
- RECOVER [AUTOMATIC] TABLESPACE <NUMBER> | <NAME>
- 此命令仅能用于打开的数据库恢复。
- RECOVER [AUTOMATIC] DATAFILE <'filename'> | <NAME>
- 此命令既可以用于打开的数据库恢复,也可用于关闭的数据库恢复。
- AUTOMATIC 关键字指示Oracle 数据库自动生成继续执行恢复操作所需的下一归档重做日志文件的名称
RMAN 恢复
- RESTORE命令将数据文件从磁带、磁盘或其它介质上的备份位置检索到磁盘上,并使其可供数据库服务器使用
- RECOVER命令获取已还原的数据文件副本,并将数据库重做日志中记录的更改应用于该副本
- DELETE ARCHIVELOG 选项:在 RECOVER 操作不再需要还原的归档重做日志时从磁盘删除这些日志
使用 Oracle Enterprise Manager进行恢复
维护--->执行恢复
完全恢复与不完全恢复
- 概览
- 完全恢复是将数据库恢复到当前最新状态,包括直至请求恢复时进行的所有已提交的数据更改。
- 不完全恢复是将数据库恢复到请求恢复操作之前的指定的过去时间点。
- 完全恢复过程
- 通过备份还原损坏或丢失的文件
- 根据需要应用增量备份、归档重做日志文件和联机重做日志文件中的更改。在整个过程中会生成还原块。称为前滚
- 此时,还原的数据文件中包含已提交和未提交的更改
- 在应用还原前打开数据库。这是为了提供更高的可用性
- 还原块用于回退任何未提交的更改。有时也称为事务处理恢复。
- 此时,数据文件处于已恢复状态,且与数据库中的其它数据文件一致
- 不完全恢复过程
- 需要
- 恢复点之前生成的所有数据文件的有效脱机或联机备份
- 从备份时间到指定恢复时间的所有归档日志
- 过程
- 从备份还原数据文件
- 从归档重做日志文件应用重做,根据需要包括尽可能多的数据以达到还原点目标
- 数据文件包含一些已提交的事务处理和未提交的事务处理,因为重做可以包含未提交的数据。
- 在应用还原前打开数据库。
- 应用重做时,同时会应用支持还原数据文件的重做。
- 此时,数据文件已恢复到所选择的时间点
- 需要不完全恢复的情况
- 完全恢复由于归档日志文件丢失而失败
- 丢失了数据文件和一个或多个未归档重做日志文件
- 丢失了非多路复用联机重做日志文件
- 使用控制文件的旧副本执行恢复或打开数据库时,必须在 RECOVER DATABASE 命令中指定 USING BACKUP CONTROLFILE 子句
- 类型
- 基于时间的恢复
- 使用 UNTIL TIME子句,可以指定数据库应恢复到的过去的时间点
- 基于取消的恢复
- 在恢复过程中,可以在恢复提示符(而不是日志文件名)下输入 CANCEL 来终止恢复
- 当前重做日志文件或组被损坏,无法用于恢复
- 丢失了进行恢复所需的归档重做日志文件。
- 基于更改的恢复
- 将 UNTIL CHANGE子句用于用户管理的备份
- 将 UNTIL SCN子句用于 RMAN 管理的备份,可以指定要恢复的最后一次提交更改的系统更改号(SCN)。
- 使用UNTIL RESTORE POINT语法并为SCN 指定一个别名,即还原点
- 日志序列恢复
- 通过 UNTIL SEQUENCE 子句指定要用于数据库恢复的最后日志序列号
- 执行用户管理的不完全恢复
- RECOVER [AUTOMATIC] DATABASE option
- AUTOMATIC:自动应用归档和重做日志文件
- option:
- UNTIL TIME 'YYYY-MM-DD:HH24:MI:SS'
- UNTIL CANCEL
- UNTIL CHANGE <integer>
- USING BACKUP CONTROLFILE
- 步骤
- 关闭数据库
- 还原数据文件。如果有足够的空间,则还原至位置 LOG_ARCHIVE_DEST,或使用 ALTER SYSTEM ARCHIVE LOG START TO <位置> 命令或 SET LOGSOURCE <位置> 命令更改位置
- 装载数据库
- 使用RECOVER DATABASE 命令恢复数据库
- 要将数据文件与控制文件和重做日志同步,请使用RESETLOGS选项打开数据库
- 示例
-
SQL> SHUTDOWN IMMEDIATE
$ cp /BACKUP/*.dbf/u01/db01/ORADATA
SQL> STARTUP MOUNT
SQL> RECOVER DATABASE UNTIL TIME '2005-11-28:11:44:00';
SQL> ALTER DATABASE OPEN RESETLOGS; - 使用 RMAN 执行不完全恢复
- 步骤
- 装载数据库
- 分配多个通道以并行执行操作
- 还原所有数据文件
- 使用 UNTIL TIME、UNTIL SEQUENCE 或UNTIL SCN 恢复数据库
- 使用 RESETLOGS 打开数据库
- 基于时间的恢复:示例
-
RMAN> RUN {
allocate channel c1 type DISK;
allocate channel c2 type DISK;
SET UNTIL TIME = '2005-11-28:11:44:00';
RESTORE DATABASE;
RECOVER DATABASE;
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 RESETLOGS;
7> } - 使用EM进行恢复
- 要将整个数据库恢复至某一时间点,请在“Perform Recovery(执行恢复)”页中,选择“Recover to the current time or a previous point-in-time(恢复到当前时间或过去的某个时间
- 点)”选项。然后,单击“Perform Whole Database Recovery(执行整个数据库恢复)”。
- 选择“Restore all datafiles(还原所有数据文件)”以将数据库中的所有数据文件还原到以前的备份状态。还可以从以前的已还原数据文件进行恢复。该方法将使用重做数据以将数
- 据库前滚至某时间点
- 不完全备份和预警日志
- 恢复前后检查预警日志
- 查找错误信息、提示和 SCN
- 确认恢复过程中的各步骤都已成功完成
- 还原点
- 用作 SCN 或特定时间点的别名
- 存储在控制文件中
- 可以与以下各项配合使用
- RECOVER DATABASE
- FLASHBACK DATABASE
- FLASHBACK TABLE
- 示例
-
SQL> CREATE RESTORE POINT before_load;
RMAN> RECOVER DATABASE UNTIL RESTORE POINT before_load; - 最佳方案
- 提前计划和实践方案
- 研究并确认不完全恢复是必要的
- 认真执行所有步骤
- 恢复前后对整个数据库进行备份
- 始终验证恢复是否已成功完成
- 使用还原点
恢复控制文件自动备份
-
RMAN> SHUTDOWN IMMEDIATE;
RMAN> STARTUP NOMOUNT;
RMAN> set dbid = 123456789;
RMAN> RESTORE CONTROLFILE FROM AUTOBACKUP; - spfile也丢失
- 首先设置数据库的 DBID,然后才能使用 RESTORE SPFILE FROM AUTOBACKUP 命令
- 创建新的控制文件
-
SQL> ALTER DATABASE BACKUP CONTROLFILE
TO TRACE;
恢复只读表空间
- 案例 1:要恢复的表空间处于只读状态,且进行最后一次备份时为只读状态。在这种情况下,只需从备份还原表空间。不需要应用任何重做信息。
- 案例 2:要恢复的表空间处于读/写状态,但是进行最后一次备份时为只读状态。在这种情况下,需要从备份还原表空间并应用自表空间变为读/写状态以来的重做信息。
- 案例 3:要恢复的表空间处于只读状态,但是进行最后一次备份时为读/写状态。在表空间变为只读状态后应始终备份该表空间以避免这种情况。但是,如果发生这种情况,则必须从备份还原表空间并恢复到表空间变为只读状态的时刻。
- 只读表空间恢复问题
- 重新创建控制文件
-
-
ALTER DATABASE RENAME FILE 'MISSING00005'
TO '/u01/app/oracle/oradata/orcl/example01.dbf';
ALTER TABLESPACE "EXAMPLE" ONLINE; - 重命名数据文件
- 使用备份控制文件
-