首页  >  文章  >  数据库  >  Oracle数据恢复顾问(DRA)

Oracle数据恢复顾问(DRA)

WBOY
WBOY原创
2016-06-07 15:24:501252浏览

Change Failure - 使你可以改变故障的状态。 下面通过两个例子来说明DRA工具的用法 在测试之前使用RMAN对数据库进行全备 场景一、模拟控制文件丢失 关闭数据库,mv掉controlfile [ora_tst@test rman]$ mv /u01/oracle/TEST/db/apps_st/data/cntrl01.dbf /u01

Change Failure - 使你可以改变故障的状态。

下面通过两个例子来说明DRA工具的用法

在测试之前使用RMAN对数据库进行全备

场景一、模拟控制文件丢失

关闭数据库,mv掉controlfile

[ora_tst@test rman]$ mv /u01/oracle/TEST/db/apps_st/data/cntrl01.dbf /u01/oracle/TEST/db/apps_st/data/cntrl01.dbf.bak

启动数据库,报错

SQL> startup
ORACLE instance started.

Total System Global Area 1068937216 bytes
Fixed Size                  2166536 bytes
Variable Size             427819256 bytes
Database Buffers          624951296 bytes
Redo Buffers               14000128 bytes
ORA-00205: error in identifying control file, check alert log for more info

告警日志中错误提示:

ALTER DATABASE   MOUNT
ORA-00210: cannot open the specified control file
ORA-00202: control file: '/u01/oracle/TEST/db/apps_st/data/cntrl01.dbf'
ORA-27037: unable to obtain file status
Linux-x86_64 Error: 2: No such file or directory

很容易可以发现是由于cntrl01.dbf丢失导致数据库无法mount

下面通过DRA来检测故障,并修复

[ora_tst@test ~]$ rman target /

Recovery Manager: Release 11.1.0.7.0 - Production on Mon Apr 21 13:35:09 2014

Copyright (c) 1982, 2007, Oracle.  All rights reserved.

connected to target database: TEST (not mounted)

RMAN> list failure;

using target database control file instead of recovery catalog
List of Database Failures
=========================

Failure ID Priority Status    Time Detected Summary
---------- -------- --------- ------------- -------
782        CRITICAL OPEN      21-APR-14     Control file /u01/oracle/TEST/db/apps_st/data/cntrl01.dbf is missing

通过list failure命令可以发现故障所在,使用list failure ### detail;  ( where ### equlas the failure number)可以查看故障的详细信息。

RMAN> list failure 782 detail;

List of Database Failures
=========================

Failure ID Priority Status    Time Detected Summary
---------- -------- --------- ------------- -------
782        CRITICAL OPEN      21-APR-14     Control file /u01/oracle/TEST/db/apps_st/data/cntrl01.dbf is missing
  Impact: Database cannot be mounted

下面可以通过advise failure;命令让Oracle告诉我们遇到这个故障,应该怎么做

RMAN> advise failure;

List of Database Failures
=========================

Failure ID Priority Status    Time Detected Summary
---------- -------- --------- ------------- -------
782        CRITICAL OPEN      21-APR-14     Control file /u01/oracle/TEST/db/apps_st/data/cntrl01.dbf is missing
  Impact: Database cannot be mounted

analyzing automatic repair options; this may take some time
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=383 device type=DISK
RMAN-06495: must explicitly specify DBID with SET DBID command
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      Use a multiplexed copy to restore control file /u01/oracle/TEST/db/apps_st/data/cntrl01.dbf 
  Strategy: The repair includes complete media recovery with no data loss
  Repair script: /u01/oracle/TEST/db/tech_st/11.1.0/admin/TEST_test/diag/rdbms/test/TEST/hm/reco_2401635629.hm

advise failure命令提示,我们可以通过拷贝冗余的controlfile来恢复出cntrl01.dbf,并且Oracle在/u01/oracle/TEST/db/tech_st/11.1.0/admin/TEST_test/diag/rdbms/test/TEST/hm/reco_2401635629.hm中给出具体的恢复脚本

恢复脚本,我们还可以通过repair failure preview命令来获得

RMAN> repair failure preview;

