RMAN Advisor 是 Oracle 数据库中的 Data Recovery Advisor(DRA) 功能,集成在 RMAN(Recovery Manager)中,用于自动化诊断数据库故障并提供修复建议。其主要功能是识别数据损坏、文件丢失等问题,并生成恢复方案。比手动好用,强烈推荐,考试上最佳节约时间办法。
一、DRA 功能与技术原理
1. DRA 核心功能
- 自动故障检测:实时监控数据库物理结构完整性(数据文件、控制文件、重做日志等)
- 故障分级评估:将故障分为 CRITICAL(严重)、HIGH(高)、LOW(低)三个优先级
- 智能修复建议:生成手动操作指南和自动修复脚本
- 一键式恢复:通过 REPAIR FAILURE 自动执行恢复操作
- 预防性维护:结合 VALIDATE 命令提前发现潜在问题
2. 技术原理
- 故障检测引擎:
- 持续检查控制文件、数据文件头、日志文件等关键组件
- 通过后台进程(如 SMON)收集数据库物理损坏信息
- 依赖关系分析:
- 构建故障关联图(如数据文件损坏需特定归档日志恢复)
- 计算最优恢复路径(最小化数据丢失)
- 恢复策略生成:
- 基于备份元数据确定可恢复点(SCN)
- 生成 RMAN 恢复脚本(存储在 $ORACLE_BASE/diag/rdbms///hm/)
- 安全执行机制:
- 预检查恢复条件(备份可用性、归档完整性)
- 事务一致性保障(自动处理 resetlogs 等操作)
二、模拟实操:恢复 current redo 丢失故障
环境准备
# 创建归档目录
mkdir /opt/oracle/ARCH
chown oracle:oinstall /opt/oracle/ARCH
# 设置归档参数
sqlplus / as sysdba
ALTER SYSTEM SET log_archive_dest_1='location=/opt/oracle/ARCH';
ALTER SYSTEM SET log_archive_format="23ai_%t_%s_%r.arc" SCOPE=SPFILE;
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE OPEN;
--
Connected to:
Oracle Database 23ai Free Release 23.0.0.0.0 - Develop, Learn, and Run for Free
Version 23.8.0.25.04
SYS@FREE> ALTER SYSTEM SET log_archive_dest_1='location=/opt/oracle/ARCH';
System altered.
SYS@FREE> ALTER SYSTEM SET log_archive_format="23ai_%t_%s_%r.arc" SCOPE=SPFILE;
System altered.
SYS@FREE> SHUTDOWN IMMEDIATE;
Database closed.
Database dismounted.
ORACLE instance shut down.
STARTUP MOUNT;
ALTER DATABASE ARCHIVELOG;
ORA-32004: obsolete or deprecated parameter(s) specified for RDBMS instance
ORACLE instance started.
Total System Global Area 1607248760 bytes
Fixed Size 4922232 bytes
Variable Size 922746880 bytes
Database Buffers 402653184 bytes
Redo Buffers 276926464 bytes
Database mounted.
SYS@FREE>
Database altered.
SYS@FREE> ALTER DATABASE OPEN;
Database altered.
SYS@FREE> show pdbs;
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 FREEPDB1 READ WRITE NO
故障模拟步骤
创建测试数据
CREATE TABLE T4ARCH(id NUMBER, time VARCHAR2(100));
INSERT INTO T4ARCH VALUES (1, TO_CHAR(SYSDATE, 'yyyy-mm-dd hh24:mi:ss'));
COMMIT;
--
SYS@FREE> alter session set container=FREEPDB1;
Session altered.
CREATE TABLE T4ARCH(id NUMBER, time VARCHAR2(100));
INSERT INTO T4ARCH VALUES (1, TO_CHAR(SYSDATE, 'yyyy-mm-dd hh24:mi:ss'));
Table created.
SYS@FREE>
1 row created.
SYS@FREE> COMMIT;
Commit complete.
执行 RMAN 全备
rman target /
RUN {
ALLOCATE CHANNEL c1 DEVICE TYPE DISK;
BACKUP DATABASE PLUS ARCHIVELOG;
BACKUP CURRENT CONTROLFILE;
}
模拟 current redo 丢失
# 查询当前 redo
SELECT group#, status, member FROM v$logfile WHERE status='CURRENT';
# 重命名 current redo
mv /opt/oracle/oradata/FREE/redo03.log /opt/oracle/oradata/FREE/redo03.log.bak
模拟崩溃
# 插入新数据(模拟 redo日志 写入)
INSERT INTO T4ARCH VALUES (2, TO_CHAR(SYSDATE, 'yyyy-mm-dd hh24:mi:ss'));
COMMIT;
# 强制kill
ps -ef | grep pmon
kill -9 <pmon_pid>
--
[root@OL97 ~]# ps -ef | grep pmon
oracle 230162 1 0 19:51 ? 00:00:00 db_pmon_FREE
root 230700 230642 0 19:57 pts/4 00:00:00 grep --color=auto pmon
[root@OL97 ~]# kill -9 230162
DRA 诊断恢复过程
启动数据库(预期失败)
STARTUP;
# 报错 ORA-00313, ORA-00312
--
Connected to an idle instance.
SYS@FREE> startup
ORA-32004: obsolete or deprecated parameter(s) specified for RDBMS instance
ORACLE instance started.
Total System Global Area 1607248760 bytes
Fixed Size 4922232 bytes
Variable Size 922746880 bytes
Database Buffers 402653184 bytes
Redo Buffers 276926464 bytes
Database mounted.
--
2025-06-27T20:24:55.974983+08:00
Errors in file /opt/oracle/diag/rdbms/free/FREE/trace/FREE_lgwr_231431.trc:
ORA-00313: open failed for members of log group 3 of thread 1
ORA-00312: online log 3 thread 1: '/opt/oracle/oradata/FREE/redo03.log'
DRA 故障诊断
rman target SYS/Oracle_4U@10.2.0.97:1521/FREE
RMAN> LIST FAILURE;
# 输出示例:
# Failure ID Priority Status Summary
# ---------- -------- --------- -----------------------------
# 1483 CRITICAL OPEN Redo log group 3 is unavailable
# 1486 HIGH OPEN Redo log file ...redo03.log missing
获取修复建议
RMAN> ADVISE FAILURE;
执行自动修复
# 查看修复脚本内容
cat /opt/oracle/diag/rdbms/free/FREE/hmreco_3026389520.hm
# 执行修复
RMAN> REPAIR FAILURE;
# 或手动执行脚本
RMAN> RESTORE DATABASE UNTIL SCN 7610450;
RMAN> RECOVER DATABASE UNTIL SCN 7610450;
RMAN> ALTER DATABASE OPEN RESETLOGS;
恢复后验证
SELECT * FROM T4ARCH;
-- 数据显示 SCN 7610450 之前的数据
三、DRA 技术优势分析
与传统恢复对比
|
恢复方式 |
传统方法 |
DRA 方式 |
|
故障诊断 |
手动查询 v$视图分析 |
自动检测并分级评估 |
|
恢复策略 |
DBA 凭经验设计恢复方案 |
自动生成最优恢复路径 |
|
操作复杂度 |
需精通 RMAN 命令 |
一键式自动修复 |
|
恢复时间 |
30+ 分钟(资深 DBA) | |
|
风险控制 |
人工操作易失误 |
预执行检查保障安全 |
DRA 核心技术亮点
SCN 查询
-- DRA 自动计算的最大可恢复 SCN
SELECT NEXT_CHANGE#-1 AS max_recoverable_scn
FROM v$log WHERE group# = (SELECT group# FROM v$log WHERE status = 'CURRENT')-1;
--
MAX_RECOVERABLE_SCN
-------------------
7610451
- 自动生成 OPEN RESETLOGS
- 备份当前控制文件(before resetlogs)
- 记录恢复审计信息到 ADR(Automatic Diagnostic Repository)
# 定期检查潜在问题
RMAN> VALIDATE DATABASE;
# 查看历史故障
SELECT * FROM v$ir_failure;
# 清理已解决故障
RMAN> CHANGE FAILURE <IDXXX> CLOSE;
四、生产环境最佳实践
1. 日常维护命令
# 定期检查潜在问题
RMAN> VALIDATE DATABASE;
# 查看历史故障
SELECT * FROM v$ir_failure;
# 清理已解决故障
RMAN> CHANGE FAILURE <IDXX> CLOSE;
2. 关键配置建议
-- 启用控制文件自动备份
CONFIGURE CONTROLFILE AUTOBACKUP ON;
-- 设置诊断目录大小
ALTER SYSTEM SET DIAGNOSTIC_DEST_SIZE = 10G;
3. 灾难恢复预案
#!/bin/bash
# DRA 自动恢复脚本模板
rman target / <<EOF
LIST FAILURE;
ADVISE FAILURE;
REPAIR FAILURE;
EXIT;
EOF
五、使用体验
- Oracle 11g R1 开始引入基础功能
- Oracle 12c 后支持多租户环境
- Oracle 19c 增强云环境集成
- 仅处理物理损坏(不解决逻辑错误)
- 依赖有效备份(无备份则无法恢复)
- 不支持 ASM 存储层故障
- 诊断期间占用约 5-10% CPU
- 大数据库验证操作耗时较长(建议业务低谷执行)
TIPS:Oracle Data Recovery Advisor 通过自动化故障诊断、智能恢复策略生成和一键式修复,显著降低了数据库恢复的复杂性和风险。尤其在处理 current redo 丢失等关键故障时,DRA 能精准计算最大可恢复点,避免因操作失误导致的数据损失。建议生产环境结合定期验证(VALIDATE)和 DRA 监控构建完善的灾备体系。
7889

被折叠的 条评论
为什么被折叠?



