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
英文地址,請注明出處:http://en.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&…