Strategy: The repair includes complete media recovery with no data loss
Repair script: /u01/oracle/TEST/db/tech_st/11.1.0/admin/TEST_test/diag/rdbms/test/TEST/hm/reco_2401635629.hm

contents of repair script:
   # restore control file using multiplexed copy
   restore controlfile from '/u01/oracle/TEST/db/apps_st/data/cntrl02.dbf';
   sql 'alter database mount';

Oracle提示我们运行

   restore controlfile from '/u01/oracle/TEST/db/apps_st/data/cntrl02.dbf';
   sql 'alter database mount';

命令来恢复cntrl01.dbf

执行上述命令

RMAN> restore controlfile from '/u01/oracle/TEST/db/apps_st/data/cntrl02.dbf';

Starting restore at 21-APR-14
using channel ORA_DISK_1

channel ORA_DISK_1: copied control file copy
output file name=/u01/oracle/TEST/db/apps_st/data/cntrl01.dbf
output file name=/u01/oracle/TEST/db/apps_st/data/cntrl02.dbf
output file name=/u01/oracle/TEST/db/apps_st/data/cntrl03.dbf
Finished restore at 21-APR-14

RMAN> sql 'alter database mount';

sql statement: alter database mount
released channel: ORA_DISK_1

这里我是手工执行的脚本,也可以通过

RMAN> repair failure;

来自动修复故障。

数据库起到了mount状态,说明故障修复成功。

RMAN> sql 'alter database open';

sql statement: alter database open

场景二、数据文件丢失

关闭数据库

[ora_tst@test trace]$ mv /u01/oracle/TEST/db/apps_st/data/a_txn_data02.dbf /u01/oracle/TEST/db/apps_st/data/a_txn_data02.dbf.bak

SQL> startup
ORA-32004: obsolete and/or deprecated parameter(s) specified
ORACLE instance started.

Total System Global Area 1068937216 bytes
Fixed Size                  2166536 bytes
Variable Size             427819256 bytes
Database Buffers          624951296 bytes
Redo Buffers               14000128 bytes
Database mounted.
ORA-01157: cannot identify/lock data file 401 - see DBWR trace file
ORA-01110: data file 401: '/u01/oracle/TEST/db/apps_st/data/a_txn_data02.dbf'

启动数据库时报错,查看告警日志,如下:

ALTER DATABASE OPEN
Errors in file /u01/oracle/TEST/db/tech_st/11.1.0/admin/TEST_test/diag/rdbms/test/TEST/trace/TEST_dbw0_27581.trc:
ORA-01157: cannot identify/lock data file 401 - see DBWR trace file
ORA-01110: data file 401: '/u01/oracle/TEST/db/apps_st/data/a_txn_data02.dbf'
ORA-27037: unable to obtain file status
Linux-x86_64 Error: 2: No such file or directory

下面通过DRA来查看故障,并解决

RMAN> list failure;

using target database control file instead of recovery catalog
List of Database Failures
=========================

Failure ID Priority Status    Time Detected Summary
---------- -------- --------- ------------- -------
825        HIGH     OPEN      21-APR-14     One or more non-system datafiles are missing

RMAN> list failure 825 detail;

List of Database Failures
=========================

Failure ID Priority Status    Time Detected Summary
---------- -------- --------- ------------- -------
825        HIGH     OPEN      21-APR-14     One or more non-system datafiles are missing
  Impact: See impact for individual child failures
  List of child failures for parent failure ID 825
  Failure ID Priority Status    Time Detected Summary
  ---------- -------- --------- ------------- -------
  828        HIGH     OPEN      21-APR-14     Datafile 401: '/u01/oracle/TEST/db/apps_st/data/a_txn_data02.dbf' is missing
    Impact: Some objects in tablespace APPS_TS_TX_DATA might be unavailable

通过命令很明显的可以发现故障所在。

RMAN> advise failure;

List of Database Failures
=========================

故障 ID 优先级状态    检测时间摘要
---------- -------- --------- ------------- ----------
825        高     OPEN      21-APR-14     一个或多个非系统数据文件丢失
  影响:查看单个子项失败的影响
  父故障 ID 825
