Oracle不完全恢复实战指南:从原理到操作详解

核心提示:当误删表、日志损坏或控制文件丢失时,Oracle的不完全恢复是DBA最后的救命稻草。掌握关键恢复技术,可在数据灾难中力挽狂澜。


一、不完全恢复核心概念

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;

五、关键技术总结

  1. 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);
    
  2. 控制文件恢复核心命令

    RECOVER DATABASE USING BACKUP CONTROLFILE;  # 必须配合RESETLOGS
    
  3. 数据文件重建技巧

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/93306.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/93306.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux之shell脚本篇(二)

一、shell编程之if语句引言Linux在shell编程中,通常都是以自上而下运行,但是为了提高其代码严谨性,我们即引入了多条件 控制语句例如:if、for、while、case等语句,有时候针对条件我们还会结合正则表达式去运用。将这些…

如何在android framewrok dump camera data

实现dump 函数 实现1 void dumpBufferToFile(buffer_handle_t* buffer, int width, int height, int frameNum) {void* data NULL;GraphicBufferMapper::getInstance().lock(*buffer, GRALLOC_USAGE_SW_READ_OFTEN, Rect(width, height), &data);char filename[128];sprin…

机器学习中的可解释性:深入理解SHAP值及其应用

机器学习可解释性的重要性在人工智能技术快速发展的2025年,机器学习模型已经深度渗透到医疗诊断、金融风控、司法量刑等关键领域。然而,随着模型复杂度的不断提升,一个根本性矛盾日益凸显:模型预测性能的提升往往以牺牲可解释性为…

.NET9 使用 OData 协议项目实战

.NET 中 ODate 协议介绍 OData(Open Data Protocol) 是一个开放的 Web 协议,用于查询和更新数据。在 .NET 生态系统中,OData 被广泛支持和使用。 主要特性 1. 统一的数据访问方式 提供标准化的查询语法支持 CRUD 操作支持元数据描述 2. 查询能力 标…

Android 性能优化:提升应用启动速度(GC抑制)

前言 在移动应用开发领域,启动速度是用户体验的重要指标。对于Android应用而言,垃圾回收(Garbage Collection, GC)机制虽然是内存管理的核心,但在应用启动期间频繁触发GC会显著拖慢启动速度。本文将深入探讨如何通过GC…

做了一款小而美的本地校验器

需求说明 前阵子收到一则读者留言,指出:市面上AI核稿工具(ProWritingAid,WPS AI Spell Check,Writer,QuillBot,Grammarly)要么收费太高,要么让人担心文章泄露。 如下图所…

uniapp + uview-plus 微信小程序二维码生成和保存完整解决方案

uniapp + uview-plus 微信小程序二维码生成和保存完整解决方案 📋 项目背景 在开发微信小程序时,经常需要实现二维码的生成和保存功能。本文档提供了一个基于 uniapp + uview-plus 框架的完整解决方案,彻底解决了以下常见问题: ✅ Canvas API 兼容性问题 ✅ 微信小程序权…

Linux中应用程序的安装于管理

Linux中应用程序的安装于管理 一 . rpm安装 1.挂载 光驱里面存放了很多rpm的软件包 光驱在系统中使用时,需要挂载 mount /dev/cdrom /mnt/ cd /mnt[rootstw mnt]# ls CentOS_BuildTag GPL LiveOS RPM-GPG-KEY-CentOS-7 EFI images Packag…

mysql重置密码

要区分 MySQL 是通过 systemd 还是传统 service 管理,以及对应的密码重置方案,可按以下步骤操作: 一、如何区分管理方式(systemd 还是传统 service) 通过以下命令判断系统默认的服务管理方式:检查系统是否使…

C++ TAP(基于任务的异步编程模式)

🚀 C TAP(基于任务的异步编程模式)1. 引言:走进异步编程新时代(🚀) 在当今高性能计算领域,同步编程模型的局限性日益凸显。传统的回调地狱和线程管理复杂性促使微软提出了基于任务的…

利用C++手撕栈与队列的基本功能(四)

栈和队列详细教程可以观看 https://www.bilibili.com/video/BV1nJ411V7bd?spm_id_from333.788.videopod.episodes&vd_sourcedaed5b8a51d3ab7eb209efa9d0ff9a34&p48栈和队列概念 栈和队列是限定插入和删除只能在表的端点进行的线性表在装电池、装弹夹、拿放盘子时都会出…

net8.0一键创建支持(Redis)

Necore项目生成器 - 在线创建Necore模板项目 | 一键下载 RedisController.cs using CSRedis; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using UnT.Template.Application.Responses; using UnT.Template.Domain;namespace UnT.Template.Controllers {…

Leetcode——42. 接雨水

还记得第一次见该题根本无从下手。其实,我们不妨把问题拆解,简单化。不要怕自己写的是暴力算法,有很多算法技巧其实就是在暴力算法的基础上优化得来。题目目的是求所有可接雨水数量,我们可以求出每一个位置可接雨水数量&#xff0…

Go 语言-->指针

Go 语言–>指针 它允许你操作内存中的实际数据,而不仅仅是数据的副本。指针存储的是另一个变量的内存地址,而不是变量的实际值。 1. 什么是指针 指针是存储变量内存地址的变量,它指向另一个变量。通过指针,你可以间接地访问和修…

软工八将:软件开发全流程核心角色体系解析

软工八将:软件开发全流程核心角色体系解析 作者注:本概念是由大学生董翔提出,具有一些影响意义。 在现代软件开发领域,团队角色的专业化分工是产品成功的核心保障。“软工八将”作为一套系统梳理软件开发全流程核心角色的术语&…

安全风险监测系统是什么?内容有哪些?

安全风险监测系统是基于物联网感知网络与智能分析技术的综合管理平台,通过实时采集、分析和评估各类安全风险指标,构建起覆盖识别、预警、处置全流程的主动防御体系。作为现代安全管理的中枢神经系统,该系统实现了从被动响应到主动预防的范式…

车载诊断架构 ---面向售后的DTC应该怎么样填写?

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 简单,单纯,喜欢独处,独来独往,不易合同频过着接地气的生活,除了生存温饱问题之外,没有什么过多的欲望,表面看起来很高冷,内心热情,如果你身…

墨者:SQL注入漏洞测试(宽字节)

墨者学院:SQL注入漏洞测试(宽字节)🚀 1. 宽字节注入原理✨ 1.1. 与普通注入对比⭐ 特性普通注入宽字节注入适用场景无转义处理使用addslashes()等转义函数核心原理直接闭合引号利用GBK等编码吞掉转义符\关键字符 " -- #%df %5c防御难度易防御需调…

(二)Eshop(RabbitMQ手动)

文章目录项目地址一、Rabbit MQ1.1 Pulibsher1. IRabbitMQPublisher接口2. RabbitMQPublisher接口实现3. 使用1.2 Consumer1. 消费接口2. 实现消费者接口项目地址 教程作者:教程地址: 代码仓库地址: 所用到的框架和插件: dbt a…

WPF高级学习(一)

文章目录一、理解进程和线程1. 进程:就像一个独立的“工厂”举例:2. 线程:就像工厂里的“工人”举例:总结:进程 vs 线程二、线程一、WPF 中的线程类型二、核心规则:线程亲和性(Thread Affinity&…