一.Data Recovery Advisor(DRA) 说明
1.1 DRA 说明
DRA在遇到错误时会自动收集数据故障信息。此外,它还能预先检查故障。在此模式中,它可以在数据库进程发现损坏并发送错误消息之前检测和分析数据故障(请注意,修复始终在人为控制之下进行)。
数据故障可能非常严重。例如,如果缺少最新的日志文件,则无法启动数据库。一些数据故障(如数据文件中的块损坏)不是灾难性故障,因为它们不会使数据库停机,也不会阻止您启动Oracle 实例。数据恢复指导可处理以下两种情况:一种情况是您无法启动数据库(因为缺少一些必需的数据库文件,或者这些数据库文件不一致或已损坏),另一种情况是运行时发现文件损坏。
解决严重数据故障的首选方法是首先将故障转移至备用数据库(前提是在Data Guard 配置下),这样用户就可以尽快恢复联机。然后,需要修复数据故障的主要原因,但幸运的是,此操作不会影响用户。
1.2 自动诊断工作流
Oracle Database11g 中的自动诊断工作流可为您执行工作流步骤。使用数据恢复指导,您只需启动建议和修复。
1. 健康状况监视器会自动执行检查,并将故障及其故障现象作为“查找结果”记录到自动诊断资料档案库(ADR) 中。
2. 数据恢复指导将查找结果与故障合并在一起。它列出了先前执行的评估结果,其中包含故障严重程度(严重或高)。
3. 如果您要求系统提供有关故障的修复建议,数据恢复指导会将故障映射到自动和手动修复选项,检查基本可行性,并为您提供修复建议。
4. 可以选择手动执行修复或者请求数据恢复指导为您执行此操作。
5. 除了健康状况监视器和数据恢复指导自动执行的主要“被动”检查之外,Oracle 还建议使用VALIDATE 命令进行“预防性”检查。
1.3 RMAN中使用DRA 步骤
Oracle的OEM已经很智能,这些操作在OEM上都可以进行,我们这里只看使用RMAN 命令来实现的步骤。
如果怀疑或已知道数据库出现故障,则可使用LIST FAILURE 命令获得关于这些故障的信息。可以列出所有故障或部分故障并以多种方式限制输出。故障由故障号进行唯一标识。请注意,这些故障号不是连续的,因此它们之间的间隔没有任何意义。
ADVISE FAILURE 命令将显示为指定故障建议的修复选项。它可打印输入故障概要并隐式关闭已修复的所有打开的故障。没有使用任何选项时,默认行为是对记录在ADR 中优先级为CRITICAL 和HIGH的所有故障提供建议。
在同一RMAN 会话中REPAIR FAILURE 命令在ADVISE FAILURE 命令后使用。默认情况下,该命令使用当前会话中上次执行ADVISEFAILURE 命令时建议的一个修复选项。如果没有任何修复选项,REPAIR FAILURE 命令将启动隐式ADVISE FAILURE 命令。修复完成后,该命令会关闭故障。
CHANGE FAILURE 命令将更改故障优先级或关闭一个或多个故障。仅可以更改HIGH 或LOW 故障优先级。修复故障后,将隐式关闭打开的故障。但是,也可以显式关闭故障。
1.3.1 列出数据故障
RMAN LISTFAILURE 命令可列出故障。如果目标实例使用恢复目录,它可以处于STARTED 模式下,否则必须处于MOUNTED 模式下。LIST FAILURE 命令不启动诊断新故障检查;它将列出先前执行的评估结果。重复执行LIST FAILURE 命令将重新验证所有现有的故障。
如果数据库诊断出新的故障(在命令执行之间),则会显示这些新故障。
如果用户手动修复故障或临时故障消失,则数据恢复指导会将这些故障从LIST FAILURE 输出中删除。
以下是语法说明:
(1) failnum:为其显示修复选项的故障数。
(2) ALL:列出所有优先级的故障。
(3) CRITICAL:列出优先级为CRITICAL 且处于OPEN 状态的故障。这些故障使整个数据库不可用(如控制文件缺失),因此需要立即引起注意。
(4) HIGH:列出优先级为HIGH 且处于OPEN状态的故障。这些故障使数据库部分不可用或不可恢复,因此应尽快修复(如归档重做日志缺失)。
(5) LOW:列出优先级为LOW 且处于OPEN状态的故障。低优先级的故障可以等到修复了更重要的故障后再进行修复。
(6) CLOSED:仅列出关闭的故障。
(7) EXCLUDE FAILURE:从列表中排除指定的故障号。
(8) DETAIL:通过展开合并的故障列出故障。例如,如果一个文件中有多个块损坏,则DETAIL选项将列出每个块损坏。
如:
RMAN> LIST FAILURE;
RMAN> LIST FAILURE DETAIL;
1.3.2 修复建议
RMAN ADVISE FAILURE 命令可显示指定故障的建议修复选项。如果从Enterprise Manager 中执行此命令,则Data Guard 将显示一个修复选项(但是,如果直接从RMAN 命令行执行此命令,则Data Guard 不会显示修复选项)。ADVISE FAILURE 命令可打印输入故障概要。该命令会隐式关闭已修复的所有打开的故障。
没有使用任何选项时,默认行为是对记录在自动诊断资料档案库(ADR) 中优先级为CRITICAL 和HIGH 的所有故障提供建议。如果自上次执行LIST FAILURE 命令后ADR 中记录了新故障,则在对所有CRITICAL 和HIGH 故障提供建议前,该命令将包含一个WARNING。
执行两个常规修复选项:无数据丢失修复和数据丢失修复。
DRA在生成自动修复选项时会生成一个脚本,用于显示RMAN 计划如何修复故障。如果不希望数据恢复指导自动修复故障,可从该脚本开始执行手动修复。该脚本的操作系统(OS) 位置将显示在命令输出的末尾。可以检查此脚本,并对其进行自定义(如果需要),还可以手动执行该脚本(例如在审计线索要求建议执行手动操作时)。
RMANADVISE FAILURE 命令有以下用途:
(1) 显示输入故障列表概要
(2) 包括警告(如果ADR 中出现新故障)
(3) 显示手动核对清单
(4) 列出一个建议的修复选项
(5) 生成修复脚本(用于自动或手动修复)
. . .
Repair script:
/u01/app/oracle/diag/rdbms/orcl/orcl/hm/reco_2979128860.hm
RMAN>
语法:
ADVISE FAILURE
[ ALL | CRITICAL | HIGH | LOW |failnum[,failnum,…] ]
[ EXCLUDE FAILURE failnum [,failnum,…] ]
1.3.3 执行修复
此命令应在同一RMAN 会话中的ADVISE FAILURE 命令后使用。默认情况下(没有选项),该命令使用当前会话中上次执行ADVISE FAILURE 时建议的一个修复选项。如果没有任何修复选项,REPAIRFAILURE 命令将启动隐式ADVISE FAILURE 命令。
默认情况下,您需要确认是否执行该命令,因为可能需要花费时间完成大量更改。在执行修复期间,该命令的输出将表明正在执行的修复阶段。
修复完成后,该命令会关闭故障。
语法:
REPAIR FAILURE
[PREVIEW]
[NOPROMPT]
无法运行多个并发修复会话。但是,允许并发REPAIR … PREVIEW 会话。
(1) PREVIEW 表示:不执行修复,而是显示先前生成的包含所有修复操作和注释的RMAN 脚本。
(2) NOPROMPT 表示:不要求确认。
修复故障示例
RMAN> REPAIR FAILURE PREVIEW;
RMAN> REPAIR FAILURE;
RMANREPAIR FAILURE 命令有以下用途:
(1) 遵循ADVISE FAILURE 命令
(2) 修复指定的故障
(3) 关闭已修复的故障
1.4 分类(和关闭)故障
CHANGE FAILURE 命令用于更改故障优先级或关闭一个或多个故障。
语法:
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。)
修复故障后,将隐式关闭打开的故障。但是,也可以显式关闭故障。这需要重新评估其它所有打开的故障,因为其中的某些故障会因故障关闭而变得不相关。
默认情况下,该命令要求用户确认请求的更改。
1.5 DRA相关的视图
查询动态数据字典视图:
(1) V$IR_FAILURE:所有故障的列表,包括已关闭的故障(LIST FAILURE 命令的结果)
(2) V$IR_MANUAL_CHECKLIST:手动建议的列表(ADVISE FAILURE命令的结果)
(3) V$IR_REPAIR:修复列表(ADVISE FAILURE 命令的结果)
(4) V$IR_FAILURE_SET:故障和建议标识符的交叉引用
1.6 预防性检查
对于非常重要的数据库,可能需要执行其它预防性检查(可以在每天的低峰时段执行)。
可通过健康状况监视器或使用RMANVALIDATE 命令安排定期的健康状况检查。通常,如果被动检查在数据库组件中检测到故障,则可能需要对受影响的组件执行更全面的检查。
RMAN VALIDATE DATABASE 命令用于调用对数据库及其组件的健康状况检查。它扩展了现有的VALIDATE BACKUPSET 命令。在验证期间检测到的所有问题都会显示出来,这些问题进而会启动故障评估。如果检测到故障,则该故障会作为查找结果记录到ADR中。可以使用LIST FAILURE 命令查看资料档案库中记录的所有故障。
VALIDATE 命令支持对单个备份集和数据块进行验证。在物理损坏中,数据库根本无法识别块。在逻辑损坏中,块的内容在逻辑上不一致。默认情况下,VALIDATE 命令只检查物理损坏。也可以指定CHECK LOGICAL 检查逻辑损坏。
块损坏可分为块间损坏和块内损坏。在块内损坏中,块本身发生损坏,可以是物理损坏也可以是逻辑损坏。在块间损坏中,块与块之间发生的损坏只能是逻辑损坏。VALIDATE 命令只检查块内损坏。
调用对数据库及其组件的预防性健康状况检查:
(1) 健康状况监视器或RMAN VALIDATE DATABASE 命令
(2) 检查逻辑和物理损坏
(3) 在ADR 中记录查找结果
二.DRA 示例
2.1 创建故障
SQL> select file_name fromdba_data_files;
FILE_NAME
--------------------------------------------------------------------------------
/u01/app/oracle/oradata/anqing/dave01.dbf
/u01/app/oracle/oradata/anqing/users01.dbf
/u01/app/oracle/oradata/anqing/undotbs01.dbf
/u01/app/oracle/oradata/anqing/sysaux01.dbf
/u01/app/oracle/oradata/anqing/system01.dbf
/u01/app/oracle/oradata/anqing/example01.dbf
--破坏users01.dbf 数据文件:
[oracle@dave anqing]$ pwd
/u01/app/oracle/oradata/anqing
[oracle@dave anqing]$ ll users01.dbf
-rw-r----- 1 oracle oinstall 34086912 10??11 22:52 users01.dbf
[oracle@dave anqing]$ echo > users01.dbf
[oracle@dave anqing]$ ll users01.dbf
-rw-r----- 1 oracle oinstall 1 10?? 1122:55 users01.dbf
--在users表空间上创建表:anqing
SQL> create table anqing(id number)tablespace users;
create table anqing(id number) tablespaceusers
*
ERROR at line 1:
ORA-01115: IO error reading block fromfile (block # )
ORA-01110: data file 4:‘/u01/app/oracle/oradata/anqing/users01.dbf‘
ORA-27072: File I/O error
Additional information: 4
Additional information: 3
--错误信息会写入ADR,验证:
adrci> show homepath
ADR Homes:
diag/rdbms/dave/dave
diag/tnslsnr/dave/listener
adrci> set homepath diag/rdbms/dave/dave
adrci> show alert -tail
…
2012-10-11 22:53:39.334000 +08:00
Starting background process SMCO
SMCO started with pid=33, OS id=11016
2012-10-1122:56:34.746000 +08:00
Checker run found 1 newpersistent data failures
2.2 RMAN LIST FAILURE
[oracle@dave ~]$rman target /
Recovery Manager: Release 11.2.0.3.0 -Production on Thu Oct 11 23:06:52 2012
Copyright (c) 1982, 2011, Oracle and/or itsaffiliates. All rights reserved.
connected to target database: DAVE(DBID=856255083)
RMAN> list failure;
using target database control file insteadof recovery catalog
List of Database Failures
=========================
Failure ID Priority Status Time Detected Summary
---------- -------- --------- --------------------
282 HIGH OPEN 11-OCT-12 One or morenon-system datafiles are corrupt
注意:
Listfailure 命令会显示任何open 状态的failures,并会优先显示critical 或high的failure,如果没有类似的failure,那么会显示low 的failures。
2.3 RMAN ADVISE FAILURE
RMAN> advise failure;
List of Database Failures
=========================
Failure ID Priority Status Time Detected Summary
---------- -------- --------- --------------------
282 HIGH OPEN 11-OCT-12 One or more non-system datafiles arecorrupt
analyzing automatic repair options; thismay take some time
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=18 device type=DISK
analyzing automatic repair options complete
Mandatory Manual Actions
========================
no manual actions available
Optional Manual Actions
=======================
no manual actions available
Automated Repair Options
========================
Option Repair Description
------ ------------------
1 Restore and recover datafile 4
Strategy: The repair includes complete media recovery with no data loss
Repair script: /u01/app/oracle/diag/rdbms/dave/dave/hm/reco_1992614502.hm
--这里能恢复的前提是有有效的RMAN 备份,否则这里不能进行restore。
--这个是恢复的脚本:可以手动执行,也可以使用自动执行:
[oracle@dave ~]$cat/u01/app/oracle/diag/rdbms/dave/dave/hm/reco_1992614502.hm
#restore and recover datafile
restore datafile 4;
recover datafile 4;
sql ‘alter database datafile 4 online‘;
2.4 RMAN REPAIR FAILURE
RMAN> repair failure preview;
Strategy: The repair includes completemedia recovery with no data loss
Repair script:/u01/app/oracle/diag/rdbms/dave/dave/hm/reco_1992614502.hm
contents of repair script:
#restore and recover datafile
restore datafile 4;
recover datafile 4;
sql ‘alter database datafile 4 online‘;
--默认情况下,repair failure 命令会提示用户确认修复,这里我们使用noprompt跳过验证:
RMAN> repair failure noprompt;
Strategy: The repair includes completemedia recovery with no data loss
Repair script:/u01/app/oracle/diag/rdbms/dave/dave/hm/reco_1992614502.hm
contents of repair script:
#restore and recover datafile
restore datafile 4;
recover datafile 4;
sql ‘alter database datafile 4 online‘;
executing repair script
Starting restore at 11-OCT-12
using channel ORA_DISK_1
channel ORA_DISK_1: starting datafilebackup set restore
channel ORA_DISK_1: specifying datafile(s)to restore from backup set
channel ORA_DISK_1: restoring datafile00004 to /u01/app/oracle/oradata/anqing/users01.dbf
channel ORA_DISK_1: reading from backuppiece /u01/backup/ave_lev0_0bnnh6co_1_1_20121011
channel ORA_DISK_1: piecehandle=/u01/backup/ave_lev0_0bnnh6co_1_1_20121011 tag=DAVE_LEV0
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: restore complete,elapsed time: 00:00:07
Finished restore at 11-OCT-12
Starting recover at 11-OCT-12
using channel ORA_DISK_1
starting media recovery
media recovery complete, elapsed time:00:00:01
Finished recover at 11-OCT-12
sql statement: alter database datafile 4online
repair failure complete
database opened
RMAN>
2.5 RMAN CHANGE FAILURE
Change failure 命令可以改变failure的级别,在2.2 节,我们的failure级别是high。如果有一个failure,在我们没有修复之前,或者暂时不想修复,那么我们就可以调低它的级别,级别的修改不影响系统的正常使用。
如:
RMAN> CHANGEFAILURE 282 PRIORITY LOW;
2.6 验证 VALIDATE
# Check for physical corruption of alldatabase files.
VALIDATE DATABASE;
# Check for physical and logical corruptionof a tablespace.
VALIDATE CHECK LOGICAL TABLESPACE USERS;
# Check for physical and logical corruptionof a datafile.
VALIDATE CHECK LOGICAL DATAFILE 4;
# Check for physical corruption of allarchived redo logs files.
VALIDATE ARCHIVELOG ALL;
# Check for physical and logical corruptionof the controlfile.
VALIDATE CHECK LOGICAL CURRENT CONTROLFILE;
# Check for physical and logical corruptionof a specific backupset.
VALIDATE CHECK LOGICAL BACKUPSET 3;
# Check for physical corruption of files tobe backed up.
BACKUP VALIDATE DATABASE ARCHIVELOG ALL;
# Check for physical and logical corruptionof files to be backed up.
BACKUP VALIDATE CHECK LOGICAL DATABASEARCHIVELOG ALL;
# Check for physical corruption of files tobe restored.
RESTORE VALIDATE DATABASE;
# Check for physical and logical corruptionof files to be restored.
RESTORE VALIDATE CHECK LOGICAL DATABASE;
Oracle 11g 新特性 -- RMAN Data Recovery Advisor(DRA) 说明,布布扣,bubuko.com