的子故障列表   故障 ID 优先级状态    检测时间摘要
  ---------- -------- --------- ------------- ----------
  828        高     打开      21-APR-14     数据文件 401:缺少“/u01/oracle/TEST/db/apps_st/data/a_txn_data02.dbf”
    影响:表空间 APPS_TS_TX_DATA 中的某些对象可能不可用

分析自动修复选项;这可能需要一些时间
分配的通道:ORA_DISK_1
通道 ORA_DISK_1: SID=382 设备类型=DISK
自动修复选项分析完成

强制手动操作
========================
没有可用的手动操作

可选手动操作
=======================
1. 如果文件 /u01/oracle/TEST/db/apps_st/data/a_txn_data02.dbf 被无意重命名或移动,请将其恢复
2. 如果备用数据库可用,则考虑 Data Guard 切换或故障转移

自动修复选项
========================
选项修复说明
------ ------------------
1      恢复和恢复数据文件 401 
  策略:修复包括完全介质恢复,不会丢失数据
  修复脚本:/u01/oracle/TEST/db/tech_st/11.1.0/admin/TEST_test/diag/rdbms/test/TEST/hm/reco_556356707.hm

Oracle告诉我们/u01/oracle/TEST/db/apps_st/data/a_txn_data02.dbf文件已重命名或者移动需要恢复,恢复并恢复数据文件401。

RMAN>修复失败预览;

策略:修复包括完全介质恢复,不丢失数据
修复脚本:/u01/oracle/TEST/db/tech_st/11.1.0/admin/TEST_test/diag/rdbms/test/TEST/hm/reco_556356707.hm

修复脚本内容:
   # 恢复和恢复数据文件
   恢复数据文件 401;
   恢复数据文件 401;

可通过

   恢复数据文件 401;
   恢复数据文件 401;

来恢复数据文件401。本次测试通过修复失败;命令来自动修改故障

RMAN>修复失败;

 策略:修复包括完整的介质恢复,不会丢失数据
修复脚本:/u01/oracle/TEST/db/tech_st/11.1.0/admin/TEST_test/diag/rdbms/test/TEST/hm/reco_556356707.hm

修复脚本内容:
   # 恢复和恢复数据文件
   恢复数据文件 401;
   恢复数据文件 401;

您确实要执行上述修复(输入 YES 或 NO)吗?是的
“是”是无效回复 - 请重新输入。

您确实要执行上述修复(输入 YES 或 NO)吗?是的
执行修复脚本

2014 年 4 月 21 日开始恢复
使用通道 ORA_DISK_1

通道 ORA_DISK_1:开始数据文件备份集恢复
通道 ORA_DISK_1:指定要从备份集恢复的数据文件
通道 ORA_DISK_1:将数据文件 00401 恢复到 /u01/oracle/TEST/db/apps_st/data/a_txn_data02.dbf
通道 ORA_DISK_1:从备份片 /u01/oracle/TEST/db/tech_st/11.1.0/dbs/0ep69g7a_1_1
读取 通道 ORA_DISK_1:片段句柄=/u01/oracle/TEST/db/tech_st/11.1.0/dbs/0ep69g7a_1_1 标签=TAG20140421T110305
通道 ORA_DISK_1:恢复备份片 1
通道 ORA_DISK_1:恢复完成,已用时间:00:05:35
于 2014 年 4 月 21 日完成恢复

2014 年 4 月 21 日开始恢复
使用通道 ORA_DISK_1

开始媒体恢复

线程 1 的序列号为 22 的归档日志已作为文件 /u01/PROD/db/apps_st/data/archive/ARC1_22_825013351.arc
存储在磁盘上 通道 ORA_DISK_1:开始将存档日志恢复到默认目标
通道 ORA_DISK_1:恢复存档日志
归档日志线程=1 序列=21
通道 ORA_DISK_1:从备份片 /u01/oracle/TEST/db/tech_st/11.1.0/dbs/0fp69laa_1_1
读取 通道 ORA_DISK_1:片段句柄=/u01/oracle/TEST/db/tech_st/11.1.0/dbs/0fp69laa_1_1 标签=TAG20140421T123001
通道 ORA_DISK_1:恢复备份片 1
通道 ORA_DISK_1:恢复完成,已用时间:00:00:01
归档日志文件名=/u01/PROD/db/apps_st/data/archive/ARC1_21_825013351.arc 线程=1 序列=21
媒体恢复完成,已用时间:00:00:01
2014 年 4 月 21 日完成恢复
修复故障完成

