一氏义、不完全恢復(fù)特性
1究西、不完全恢復(fù)
? ? ? 不完全恢復(fù)僅僅是將數(shù)據(jù)恢復(fù)到某一個特定的時間點或特定的SCN窗慎,而不是當(dāng)前時間點。不完全恢復(fù)會影響整個數(shù)據(jù)庫卤材,需要在MOUNT狀 態(tài)下進(jìn)行遮斥。在不完全恢復(fù)成功之后,通常需要使用 resetlogs 選項來打開數(shù)據(jù)庫扇丛。當(dāng)使用resetlogs后术吗,SCN 計數(shù)器不會被重置,原來的日
? 志序號 log sequence 會結(jié)束帆精,從新開始新的日志序列號较屿。在Oracle里稱之為產(chǎn)生一個新的incarnation。同時Oracle還會重置聯(lián)機(jī)重做日
? 志內(nèi)容卓练,因此resetlogs之后建議重新全備數(shù)據(jù)庫隘蝎。
2痒玩、不完全恢復(fù)的情形
? ? ? 介質(zhì)故障(media failure)導(dǎo)致部分或全部聯(lián)機(jī)重做日志(online redo log)損壞
? ? ? 用戶操作失誤(user error)導(dǎo)致數(shù)據(jù)丟失,例如,用戶由于疏忽而移除了表,提交了無效的數(shù)據(jù)到表
? ? ? 由于歸檔重做日志(archived redo log)丟失而無法進(jìn)行完全恢復(fù)(complete recovery)
? ? ? 當(dāng)前控制文件(control file)丟失牍鞠,必須使用備份的控制文件打開(open)數(shù)據(jù)庫
3、不完全恢復(fù)的步驟
? ? ? 關(guān)閉數(shù)據(jù)庫并備份數(shù)據(jù)庫(以防止恢復(fù)失敗)
? ? ? 啟動數(shù)據(jù)庫到mount 狀態(tài)
? ? ? 還原所有數(shù)據(jù)文件勋陪,同時可以選擇還原控制文件(注意需要還原所有數(shù)據(jù)文件整吆,而不僅僅是受損文件)
? ? ? 將數(shù)據(jù)庫恢復(fù)至某個時間點拱撵、序列、或系統(tǒng)改變號
? ? ? 使用RESETLOGS關(guān)鍵字打開數(shù)據(jù)庫
5表蝙、不完全介質(zhì)恢復(fù)的幾種類型
? ? ? 基于時間的恢復(fù)(Time-based recovery) 將數(shù)據(jù)恢復(fù)到指定的時間點
? ? ? 基于SCN 的恢復(fù)(Change-based recovery) 將數(shù)據(jù)恢復(fù)到指定的SCN
? ? ? 按重做日志序號恢復(fù)(Log sequence recovery)將數(shù)據(jù)恢復(fù)到指定的重做日志序號(僅使用RMAN時有效)
create user weisi_huifu identified by weisi default tablespace RMAN_TBS
grant select on DBA_OBJECTS to WEISI_HUIFU;
grant connect to WEISI_HUIFU;
grant resource to WEISI_HUIFU;
? RMAN> backup database;
sqlplus weisi_huifu/weisi@weisi
create table t as select? * from sys.dba_objects;
select count(1) from t;
? ? ? 145088
select dbms_flashback.get_system_change_number, SCN_TO_TIMESTAMP(dbms_flashback.get_system_change_number) from dual;
2641340
? ? t_norecover
22290564
insert into t select * from t;
commit;
alter system switch logfile;
alter system checkpoint;
shutdown immediate;
RMAN> startup mount;
? ? ? restore database from /opt/soft/recover/ORCL/backupset/2016_04_23/o1_mf_nnndf_TAG20160423T195019_ckprcw0l_.bkp;
? ? ? recover database until scn 22290564;
? ? ? alter database open resetlogs;
SQL> select count(1) from t_norecover;