作者:Digital Observer(施嘉偉)
Oracle?ACE?Pro
PostgreSQL ACE Partner
Oracle?OCM、KCM、PGCM、DB2 、MySQL OCP、PCTP、PCSD、OCI、PolarDB技術(shù)專家、達(dá)夢(mèng)師資認(rèn)證,從業(yè)11年+
ITPUB認(rèn)證專家、崖山Y(jié)VP、PolarDB開(kāi)源社區(qū)技術(shù)顧問(wèn)、HaloDB技術(shù)顧問(wèn)、TiDB社區(qū)技術(shù)布道師、青學(xué)會(huì)MOP技術(shù)社區(qū)專家顧問(wèn)、國(guó)內(nèi)某高校企業(yè)實(shí)踐指導(dǎo)教師
公眾號(hào)/墨天輪/金倉(cāng)社區(qū)/IF Club:Digital Observer;CSDN/PGfans:施嘉偉;ITPUB:sjw1933
背景描述
在面對(duì)歸檔日志分析或誤操作取證時(shí),異機(jī)挖掘是一種既安全又高效的方案:不擾動(dòng)生產(chǎn)端,又能還原業(yè)務(wù)變更軌跡。實(shí)踐中應(yīng)關(guān)注兩類工作流——純挖掘(僅解析歸檔日志)與挖掘輔以最小化恢復(fù)(恢復(fù) SYSTEM/SYSAUX/UNDO 以開(kāi)庫(kù))。關(guān)鍵準(zhǔn)備包括:在源庫(kù)開(kāi)啟補(bǔ)充日志或生成字典文件、確保歸檔日志序列完整、并把歸檔日志與字典文件安全復(fù)制到分析機(jī)。
在分析機(jī)上,用 LogMiner 加載字典并按序列加載歸檔日志后,就能通過(guò) V$LOGMNR_CONTENTS 等視圖解析出 DML/DDL。要注意字典的兩種常見(jiàn)方式:寫入 redo(便攜)或?qū)С鰹槠矫嫖募@式拷貝)。若缺少某段序列,會(huì)導(dǎo)致解析中斷,因此提前校驗(yàn)歸檔序列完整性是常態(tài)化操作。
當(dāng)遇到不能完整恢復(fù)數(shù)據(jù)庫(kù)但又必須“看到”業(yè)務(wù)變更時(shí),可采取最小化恢復(fù)策略:僅恢復(fù)控制文件、SYSTEM、SYSAUX、UNDO,打開(kāi)庫(kù)(resetlogs),此時(shí)業(yè)務(wù)表空間可以離線,通過(guò) LogMiner 在打開(kāi)的庫(kù)或分析機(jī)上解析并導(dǎo)出相關(guān) DML,再在目標(biāo)業(yè)務(wù)庫(kù)重放或用腳本回放。RMAN 報(bào)錯(cuò)如 “no backup of archived log … found” 通常提示歸檔文件缺失,需要在備份介質(zhì)或歸檔存儲(chǔ)中補(bǔ)回對(duì)應(yīng)序列,或從備份目錄執(zhí)行 catalog/restore。
常見(jiàn)排查要點(diǎn):
核對(duì)歸檔序列與 SCN 范圍、確認(rèn)字典是否匹配(相同點(diǎn)時(shí)間點(diǎn)的字典)、確保控制文件備份可用、在恢復(fù)路徑上使用 catalog 命令注冊(cè)離線歸檔與備份集。異機(jī)挖掘不是替代完整備份恢復(fù)的手段,而是高價(jià)值的“取證與補(bǔ)救”工具:能為誤刪回滾、審計(jì)取證和業(yè)務(wù)補(bǔ)償提供明確的 SQL 與時(shí)間線,配合 RMAN 的最小化恢復(fù)策略,能在最短風(fēng)險(xiǎn)暴露窗口內(nèi)最大化地恢復(fù)業(yè)務(wù)可見(jiàn)性與可操作性。
一、最小化恢復(fù)數(shù)據(jù)文件
需要恢復(fù)的文件有:
system表空間
sysaux表空間
undo表空間
恢復(fù)備份片的時(shí)候報(bào)錯(cuò):
rman備份后恢復(fù)不了
我在suse下進(jìn)行rman備份,然后恢復(fù)數(shù)據(jù),但是恢復(fù)不了了,出現(xiàn)個(gè)問(wèn)題,請(qǐng)各位大哥幫忙解決下
RMAN-00571: ===========================================================
RMAN-03002: failure of restore command at 08/19/2010 15:40:01
RMAN-06026: some targets not found - aborting restore
RMAN-06025: no backup of archived log for thread 1 with sequence 972 and starting SCN of 41534693 found to restore
RMAN-06025: no backup of archived log for thread 1 with sequence 971 and starting SCN of 41511124 found to restore
RMAN-06025: no backup of archived log for thread 1 with sequence 970 and starting SCN of 41475694 found to restore
解決方法
指定恢復(fù)restrore數(shù)據(jù)庫(kù)文件:
1、 rman target / ----startup mount;
2、 restore controlfile from '/xxx/xxctl.bak'
3、alter database mount;
4、offline所有數(shù)據(jù)文件
5、resstore datafile 1;
resstore datafile 2;
resstore datafile 3;
6、recover database skip forever tablespace TBS_EA_BUSI,TBS_EA_BUSI_IDX,TBS_EA_CGYW,TBS_EA_CGYW_HIST,TBS_EA_CGYW_HIST_IDX,....;
7、alter database open resetlogs;
二、用 LogMiner 加載字典
下面給出常用的示例命令(代碼段供直接使用或參考):
在源庫(kù)準(zhǔn)備字典(示例)
-- 寫入 redo 日志字典(便于攜帶)
BEGIN
DBMS_LOGMNR_D.BUILD(OPTIONS => DBMS_LOGMNR_D.STORE_IN_REDO_LOGS);
END;
/
-- 或生成平面字典文件
BEGIN
DBMS_LOGMNR_D.BUILD(
DICTFILENAME => '/u01/dict/logmnr_dict.ora',
OPTIONS => DBMS_LOGMNR_D.STORE_IN_FLAT_FILE);
END;
/
拷貝歸檔與字典到分析機(jī)(示例)
scp /archive/ARCH_1_970.arc analyst:/data/logs/ scp /u01/dict/logmnr_dict.ora analyst:/data/dict/
在分析機(jī)啟動(dòng) LogMiner(示例)
EXEC DBMS_LOGMNR.ADD_LOGFILE(LOGFILENAME => '/data/logs/ARCH_1_970.arc', OPTIONS => DBMS_LOGMNR.NEW);
EXEC DBMS_LOGMNR.ADD_LOGFILE(LOGFILENAME => '/data/logs/ARCH_1_971.arc', OPTIONS => DBMS_LOGMNR.ADDFILE);
EXEC DBMS_LOGMNR.START_LOGMNR(DICTFILENAME => '/data/dict/logmnr_dict.ora');
SELECT OPERATION, SQL_REDO FROM V$LOGMNR_CONTENTS WHERE ...;
結(jié)語(yǔ)
LogMiner 異機(jī)挖掘歸檔日志,不僅是一種常見(jiàn)的審計(jì)和分析手段,更是應(yīng)急場(chǎng)景下的重要補(bǔ)救措施。通過(guò)合理規(guī)劃字典生成方式、確保歸檔日志的完整性,再結(jié)合 RMAN 的最小化恢復(fù)策略,我們就能在數(shù)據(jù)庫(kù)出現(xiàn)問(wèn)題時(shí),快速還原出關(guān)鍵業(yè)務(wù)操作的軌跡。它并不能替代系統(tǒng)化的備份與恢復(fù)體系,但卻能在危機(jī)時(shí)刻,幫助我們更快定位問(wèn)題、重放數(shù)據(jù)和恢復(fù)業(yè)務(wù)連續(xù)性。對(duì)于運(yùn)維人員而言,熟練掌握 LogMiner 的異機(jī)挖掘技巧,無(wú)疑是一種必備的核心能力。