您想打开数据库吗(输入YES或NO)?是的
数据库已打开

 

场景三、日志组丢失

关闭数据库

删除非当前日志组所有的日志文件

[ora_tst@test 跟踪]$ rm -f /u01/oracle/TEST/db/apps_st/data/log01b.dbf

[ora_tst@test 跟踪]$ rm -f /u01/oracle/TEST/db/apps_st/data/log01a.dbf

SQL>启动
ORA-32004: 指定了已过时和/或已弃用的参数
ORACLE 实例已启动。

系统全局区域总计 1068937216 字节
固定大小                  2166536 字节
可变大小             427819256 字节
数据库缓冲区          624951296 字节
重做缓冲区               14000128 字节
数据库已安装。
ORA-00313: 线程 1 的日志组 1 的成员打开失败
ORA-00312: 在线日志 1 线程 1: '/u01/oracle/TEST/db/apps_st/data/log01b.dbf'
ORA-27037: 无法获取文件状态
Linux-x86_64 错误:2:没有这样的文件或目录
附加信息:3
ORA-00312: 在线日志 1 线程 1: '/u01/oracle/TEST/db/apps_st/data/log01a.dbf'
ORA-27037: 无法获取文件状态
Linux-x86_64 错误:2:没有这样的文件或目录
附加信息:3

启动数据库时报错

使用DRA修复上述故障

RMAN>列表失败;

使用目标数据库控制文件而不是恢复目录
数据库故障列表
=========================

故障 ID 优先级状态    检测时间摘要
---------- -------- --------- ------------- ----------
999        严重打开      21-APR-14     重做日志组 1 不可用
1005       高     打开      21-APR-14     重做日志文件 /u01/oracle/TEST/db/apps_st/data/log01a.dbf 丢失
1002       高     打开      21-APR-14     重做日志文件 /u01/oracle/TEST/db/apps_st/data/log01b.dbf 丢失

RMAN>建议失败;

数据库故障列表
=========================

故障 ID 优先级状态    检测时间摘要
---------- -------- --------- ------------- ----------
999        严重打开      21-APR-14     重做日志组 1 不可用
1005       高     打开      21-APR-14     重做日志文件 /u01/oracle/TEST/db/apps_st/data/log01a.dbf 丢失
1002       高     打开      21-APR-14     重做日志文件 /u01/oracle/TEST/db/apps_st/data/log01b.dbf 丢失

分析自动修复选项;这可能需要一些时间
分配的通道:ORA_DISK_1
通道 ORA_DISK_1: SID=381 设备类型=DISK
自动修复选项分析完成

强制手动操作
========================
没有可用的手动操作

可选手动操作
=======================
1. 如果文件 /u01/oracle/TEST/db/apps_st/data/log01a.dbf 被无意重命名或移动,请将其恢复
2. 如果文件 /u01/oracle/TEST/db/apps_st/data/log01b.dbf 被无意重命名或移动,请恢复它
3. 如果备用数据库可用,则考虑 Data Guard 切换或故障转移

自动修复选项
========================
选项修复说明
------ ------------------
1      执行不完整的数据库恢复至 SCN 5965141836565 
  策略:修复包括时间点恢复,但会丢失一些数据
  修复脚本:/u01/oracle/TEST/db/tech_st/11.1.0/admin/TEST_test/diag/rdbms/test/TEST/hm/reco_3499717585.hm

RMAN>修复失败预览;

策略:修复包括时间点恢复,但会丢失一些数据
修复脚本:/u01/oracle/TEST/db/tech_st/11.1.0/admin/TEST_test/diag/rdbms/test/TEST/hm/reco_3499717585.hm

