首页 > 代码库 > Oracle 数据恢复指导详解

Oracle 数据恢复指导详解

1.数据恢复指导 :

快速检测、分析和修复故障

最大程度地减少停机故障和运行时故障

将对用户的干扰降到最低

用户界面:
   --EM GUI 界面 (多个路径)
   --RMAN 命令行


支持的数据库配置:

   --单实例

   --非 RAC

   --支持故障转移到备用数据库,但不支持分析和修复备用数据库


数据恢复指导的功能:
在发生错误时,数据恢复指导可自动收集数据故障信息。此外,它还可以主动检查故障。在这种模式下,它有可能在数据库进程发现损坏并指出错误之前就检测和分析数据故障(请注意,修复始终由人控制)。 


数据故障可能会很严重。例如,如果缺少最新的日志文件,则无法启动数据库。一些数据故障(如数据文件中的块损坏)不是灾难性故障,因为它们不会使数据库停机,也不会阻止您启动 Oracle 实例。

数据恢复指导可以处理两种情况:一种情况是您无法启动数据库(因为缺少一些必需的数据库文件,或者这些数据库文件不一致或已损坏),另一种情况是运行时发现文件损坏。

2.数据恢复指导:RMAN 命令行界面

RMAN 命令  操作
LIST FAILURE  列出先前执行的故障评估
ADVISE FAILURE  显示建议的修复选项
REPAIR FAILURE  修复和关闭故障(在同一 RMAN 会话中的 ADVISE 命令后)
CHANGE FAILURE  更改或关闭一个或多个故障

3.列出数据故障

RMAN LIST FAILURE 命令可列出先前执行的故障评估。
--包括新诊断的故障

--删除关闭的故障(默认情况下)

LIST FAILURE

[ ALL | CRITICAL | HIGH | LOW | CLOSED | failnum[,failnum,…] ]

[ EXCLUDE FAILURE failnum[,failnum,…] ][ DETAIL ] 

RMAN> LIST FAILURE;
 

List of Database Failures

=========================
 

Failure ID Priority Status    Time Detected Summary

---------- -------- --------- ------------- -------

142        HIGH     OPEN      21-JUN-07     One or more non-system
                                           
                                            datafiles are missing
 

RMAN LIST FAILURE 命令可列出故障。如果目标实例使用恢复目录,它可以处于 STARTED 模式下,否则必须处于 MOUNTED 模式下。
LIST FAILURE 命令可列出以前执行的评估的结果。重复执行 LIST FAILURE 命令可重新验证所有现有的故障。如果数据库诊断出新的故障(在命令执行之间),则会显示这些新故障。如果用户手动修复故障或临时故障消失,则数据恢复指导会将这些故障从 LIST FAILURE 输出中删除。


了解有关语法的更多内容:

failnum:显示了修复选项的故障数。

ALL:列出所有优先级的故障。

CRITICAL:列出 CRITICAL 优先级和 OPEN 状态的故障。需要立即关注这些故障,因为它们会使整个数据库不可用。

HIGH:列出 HIGH 优先级和 OPEN 状态的故障。这些故障(如归档重做日志缺失)使数据库部分不可用或不可恢复,因此应尽快修复。

LOW:列出 LOW 优先级和 OPEN 状态的故障。低优先级的故障可以等到修复了更重要的故障后再进行修复。

CLOSED:仅列出关闭的故障。
EXCLUDE FAILURE:从列表中排除指定的故障号。

DETAIL:展开合并的故障,列出故障详细资料。例如,如果一个文件中有多个块损坏,则 DETAIL 选项将列出每个块损坏。

4.修复建议

RMAN ADVISE FAILURE 命令:
--语法:
ADVISE FAILURE 

[ ALL | CRITICAL | HIGH | LOW | failnum[,failnum,…] ]

[ EXCLUDE FAILURE failnum [,failnum,…] ]
--显示输入故障列表的摘要(含警告)

--显示手动检查列表

--生成修复脚本(用于自动或手动修复)
. . .

Repair script: /u01/app/oracle/diag/rdbms/orcl/orcl/hm/reco_2979128860.hm

RMAN>

 

RMAN ADVISE FAILURE 命令可显示针对指定故障建议的修复选项。ADVISE FAILURE 命令可打印输入故障概要。该命令会隐式关闭已修复的所有打开的故障。

默认行为(没有使用任何选项时)是对记录在自动诊断资料档案库中优先级为 CRITICAL 和 HIGH 的所有故障提供建议。如果自上次执行 LIST FAILURE 命令后 ADR 中记录了新故障,则在对所有 CRITICAL 和 HIGH 故障提供建议前,该命令将包含一个 WARNING。

