目录
一、不完全恢复核心概念
1. 核心特点
2. 适用场景
3. 恢复类型
二、不完全恢复通用步骤
三、实战案例解析
案例1:恢复误删表(基于时间点)
案例2:当前日志损坏恢复
四、备份控制文件恢复(核心难点)
案例1:控制文件+数据文件损坏案例2:新增表空间后的控制文件恢复
五、关键技术总结
一、不完全恢复核心概念
1. 核心特点
必须关闭数据库:在MOUNT状态下执行重做日志恢复权限要求:以SYSDBA身份连接操作数据回溯:整个数据库回滚到指定时间点,后续数据永久丢失
2. 适用场景
重要数据被破坏(如误删表)
最小化备份测试验证完全恢复时丢失归档日志或当前在线日志(重要考点)
误删除表空间(需使用备份控制文件)
3. 恢复类型
类型应用场景基于时间点恢复到指定时间点前的状态基于SCN恢复到特定SCN号前的状态基于CANCEL恢复到归档日志/当前日志断点使用备份控制文件误删表空间等控制文件损坏场景
二、不完全恢复通用步骤
定位错误点:使用LogMiner分析DDL/DML误操作(时间点/SCN/SQL)
备份当前库:立即执行数据库全量备份还原旧备份:恢复错误发生前的数据文件备份前滚恢复:应用日志至目标时间点/SCN重置日志: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 数据库数据操作如何精通 INSERT, UPDATE, DELETE使用Docker容器运行Oracle数据库方式Oracle数据库查询执行过的SQL语句方法汇总使用 Oracle 数据库进行基于 JSON 的应用程序开发Oracle数据库常见字段类型大全以及超详细解析
