startup nomount;RMAN> restore spfile from '/backup/ctl_XXXX';SQL> shutdow..."/>
您好,登錄后才能下訂單哦!
SPFILE文件損壞的恢復(fù)場(chǎng)景:
場(chǎng)景 | 恢復(fù)操作 | |
SPFILE文件損壞 | 有備份 | SQL> startup nomount; RMAN> restore spfile from '/backup/ctl_XXXX'; SQL> shutdown immediate; Oracle instance shut down SQL> startup; |
無(wú)備份 | 手工創(chuàng)建pfile文件并生成spfile文件 一般只需幾個(gè)關(guān)鍵參數(shù)就能把庫(kù)拉起,但考慮到性能問(wèn)題,得恢復(fù)到丟失前的參數(shù)設(shè)置,可以從以下幾個(gè)地方找: 1.awr報(bào)告里面的spfile,在awr報(bào)告最后 2.alert log里面在庫(kù)啟動(dòng)時(shí)都會(huì)很很多初始參數(shù)輸出 |
控制文件恢復(fù)場(chǎng)景及演示:https://blog.51cto.com/wyzwl/1978252
場(chǎng)景 | 恢復(fù)方法 | 恢復(fù)條件 | |
其中一個(gè)控制文件損壞 | 1.1 拷貝冗余的控制文件 | 1、具有多路冗余控制文件鏡像 | |
2、其它冗余控制文件沒(méi)有損壞 | |||
1.2 修改control_files參數(shù)去除損壞文件 | 同上、但不推薦該方法進(jìn)行恢復(fù) | ||
所有的控制文件損壞 | 有備份 | 2.1 通過(guò)rman備份控制文件進(jìn)行完全恢復(fù) | 1、通過(guò)rman備份了控制文件 |
2、備份了控制文件之后有連續(xù)的歸檔和redo文件 | |||
2.2 通過(guò)rman備份控制文件進(jìn)行不完全恢復(fù) | 1、通過(guò)rman備份了控制文件 | ||
2、備份了控制文件之后歸檔或redo文件丟失 | |||
2.3 通過(guò)trace備份控制文件進(jìn)行完全恢復(fù) | 1、通過(guò)trace備份了控制文件 | ||
2、備份了控制文件之后有連續(xù)的歸檔和redo文件 | |||
2.4 通過(guò)trace備份控制文件進(jìn)行不完全恢復(fù) | 1、通過(guò)trace備份了控制文件 | ||
2、備份了控制文件之后歸檔或redo文件丟失 | |||
無(wú)備份 | 2.5 通過(guò)手工重建控制文件進(jìn)行恢復(fù)(noresetlogs) | 1、無(wú)有效的備份控制文件 | |
2、redo文件無(wú)丟失和無(wú)損壞 | |||
2.6 通過(guò)手工重建控制文件進(jìn)行恢復(fù)(resetlogs) | 1、無(wú)有效的備份控制文件 | ||
2、redo文件丟失或損壞 | |||
2.7 通過(guò)SNAPSHOT CONTROLFILE文件進(jìn)行恢復(fù) | 此處為記錄一個(gè)恢復(fù)控制文件的方法(不常使用) |
日志文件(redo log)恢復(fù)場(chǎng)景及演示(不考慮非歸檔模式):
場(chǎng)景 | 是否歸檔 | 恢復(fù)操作 | ||
STATUS=INACTIVE | 日志信息無(wú)需寫(xiě)入數(shù)據(jù)文件 | 1.在線(xiàn)時(shí)損壞 2.正常關(guān)閉后損壞 | ARC=YES | open和mount狀態(tài)都可以執(zhí)行,不會(huì)丟失數(shù)據(jù) SQL>alter database clear logfile group 1; |
ARC=NO | open和mount狀態(tài)都可以執(zhí)行,不會(huì)丟失數(shù)據(jù) SQL>alter database clear unarchived logfile group 1; | |||
STATUS=ACTIVE | 日志信息需要寫(xiě)入數(shù)據(jù)文件 | 1.在線(xiàn)時(shí)損壞 2.不正常關(guān)閉后損壞 | ARC=YES | 1.實(shí)例在線(xiàn)時(shí)損壞,直接在線(xiàn)執(zhí)行,不丟數(shù)據(jù)(千萬(wàn)別關(guān)庫(kù)) SQL>alter database clear unarchived logfile group 1; 2.實(shí)例不正常關(guān)閉后損壞,丟數(shù)據(jù) SQL>startup nomount; SQL>alter system set "_allow_resetlogs_corruption"=ture scope=spfile; SQL>shutdown immediate; SQL>startup mount; SQL>recover database until cancel; SQL>alter database open resetlogs; |
ARC=NO | 1.實(shí)例在線(xiàn)時(shí)損壞,直接在線(xiàn)執(zhí)行,不丟數(shù)據(jù) SQL>alter database clear unarchived logfile group 1; 2.實(shí)例不正常關(guān)閉后損壞,不丟數(shù)據(jù) SQL>startup nomount; SQL>alter system set "_allow_resetlogs_corruption"=ture scope=spfile; SQL>shutdown immediate; SQL>startup mount; SQL>recover database until cancel; SQL>alter database open resetlogs; | |||
STATUS=CURRENT | 日志信息無(wú)需寫(xiě)入數(shù)據(jù)文件 | 正常關(guān)閉后損壞 | ARC=NO | 實(shí)例正常關(guān)閉后損壞,不丟失數(shù)據(jù) SQL>startup mount; SQL>alter database clear unarchived logfile group 1; |
日志信息需要寫(xiě)入數(shù)據(jù)文件 | 1.在線(xiàn)時(shí)損壞 2.不正常關(guān)閉后損壞 | ARC=NO | 1.實(shí)例在線(xiàn)時(shí)損壞,直接在線(xiàn)執(zhí)行,不丟數(shù)據(jù)(千萬(wàn)別關(guān)庫(kù)) SQL>alter system switch logfile; SQL>alter database clear unarchived logfile group 1; 2.實(shí)例不正常關(guān)閉后損壞,會(huì)丟失數(shù)據(jù) SQL>startup nomount; SQL>alter system set "_allow_resetlogs_corruption"=ture scope=spfile; SQL>shutdown immediate; SQL>startup mount; SQL>recover database until cancel; SQL>alter database open resetlogs; |
表空間和數(shù)據(jù)文件恢復(fù)場(chǎng)景及演示:
場(chǎng)景 | 是否完全恢復(fù) | 恢復(fù)操作 | ||
數(shù)據(jù)文件 | 系統(tǒng)表空間數(shù)據(jù)文件(system,sysaux,undo) | 有完整備份(歸檔,rman) | 是 | SQL>startup mount; SQL>alter database recover datafile <file_id>; SQL>alter database open; |
無(wú)完整備份(缺歸檔等) | 否 | RMAN不完全恢復(fù) 1、基本時(shí)間恢復(fù) c:\set nls_date_format=yyyy-dd-mm hh34:mi:ss c:\rman target sys/oracle@test nocatalog RMAN>run { startup force mount; set until time='2010-08-22 12:00:08'; restore database; recover database; sql 'alter database open resetlogs; } 2、基于SCN恢復(fù) RMAN>run { startup force mount; set until scn=123456; restore database; recover database; sql 'alter database open resetlogs'; } 3、基于日志序列號(hào)恢復(fù) RMAN>run { startup force mount; set until seqence=10; restore database; recover database; sql 'alter database open resetlogs'; } 4、基于備份控制文件恢復(fù) c:\set nls_date_format=yyyy-dd-mm hh34:mi:ss c:\rman target sys/oracle@test nocatalog RMAN>startup force nomount; RMAN>set dbid=1113606269; RMAN>restore controlfile from autobackup maxseq 6; RMAN>alter database mount; RMAN>run { set until time='2010-08-22 12:00:08'; restore database; recover database; sql 'alter database open resetlogs; } | ||
普通表空間數(shù)據(jù)文件 | 有完整備份(歸檔,rman) | 是 | SQL>alter database datafile <datafile_name> offlie; SQL>alter database recover datafile <datafile_name>; SQL>alter tablespace datafile <datafile_name> online; | |
無(wú)完整備份(缺歸檔等) | 否 | 如果缺失歸檔:對(duì)庫(kù)進(jìn)行基于時(shí)間點(diǎn)不完整恢復(fù) 如果無(wú)備份: alter database datafile ‘xxx’ offline drop; 或者重建控制文件,代價(jià)就是丟失這個(gè)數(shù)據(jù)文件里的數(shù)據(jù) | ||
表空間 | 系統(tǒng)表空間 | 有完整備份(歸檔,rman) | 是 | SQL> shutdown immediate --如果無(wú)法使用immediate關(guān)閉數(shù)據(jù)庫(kù),則使用shutdown abort RMAN> run { startup mount; restore tablespace system; recover tablespace system; alter database open; } |
無(wú)完整備份(缺歸檔等) | 否 | 同系統(tǒng)表空間數(shù)據(jù)文件無(wú)完整備份恢復(fù)一樣,得進(jìn)行不完全恢復(fù): 1、基本時(shí)間恢復(fù) 2、基于SCN恢復(fù) 3、基于日志序列號(hào)恢復(fù) 4、基于備份控制文件恢復(fù) | ||
普通表空間 | 有完整備份(歸檔,rman) | 是 | SQL>alter tablespace users offlie; SQL>alter database recover tablespace <tablespace_name>; SQL>alter tablespace users online; | |
無(wú)完整備份(缺歸檔等) | 否 | 如果缺失歸檔:對(duì)庫(kù)進(jìn)行基于時(shí)間點(diǎn)不完整恢復(fù) 如果無(wú)備份: alter database datafile ‘xxx’ offline drop; | ||
全庫(kù)恢復(fù) | 所有表空間 | 有完整備份(歸檔,rman) | 是 | RMAN>run { startup mount; restore database; recover database; sql 'alter database open resetlogs; } |
無(wú)完整備份(缺歸檔等) | 否 | 同系統(tǒng)表空間數(shù)據(jù)文件無(wú)完整備份恢復(fù)一樣,得進(jìn)行不完全恢復(fù): 1、基本時(shí)間恢復(fù) 2、基于SCN恢復(fù) 3、基于日志序列號(hào)恢復(fù) 4、基于備份控制文件恢復(fù) |
各種誤刪表數(shù)據(jù)操作恢復(fù)場(chǎng)景:
場(chǎng)景 | 恢復(fù)操作 |
誤刪表數(shù)據(jù)恢復(fù)(delete) | 閃回查詢(xún),閃回版本查詢(xún) select * from emp as of timestamp to_timestamp('2004-04-04 09:30:00', 'yyyy-mm-dd hh:mi:ss'); 若11g開(kāi)啟了閃回歸檔,可利用這個(gè)新特性恢復(fù) 12c的rman新特性可單獨(dú)恢復(fù)表 |
誤刪表數(shù)據(jù)恢復(fù)(truncate) | 利用fy_recover_data離線(xiàn)數(shù)據(jù)文件恢復(fù) |
誤刪表恢復(fù)(drop) | 1.沒(méi)有相同名字 flashback table 原表名 to before drop [rename to 新表名]; 或 flashback table "回收站中的表名" to before drop [rename to 新表名]; 2.有相同的名字 用戶(hù)可能會(huì)經(jīng)常多次創(chuàng)建和刪除同一個(gè)表,第一個(gè)版本恢復(fù)到 TEST1,將第二個(gè)版本恢復(fù)到 TEST2 FLASHBACK TABLE "BIN$04LhcpnoanfgMAAAAAANPw==$0" TO BEFORE DROP RENAME TO TEST1; FLASHBACK TABLE "BIN$04LhcpnqanfgMAAAAAANPw==$0" TO BEFORE DROP RENAME TO TEST2; |
誤修改的VIEW,FUNTION,PROCEDURE,PACKAGE代碼恢復(fù) | 1、使用ODU恢復(fù) 2、利用閃回查詢(xún)恢復(fù) 3、通過(guò)基表進(jìn)行恢復(fù) |
閃回的場(chǎng)景及演示介紹:
技術(shù) | 應(yīng)用場(chǎng)景 | 步驟 | 限制 |
TSPITR | 1、表空間中,某個(gè)表的重要數(shù)據(jù)被破壞或刪除。 2、誤用DDL語(yǔ)言更改了表空間中的一個(gè)或多個(gè)表的結(jié)構(gòu),因此無(wú)法使用閃回來(lái)恢復(fù)這些表。 3、表被誤刪,并且已不在回收站中,如使用了帶purge選項(xiàng)的刪表操作。 | set nls_date_format=yyyy-mm-dd hh34:mi:ss; recover tablespace users until time '2018-01-15 09:20:00' auxiliary destination '/auxdata'; sql 'alter tablespace users online'; | 1、數(shù)據(jù)庫(kù)必須位于歸檔模式,且存在相應(yīng)的備份集合。 2、要恢復(fù)的表空間必須是自包含的,不依賴(lài)于其它表空間中的對(duì)象。例如,如果一個(gè)表在其它表空間中包含索引,則它們或者一起參與恢復(fù),或者先將依賴(lài)關(guān)系解除才能做恢復(fù)。 |
flashback | 在正式生產(chǎn)環(huán)境一般都不會(huì)輕易閃回整庫(kù),在測(cè)試環(huán)境中,可以利用這個(gè)特性來(lái)還原數(shù)據(jù),比如第一輪UAT測(cè)試完成后,回到初始化狀態(tài),可以進(jìn)行下一輪測(cè)試 | 啟用flashback database步驟 查詢(xún)數(shù)據(jù)庫(kù)是否開(kāi)啟閃回:select flashback_on from v$database; 關(guān)閉數(shù)據(jù)庫(kù)à啟動(dòng)到mount狀態(tài)à開(kāi)啟歸檔,設(shè)置閃回,不能設(shè)置歸檔路徑,歸檔存放在閃回日志目錄下:alter system set log_archive_dest=’’;à設(shè)置閃回日志目錄:alter system set db_recovery_file_dest=’+data’;à設(shè)置閃回日志保留3天時(shí)間,默認(rèn)1440分鐘:alter system set flashback_retention_target=4320;à設(shè)置閃回日志存儲(chǔ)空間大?。篴lter system set db_recovery_file_dest_size=5000g;à打開(kāi)閃回alter database flashback on;à查詢(xún)是否開(kāi)啟à打開(kāi)DB:alter database open; 如何閃回 查詢(xún)閃回能恢復(fù)的最久時(shí)間段 Select oldest_flashback_scn,oldest_flashback_time from v$flashback_database_log; 重啟DB到MOUNT狀態(tài)à閃回?cái)?shù)據(jù)庫(kù)到某個(gè)時(shí)間點(diǎn):flashback database to timestamp to_timestamp(‘2016-01-02 00:00:00’,’yyyy-mm-dd hh34:mi:ss’); 或閃回DB到某SCN:flashback database to scn xxx; | 1.flashback 數(shù)據(jù)庫(kù)不能解決media failure 這種錯(cuò)誤rman是唯一選擇 2.若刪除了數(shù)據(jù)文件或用戶(hù)shrink 縮小了數(shù)據(jù)文件大小,flashback不能用,需要先利用rman把刪除之前或縮小文件之前恢復(fù),再閃回 3.如果控制文件恢復(fù)出來(lái)或重建控制文件,不能閃回 4.閃回恢復(fù)到最早SCN,取決flashback log 中記錄的最早SCN |
其它恢復(fù)工具的介紹:
恢復(fù)工具 | 恢復(fù)參考 |
ODU工具的使用 | 強(qiáng)大的恢復(fù)工具,需要版權(quán),有試用版,功能較小 http://www.oracleodu.com/cn/ |
AMDU恢復(fù) | 針對(duì)ASM磁盤(pán)無(wú)法掛載后的數(shù)據(jù)文件抽取恢復(fù) http://www.eygle.com/archives/2012/03/asm_amdu_recovery.html |
logmnr | 在delete誤刪數(shù)據(jù)無(wú)法使用快照閃回恢復(fù)時(shí),使用logmnr挖歸檔,可以恢復(fù)數(shù)據(jù) 添加需要分析的在線(xiàn)日志 exec dbms_logmnr.add_logfile(logfilename=>'/opt4/arch/1_22560_911528823.dbf',options=>dbms_logmnr.new); 添加其他在線(xiàn)日志 exec dbms_logmnr.add_logfile(logfilename=>'/opt4/arch/1_22560_911528823.dbf',options=>dbms_logmnr.addfile); 分析添加的文件 execute dbms_logmnr.start_logmnr(options => dbms_logmnr.dict_from_online_catalog + dbms_logmnr.committed_data_only+dbms_logmnr.print_pretty_sql); 查詢(xún)對(duì)應(yīng)內(nèi)容 select * from v$logmnr_contents; |
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。