可执行两个常规修复选项:无数据丢失修复和数据丢失修复。
数据恢复指导在生成自动修复选项时会生成一个脚本,用于显示 RMAN 计划如何修复故障。如果不希望数据恢复指导自动修复故障,可从该脚本开始执行手动修复。该脚本的 OS 位置将显示在命令输出的末尾。可以检查此脚本,并对其进行自定义(如果需要),还可以手动执行该脚本(例如在审计线索要求建议执行手动操作时)。


5.执行修复

RMAN REPAIR FAILURE 命令:
--在 ADVISE FAILURE 命令之后执行

--修复指定故障

--关闭修复的故障

--语法:
REPAIR FAILURE
 
[PREVIEW]
 
[NOPROMPT]

eg:RMAN> repair failure;

此命令应在同一 RMAN 会话中的 ADVISE FAILURE 命令之后使用。默认情况下(没有指定任何选项时),该命令使用当前会话中上次执行 ADVISE FAILURE 时建议的一个修复选项。如果没有任何修复选项,REPAIR FAILURE 命令将启动隐式 ADVISE FAILURE 命令。 

默认情况下,您需要确认是否执行该命令,因为可能需要花费时间完成大量更改。在执行修复期间,该命令的输出表明正在执行的修复阶段。
修复完成后,该命令会关闭故障。

无法运行多个并发修复会话。但是,可以运行并发 REPAIR … PREVIEW 会话。 


PREVIEW:不执行修复,而是显示先前生成的包含所有修复操作和注释的 RMAN 脚本。
NOPROMPT:不要求确认。

6.分类(和关闭)故障
RMAN CHANGE FAILURE 命令:
--更改故障优先级(CRITICAL 除外)

--关闭一个或多个故障  

 

RMAN> change failure 5 priority low;

List of Database Failures

=========================

Failure ID Priority Status    Time Detected Summary

---------- -------- --------- ------------- -------

5          HIGH     OPEN      20-DEC-06     one or more datafiles are missing


Do you really want to change the above failures (enter YES or NO)? yes
changed 1 failures to LOW priority


此命令用于更改故障优先级或关闭一个或多个故障。 

语法:
CHANGE FAILURE

{ ALL | CRITICAL | HIGH | LOW | failnum[,failnum,…] }

[ EXCLUDE FAILURE failnum[,failnum,…] ]

{ PRIORITY {CRITICAL | HIGH | LOW} | 
CLOSE } -- 将故障的状态更改为关闭 

[ NOPROMPT ] -- 不要求用户确认 


只能将故障优先级从 HIGH 更改为 LOW,以及从 LOW 更改为 HIGH。更改 CRITICAL 优先级会出现错误。(将故障的优先级从 HIGH 更改为 LOW 的一个原因是避免该故障显示在 LIST FAILURE 命令的默认输出列表中。例如,如果损坏的块具有 HIGH 优先级,且该块位于很少使用的表空间中时,您可能希望将其临时更改为 LOW。)

修复故障后,将隐式关闭打开的故障。但是,也可以显式关闭故障。这需要重新评估其它所有打开的故障,因为其中的某些故障会因关闭此故障而变得不相关。

默认情况下,该命令要求用户确认请求的更改。

7.数据恢复指导视图
查询动态数据字典视图:
V$IR_FAILURE:列出所有故障,其中包括已关闭的故障(LIST FAILURE 命令的结果)
V$IR_MANUAL_CHECKLIST:列出手动建议(ADVISE FAILURE 命令的结果)
V$IR_REPAIR:列出修复(ADVISE FAILURE 命令的结果) 
V$IR_FAILURE_SET:交叉引用故障和建议标识符

使用示例:假定您需要显示在 2007 年 6 月 21 日检测到的所有故障。
SELECT * FROM v$ir_failure
WHERE trunc (time_detected) = ‘21-JUN-2007‘;

(根据页面调整输出格式)
 
FAILURE_ID  PARENT_ID CHILD_COUNT CLASS_NAME              TIME_DETE MODIFIED    DESCRIPTION    IMPACTS           PRIORITY STATUS
142          0           0 PERSISTENT_DATA      21-JUN-07 21-JUN-07 One or more non-system datafiles are missing See impact for individual child failures     HIGH     CLOSED
145        142           0 PERSISTENT_DATA               21-JUN-07 21-JUN-07 Datafile 4: ‘/u01/app/oracle/oradata/orcl/users01.dbf‘ is missing
Some objects in tablespace USERS might be unavailable    HIGH     CLOSED
       151        142           0 PERSISTENT_DATA        21-JUN-07 21-JUN-07 Datafile 5: ‘/u01/app/oracle/oradata/orcl/example01.dbf‘ is missing
Some objects in tablespace EXAMPLE might be unavailable  HIGH     CLOSED

Oracle 数据恢复指导详解