Oracle不完全恢復(fù)的實(shí)戰(zhàn)指南
一、不完全恢復(fù)核心概念
1. 核心特點(diǎn)
- 必須關(guān)閉數(shù)據(jù)庫(kù):在
MOUNT狀態(tài)下執(zhí)行重做日志恢復(fù) - 權(quán)限要求:以
SYSDBA身份連接操作 - 數(shù)據(jù)回溯:整個(gè)數(shù)據(jù)庫(kù)回滾到指定時(shí)間點(diǎn),后續(xù)數(shù)據(jù)永久丟失
2. 適用場(chǎng)景
- 重要數(shù)據(jù)被破壞(如誤刪表)
- 最小化備份測(cè)試驗(yàn)證
- 完全恢復(fù)時(shí)丟失歸檔日志或當(dāng)前在線日志(重要考點(diǎn))
- 誤刪除表空間(需使用備份控制文件)
3. 恢復(fù)類(lèi)型
| 類(lèi)型 | 應(yīng)用場(chǎng)景 |
|---|---|
| 基于時(shí)間點(diǎn) | 恢復(fù)到指定時(shí)間點(diǎn)前的狀態(tài) |
| 基于SCN | 恢復(fù)到特定SCN號(hào)前的狀態(tài) |
| 基于CANCEL | 恢復(fù)到歸檔日志/當(dāng)前日志斷點(diǎn) |
| 使用備份控制文件 | 誤刪表空間等控制文件損壞場(chǎng)景 |
二、不完全恢復(fù)通用步驟
- 定位錯(cuò)誤點(diǎn):使用LogMiner分析DDL/DML誤操作(時(shí)間點(diǎn)/SCN/SQL)
- 備份當(dāng)前庫(kù):立即執(zhí)行數(shù)據(jù)庫(kù)全量備份
- 還原舊備份:恢復(fù)錯(cuò)誤發(fā)生前的數(shù)據(jù)文件備份
- 前滾恢復(fù):應(yīng)用日志至目標(biāo)時(shí)間點(diǎn)/SCN
- 重置日志:
ALTER DATABASE OPEN RESETLOGS
三、實(shí)戰(zhàn)案例解析
案例1:恢復(fù)誤刪表(基于時(shí)間點(diǎn))
場(chǎng)景: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%'; -- 輸出結(jié)果 USERNAME SCN TIME SQL_REDO SCOTT 1918000 2022-10-01 17:28:29 drop table t1 purge; -- 2. 關(guān)閉庫(kù)并還原備份 SHUTDOWN ABORT; rm *.dbf # 刪除所有數(shù)據(jù)文件 cp /u01/back1/*.dbf ./ # 還原備份 -- 3. 執(zhí)行時(shí)間點(diǎn)恢復(fù) STARTUP MOUNT; RECOVER DATABASE UNTIL TIME '2022-10-01 17:28:29'; AUTO # 自動(dòng)應(yīng)用日志 -- 4. 重置日志打開(kāi) ALTER DATABASE OPEN RESETLOGS;
案例2:當(dāng)前日志損壞恢復(fù)
場(chǎng)景:redo01.log被刪除導(dǎo)致崩潰
-- 1. 嘗試完全恢復(fù)(失敗) RECOVER DATABASE; -- 2. 執(zhí)行不完全恢復(fù) RECOVER DATABASE UNTIL CANCEL; CANCEL # 手動(dòng)終止恢復(fù) -- 3. 重置日志打開(kāi) ALTER DATABASE OPEN RESETLOGS;
四、備份控制文件恢復(fù)(核心難點(diǎn))
案例1:控制文件+數(shù)據(jù)文件損壞
場(chǎng)景:表空間abcd數(shù)據(jù)文件丟失且控制文件損壞
-- 1. 還原備份文件 cp /u01/back/*.dbf ./ # 數(shù)據(jù)文件 cp con.bak1 control*.ctl # 控制文件 -- 2. 重建丟失的數(shù)據(jù)文件 STARTUP; ALTER DATABASE CREATE DATAFILE '/u01/oradata/prod/abcd01.dbf'; -- 3. 使用備份控制文件恢復(fù) RECOVER DATABASE USING BACKUP CONTROLFILE; 輸入日志路徑:/u01/oradata/prod/redo03.log # 手動(dòng)指定當(dāng)前日志 -- 4. 重置打開(kāi) ALTER DATABASE OPEN RESETLOGS;
案例2:新增表空間后的控制文件恢復(fù)
場(chǎng)景:備份控制文件后新建表空間ceshi
-- 1. 啟動(dòng)時(shí)發(fā)現(xiàn)文件不匹配 STARTUP; ORA-01589: 必須使用RESETLOGS或NORESETLOGS打開(kāi) -- 2. 恢復(fù)時(shí)出現(xiàn)未命名文件 RECOVER DATABASE USING BACKUP CONTROLFILE; ORA-01244: 未命名數(shù)據(jù)文件被添加到控制文件 -- 3. 重建并重命名數(shù)據(jù)文件 ALTER DATABASE CREATE DATAFILE '/u01/oracle/dbs/UNNAMED00003' AS '/u01/oradata/prod/ceshi01.dbf'; # 關(guān)鍵命令! -- 4. 完成恢復(fù)并打開(kāi) RECOVER DATABASE USING BACKUP CONTROLFILE; ALTER DATABASE OPEN RESETLOGS;
五、關(guān)鍵技術(shù)總結(jié)
LogMiner精準(zhǔn)定位:
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);
控制文件恢復(fù)核心命令:
RECOVER DATABASE USING BACKUP CONTROLFILE; # 必須配合RESETLOGS
數(shù)據(jù)文件重建技巧:
ALTER DATABASE CREATE DATAFILE '損壞文件路徑' AS '新路徑'; -- 同時(shí)完成物理文件創(chuàng)建和控制文件更新
重要警示:不完全恢復(fù)后務(wù)必用RESETLOGS方式打開(kāi)數(shù)據(jù)庫(kù),此時(shí)會(huì)重置日志序列(可通過(guò)SELECT * FROM v$log驗(yàn)證)。此操作不可逆,需立即執(zhí)行全量備份!
到此這篇關(guān)于Oracle不完全恢復(fù)的實(shí)戰(zhàn)指南的文章就介紹到這了,更多相關(guān)Oracle不完全恢復(fù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
oracle 數(shù)據(jù)泵導(dǎo)入導(dǎo)出介紹
本文將介紹oracle數(shù)據(jù)泵導(dǎo)導(dǎo)出步驟詳細(xì)介紹,需要的朋友可以參考下2012-12-12
Oracle數(shù)據(jù)庫(kù)及應(yīng)用程序優(yōu)化開(kāi)發(fā)者網(wǎng)絡(luò)Oracle
Oracle數(shù)據(jù)庫(kù)及應(yīng)用程序優(yōu)化開(kāi)發(fā)者網(wǎng)絡(luò)Oracle...2007-03-03
ORACLE隨機(jī)數(shù)DBMS_RANDOM包
這篇文章主要介紹了ORACLE隨機(jī)數(shù)DBMS_RANDOM包,通過(guò)dbms_random包調(diào)用隨機(jī)數(shù)的方法大致有4種,具體哪4種請(qǐng)看本篇文章吧2015-09-09
oracle數(shù)據(jù)庫(kù)中sql%notfound的用法詳解
SQL%NOTFOUND 是一個(gè)布爾值。下面通過(guò)本文給大家分享oracle數(shù)據(jù)庫(kù)中sql%notfound的用法,需要的的朋友參考下吧2017-06-06
Window下Oracle Database 11g 發(fā)行版2安裝教程
這篇文章主要為大家詳細(xì)介紹了Window下Oracle Database 11g 發(fā)行版2安裝教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-07-07
詳細(xì)聊聊Oracle表碎片對(duì)性能有多大的影響
當(dāng)針對(duì)一個(gè)表的刪除操作很多時(shí),表會(huì)產(chǎn)生大量碎片,下面這篇文章主要給大家介紹了關(guān)于Oracle表碎片對(duì)性能影響的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-03-03
使用PL/SQL Developer連接Oracle數(shù)據(jù)庫(kù)的方法圖解
之前因?yàn)轫?xiàng)目的原因需要使用Oracle數(shù)據(jù)庫(kù),由于時(shí)間有限沒(méi)辦法從基礎(chǔ)開(kāi)始學(xué)習(xí),而且oracle操作的命令界面又太不友好,于是就找到了PL/SQL Developer這個(gè)很好用的軟件來(lái)間接使用數(shù)據(jù)庫(kù),下面簡(jiǎn)單介紹一下如何用這個(gè)軟件連接Oracle數(shù)據(jù)庫(kù)2016-12-12
Oracle 跨庫(kù) 查詢 復(fù)制表數(shù)據(jù) 分布式查詢介紹
這篇文章主要介紹了Oracle 跨庫(kù) 查詢 復(fù)制表數(shù)據(jù) 分布式查詢的相關(guān)資料,需要的朋友可以參考下2014-10-10
oracle查詢字段類(lèi)型長(zhǎng)度等字段信息簡(jiǎn)單代碼示例
這篇文章主要給大家介紹了關(guān)于oracle查詢字段類(lèi)型長(zhǎng)度等字段信息的相關(guān)資料,文中介紹了如何查詢Oracle數(shù)據(jù)庫(kù)中表的字符集和字段長(zhǎng)度類(lèi)型,包括VARCHAR2字段的兩種表示方式及其區(qū)別,需要的朋友可以參考下2024-12-12