修复脚本内容:
   # 数据库时间点恢复
   恢复数据库直到scn 5965141836565;
   恢复数据库直到scn 5965141836565;
   更改数据库打开重置日志;

RMAN>修复失败;

策略:修复包括时间点恢复,但会丢失一些数据
修复脚本:/u01/oracle/TEST/db/tech_st/11.1.0/admin/TEST_test/diag/rdbms/test/TEST/hm/reco_3499717585.hm

修复脚本内容:
   # 数据库时间点恢复
   恢复数据库直到scn 5965141836565;
   恢复数据库直到scn 5965141836565;
   更改数据库打开重置日志;

您确实要执行上述修复(输入 YES 或 NO)吗?是的
执行修复脚本

2014 年 4 月 21 日开始恢复
使用通道 ORA_DISK_1

通道 ORA_DISK_1:开始数据文件备份集恢复
通道 ORA_DISK_1:指定要从备份集恢复的数据文件
通道 ORA_DISK_1:将数据文件 00001 恢复到 /u01/oracle/TEST/db/apps_st/data/system01.dbf
通道 ORA_DISK_1:将数据文件 00002 恢复到 /u01/oracle/TEST/db/apps_st/data/system02.dbf
通道 ORA_DISK_1:将数据文件 00003 恢复到 /u01/oracle/TEST/db/apps_st/data/system03.dbf
通道 ORA_DISK_1:将数据文件 00004 恢复到 /u01/oracle/TEST/db/apps_st/data/system04.dbf
通道 ORA_DISK_1:将数据文件 00005 恢复到 /u01/oracle/TEST/db/apps_st/data/system05.dbf
通道 ORA_DISK_1:将数据文件 00006 恢复到 /u01/oracle/TEST/db/apps_st/data/ctxd01.dbf
通道 ORA_DISK_1:将数据文件 00007 恢复到 /u01/oracle/TEST/db/apps_st/data/owad01.dbf
通道 ORA_DISK_1:将数据文件 00008 恢复到 /u01/oracle/TEST/db/apps_st/data/a_queue02.dbf
通道 ORA_DISK_1:将数据文件 00009 恢复到 /u01/oracle/TEST/db/apps_st/data/odm.dbf

................................

 

通道 ORA_DISK_1:将数据文件 00407 恢复到 /u01/oracle/TEST/db/apps_st/data/a_ref02.dbf
通道 ORA_DISK_1:从备份片 /u01/oracle/TEST/db/tech_st/11.1.0/dbs/0ep69g7a_1_1
读取 通道 ORA_DISK_1:片段句柄=/u01/oracle/TEST/db/tech_st/11.1.0/dbs/0ep69g7a_1_1 标签=TAG20140421T110305
通道 ORA_DISK_1:恢复备份片 1
通道 ORA_DISK_1:恢复完成,已用时间:01:16:04
于 2014 年 4 月 21 日完成恢复

2014 年 4 月 21 日开始恢复
使用通道 ORA_DISK_1

开始媒体恢复

线程 1 的序列号为 21 的归档日志已作为文件 /u01/PROD/db/apps_st/data/archive/ARC1_21_825013351.arc
存储在磁盘上 具有序列 22 的线程 1 的归档日志已作为文件 /u01/PROD/db/apps_st/data/archive/ARC1_22_825013351.arc
存储在磁盘上 具有序列 23 的线程 1 的归档日志已作为文件 /u01/PROD/db/apps_st/data/archive/ARC1_23_825013351.arc
存储在磁盘上 具有序列 24 的线程 1 的归档日志已作为文件 /u01/PROD/db/apps_st/data/archive/ARC1_24_825013351.arc
存储在磁盘上 归档日志文件名=/u01/PROD/db/apps_st/data/archive/ARC1_21_825013351.arc 线程=1 序列=21
归档日志文件名=/u01/PROD/db/apps_st/data/archive/ARC1_22_825013351.arc 线程=1 序列=22
归档日志文件名=/u01/PROD/db/apps_st/data/archive/ARC1_23_825013351.arc 线程=1 序列=23
媒体恢复完成,已用时间:00:00:19
2014 年 4 月 21 日完成恢复

数据库已打开
修复故障完成

                       

 

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn