Oracle不完全恢复的实战指南

 更新时间:2025年07月29日 10:28:15   作者:我科绝伦(Huanhuan Zhou)  
当误删表、日志损坏或控制文件丢失时,Oracle的不完全恢复是DBA最后的救命稻草,掌握关键恢复技术,可在数据灾难中力挽狂澜,所以本文给大家介绍了Oracle不完全恢复的实战指南,需要的朋友可以参考下

一、不完全恢复核心概念

1. 核心特点

  • 必须关闭数据库:在MOUNT状态下执行重做日志恢复
  • 权限要求:以SYSDBA身份连接操作
  • 数据回溯:整个数据库回滚到指定时间点,后续数据永久丢失

2. 适用场景

  1. 重要数据被破坏(如误删表)
  2. 最小化备份测试验证
  3. 完全恢复时丢失归档日志或当前在线日志(重要考点)
  4. 误删除表空间(需使用备份控制文件)

3. 恢复类型

类型应用场景
基于时间点恢复到指定时间点前的状态
基于SCN恢复到特定SCN号前的状态
基于CANCEL恢复到归档日志/当前日志断点
使用备份控制文件误删表空间等控制文件损坏场景

二、不完全恢复通用步骤

  1. 定位错误点:使用LogMiner分析DDL/DML误操作(时间点/SCN/SQL)
  2. 备份当前库:立即执行数据库全量备份
  3. 还原旧备份:恢复错误发生前的数据文件备份
  4. 前滚恢复:应用日志至目标时间点/SCN
  5. 重置日志ALTER DATABASE OPEN RESETLOGS

三、实战案例解析

案例1:恢复误删表(基于时间点)

场景scott.t1表被误删且PURGE

-- 1. 定位删除操作
SELECT username,scn,to_char(timestamp,'yyyy-mm-dd hh24:mi:ss') time,sql_redo 
FROM v$logmnr_contents 
WHERE lower(sql_redo) LIKE 'drop table%';

-- 输出结果
USERNAME SCN      TIME                SQL_REDO
SCOTT    1918000  2022-10-01 17:28:29 drop table t1 purge;

-- 2. 关闭库并还原备份
SHUTDOWN ABORT;
rm *.dbf  # 删除所有数据文件
cp /u01/back1/*.dbf ./  # 还原备份

-- 3. 执行时间点恢复
STARTUP MOUNT;
RECOVER DATABASE UNTIL TIME '2022-10-01 17:28:29';
AUTO  # 自动应用日志

-- 4. 重置日志打开
ALTER DATABASE OPEN RESETLOGS;

案例2:当前日志损坏恢复

场景redo01.log被删除导致崩溃

-- 1. 尝试完全恢复(失败)
RECOVER DATABASE; 

-- 2. 执行不完全恢复
RECOVER DATABASE UNTIL CANCEL;
CANCEL  # 手动终止恢复

-- 3. 重置日志打开
ALTER DATABASE OPEN RESETLOGS;

四、备份控制文件恢复(核心难点)

案例1:控制文件+数据文件损坏

场景:表空间abcd数据文件丢失且控制文件损坏

-- 1. 还原备份文件
cp /u01/back/*.dbf ./  # 数据文件
cp con.bak1 control*.ctl  # 控制文件

-- 2. 重建丢失的数据文件
STARTUP;
ALTER DATABASE CREATE DATAFILE '/u01/oradata/prod/abcd01.dbf';

-- 3. 使用备份控制文件恢复
RECOVER DATABASE USING BACKUP CONTROLFILE;
输入日志路径:/u01/oradata/prod/redo03.log  # 手动指定当前日志

-- 4. 重置打开
ALTER DATABASE OPEN RESETLOGS;

案例2:新增表空间后的控制文件恢复

场景:备份控制文件后新建表空间ceshi

-- 1. 启动时发现文件不匹配
STARTUP;
ORA-01589: 必须使用RESETLOGS或NORESETLOGS打开

-- 2. 恢复时出现未命名文件
RECOVER DATABASE USING BACKUP CONTROLFILE;
ORA-01244: 未命名数据文件被添加到控制文件

-- 3. 重建并重命名数据文件
ALTER DATABASE CREATE DATAFILE '/u01/oracle/dbs/UNNAMED00003' 
AS '/u01/oradata/prod/ceshi01.dbf';  # 关键命令!

-- 4. 完成恢复并打开
RECOVER DATABASE USING BACKUP CONTROLFILE;
ALTER DATABASE OPEN RESETLOGS;

五、关键技术总结

LogMiner精准定位

EXECUTE dbms_logmnr_d.build('dict.ora','/logmnr_dir',dbms_logmnr_d.store_in_flat_file);
EXECUTE dbms_logmnr.add_logfile('/arch/arch_1_111.log',options=>dbms_logmnr.NEW);

控制文件恢复核心命令

RECOVER DATABASE USING BACKUP CONTROLFILE;  # 必须配合RESETLOGS

数据文件重建技巧

ALTER DATABASE CREATE DATAFILE '损坏文件路径' AS '新路径'; 
-- 同时完成物理文件创建和控制文件更新

重要警示:不完全恢复后务必用RESETLOGS方式打开数据库,此时会重置日志序列(可通过SELECT * FROM v$log验证)。此操作不可逆,需立即执行全量备份!

到此这篇关于Oracle不完全恢复的实战指南的文章就介绍到这了,更多相关Oracle不完全恢复内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Oracle 中 table 函数的应用浅析

    Oracle 中 table 函数的应用浅析

    表函数可接受查询语句或游标作为输入参数,并可输出多行数据。这篇文章主要介绍了Oracle 中 table 函数的应用浅析,需要的朋友可以参考下
    2016-12-12
  • Oracle中3种常用的分页查询方法

    Oracle中3种常用的分页查询方法

    这篇文章主要给大家介绍了关于Oracle中3种常用的分页查询方法,分页查询就是把query到的结果集按页显示,比如一个结果集有1W行,每页按100条数据库,而你获取了第2页的结果集,需要的朋友可以参考下
    2023-09-09
  • 详解Oracle自定义异常示例

    详解Oracle自定义异常示例

    这篇文章主要介绍了详解Oracle自定义异常示例的相关资料,需要的朋友可以参考下
    2016-04-04
  • Oracle用户密码过期如何修改永不过期

    Oracle用户密码过期如何修改永不过期

    针对不同的业务场景会有不一样的业务需求,oracle的用户密码,生产环境肯定需要定期进行更换,保证安全性,但是也同样会有需求要求oracle用户的密码永远不过期,这篇文章主要给大家介绍了关于Oracle用户密码过期如何修改永不过期的相关资料,需要的朋友可以参考下
    2024-03-03
  • Oracle中正则表达式的使用实例教程

    Oracle中正则表达式的使用实例教程

    大家对正则表达式应该都不会陌生,从linux下的命令到Java等编程语言,正则表达式无处不在,虽然我们实际使用不一定太多,但是当我们要处理字符串时,它确实是一个强大的工具。这篇文章主要给大家介绍了关于Oracle中正则表达式使用的相关资料,需要的朋友可以参考下。
    2017-10-10
  • oracle添加序号列3种方法大全

    oracle添加序号列3种方法大全

    Oracle是众多的关系型数据库系统之一,它可以为表格中的每一行创建唯一的序号列,这篇文章主要给大家介绍了关于oracle添加序号列的3种方法大全,需要的朋友可以参考下
    2024-03-03
  • Oracle数据库opatch补丁操作流程

    Oracle数据库opatch补丁操作流程

    这篇文章主要介绍了Oracle数据库opatch补丁操作流程的相关资料,本文从升级前准备工作到安装补丁操作整理过程都介绍的非常详细,需要的朋友可以参考下
    2016-10-10
  • 安装oracle11g时遇到INS-13001的问题及解决

    安装oracle11g时遇到INS-13001的问题及解决

    在Win10安装Oracle 11g时出现INS-13001错误,需修改解压目录下stage/cvu的cvu_prereq.xml文件,将32-bit改为64-bit,保存后重新运行安装程序即可解决兼容性问题
    2025-07-07
  • Oracle + mybatis实现对数据的简单增删改查实例代码

    Oracle + mybatis实现对数据的简单增删改查实例代码

    这篇文章主要给大家介绍了关于利用Oracle + mybatis如何实现对数据的简单增删改查的相关资料,文中图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-10-10
  • Oracle9i 动态SGA,PGA特性探索

    Oracle9i 动态SGA,PGA特性探索

    虽然Oracle9i中的内存管理仍然需要很多的手工操作,不过大部分的Oracle管理员可以使用工具来连续地监控Oracle SGA中的内存使用,并且可以根据Oracle instance中现在的使用情况来自动地重新分配内存。
    2009-03-03

最新评论