Oracle Rman 不完全恢復(fù)實操講解
引起不完全恢復(fù)的原因有很多,如丟失了聯(lián)機重做日志或歸檔的重做日志,或者出現(xiàn)重大的用戶錯誤。
不完全恢復(fù)會影響整個數(shù)據(jù)庫,換句話,不能只對數(shù)據(jù)庫的一部分執(zhí)行不完全恢復(fù)操作,因為這個會使數(shù)據(jù)庫的一部分具有與這個數(shù)據(jù)庫其余部分不同的SCN和時間點。

要將數(shù)據(jù)庫數(shù)據(jù)還原到與數(shù)據(jù)庫剩余部分不同的時間點,可以用基于表空間時間恢復(fù)或者用閃回技術(shù)。
不完全恢復(fù)方法包括:基于時間、SCN、日志序列、取消的恢復(fù)。
使用RMAN執(zhí)行不完全恢復(fù)操作時需要完成一個工作是建立恢復(fù)目標。恢復(fù)目錄是恢復(fù)進程的終點,通常基于一個時間點,一個指定的SCN 或者一個日志序列號來表示它。我們可以采用許多不同的方法建立恢復(fù)目標。
在run 代碼塊中使用set 命令與until time,until SCN 或 until sequence參數(shù)
Run
{
set until time "to_date('2019-07-26 13:47:00','yyyy-mm-dd hh24:mi:ss')";
Restore database;
Recover database;
}
執(zhí)行命令時,RMAN 會查找與恢復(fù)目標時間最近(并非恢復(fù)目標時間本身也不能是位于恢復(fù)目標之間的時間)的備份集,并且從這個備份集中還原數(shù)據(jù)庫。 如果數(shù)據(jù)庫置于noarchivelog 模式中,恢復(fù)操作會在備份集的時間停止;否則在執(zhí)行recover命令期間,oracle 會在所定義的恢復(fù)目標(不包含恢復(fù)目標本身)上應(yīng)用歸檔的重做日志(以及需要應(yīng)用的任何增量備份)。
注意: 如果嘗試恢復(fù)到特定備份的完成點,則必須恢復(fù)到備份集中文件的CKP SCN 或 CKP TIME,在不同備份集的RMAN list命令中會列出這些內(nèi)容。有時使用備份的CKP TIME 并不夠,還可能導(dǎo)致ORA-1152錯誤。
在restore 和recover 命令中直接使用until time,until SCN 和 until sequence 參數(shù)
這種方法避免使用run代碼塊,也傾向與使用這種方法。
Startup mount;
Restore database until time "to_date('2019-07-26 14:30:39','yyyy-mm-dd hh24:mi:ss')";
Recover database until time "to_date('2010-07-05 14:02:00','yyyy-mm-dd hh24:mi:ss')";
Alter database open resetlogs;
這種恢復(fù)類型允許用戶將數(shù)據(jù)庫恢復(fù)到與指定時間一致的狀態(tài)。當然,如果不存在能將數(shù)據(jù)庫還原到用戶請求的時間的有效備份或歸檔重做日志,Oracle 就會報RMAN-03002 和 RMAN-20207的錯誤。
必須具備在我們指定的恢復(fù)時間之前生成的數(shù)據(jù)庫備份,此外還需要所有歸檔的重做日志。
Oracle允許用戶將數(shù)據(jù)庫恢復(fù)到指定的SCN,實際上,這并不是一種常見的恢復(fù)方法。示例如下:
Startup mount;
Restore database until SCN 1000;
Recover database until SCN 1000;
Alter database open resetlogs;
注意:該示例可以將數(shù)據(jù)庫還原到SCN 1000,但是不會包含SCN.
RMAN 允許用戶將數(shù)據(jù)庫恢復(fù)到指定序列號的歸檔重做日志。如果歸檔的重做日志中存在間隙,使用這種恢復(fù)方法就非常方便。 間隙通常意味著我們只能將數(shù)據(jù)庫還原到間隙的開始點。
Startup mount;
Restore database until sequence 100 thread 1;
Recover database until sequence 100 thread 1;
Alter database open resetlogs;
在默認情況下,即使丟失了只讀的數(shù)據(jù)文件,RMAN也不會在執(zhí)行完全恢復(fù)數(shù)據(jù)庫還原操作時還原只讀的數(shù)據(jù)文件。要在完全恢復(fù)期間還原只讀的數(shù)據(jù)文件,就必須在restore 命令中使用check readonly 參數(shù),如:
Restore database check readonly;
注意,執(zhí)行recover tablespace或recover datafile命令時,RMAN的工作情況是不一樣的。 使用這兩個命令時,不管表空間是否為只讀狀態(tài)都會執(zhí)行恢復(fù)操作。
在使用RMAN的普通恢復(fù)過程中,不必恢復(fù)歸檔的重做日志。 不過,偶爾也會要求還原一個或多個歸檔的重做日志。 例如,我們可能需要使用LogMiner 在備份中存儲的歸檔重做日志文件里查找一些信息。
Restore archivelog all;
Restore archivelog from logseq=20 thread=1;
Restore archivelog from logseq=20 until logseq=30 thread=1;
還可以將歸檔的重做日志還原到默認位置以外的位置上:
Run
{
Set archivelog destination to "d:/arch";
Restore archivelog all;
}
注意:
1. 上例中的set 命令沒有替代方法,必須要求使用set;
2. 如果RMAN 認為一個歸檔的重做日志已存在,就不會在磁盤上還原這個歸檔的重做日志,即使設(shè)置的還原位置不同與默認的歸檔日志位置,Oracle 也不會在這個新的位置上恢復(fù)歸檔的重做日志。
可以從數(shù)據(jù)文件副本(不是備份集)中還原數(shù)據(jù)庫的數(shù)據(jù)文件。 要實現(xiàn)這個功能,需要先使用restore from datafilecopy命令,然后再使用恢復(fù)數(shù)據(jù)庫(或表空間,數(shù)據(jù)文件)的recover。
RMAN>Restore (datafile 5) from datafilecopy; -- 此處的圓括號是必須的,如果沒有就報錯
RMAN>Recover datafile 5;
SQL>Alter database datafile 5 online;
下一篇:2024如何選擇自己的電腦 硬盤篇