mysql中的rman备份与恢复_RMAN备份与恢复总汇
1.1? 備份
1.1.1 對(duì)數(shù)據(jù)庫進(jìn)行全備
使用backup database命令執(zhí)行備份
RMAN>BACKUP DATABASE;
執(zhí)行上述命令后將對(duì)目標(biāo)數(shù)據(jù)庫中的所有數(shù)據(jù)文件進(jìn)行備份,由于沒有顯式指定FORMAT參數(shù),rman會(huì)自動(dòng)為每個(gè)備份片段命名,并保存在ORACLE_HOME/database目錄下。
當(dāng)然,也可以通過顯式指定format參數(shù)來自定義備份片段的命令規(guī)則,比如:
RMAN> BACKUP DATABASE FORMAT 'D:\BACKUP\%U';
1.1.2 備份表空間
只要實(shí)例啟動(dòng)并處于加載狀態(tài),不論數(shù)據(jù)庫是否打開,都可以在rman中對(duì)表空間進(jìn)行備份,而且不需要像手動(dòng)備份那樣先'ALTER TABLESPACE ... BEGIN BACKUP'。例如:
RMAN> backup tablespace jweb;
同樣,我們?cè)谑褂胋ackup tablespace也可以通過顯式指定format參數(shù)自定義備份片段名稱。
我們?cè)偻ㄟ^LIST BACKUP 查看一下備份:
RMAN> LIST BACKUP OF TABLESPACE JWEB;
1.1.3 備份指定數(shù)據(jù)文件
首先可以先通過數(shù)據(jù)字典DBA_DATA_FILES查詢出表空間對(duì)應(yīng)的數(shù)據(jù)文件及其序號(hào),例如:
select file_name,file_id,tablespace_name from dba_data_files
然后再通過BACKUP DATAFILE備份指定序號(hào)的數(shù)據(jù)文件,例如:
RMAN> BACKUP DATAFILE n;
如果要查看指定數(shù)據(jù)文件的備份,可以用:
RMAN> LIST BACKUP OF DATAFILE n;
注:n=指定的的數(shù)據(jù)文件序號(hào),如果需要備份的數(shù)據(jù)文件有多個(gè),n=多個(gè)序號(hào),中間以逗號(hào)分隔即可。
1.1.4?備份控制文件
控制文件在ORACLE中的重要性是毋庸置疑的,你看,連RMAN都給予特殊的照顧,在RMAN中備份控制文件的方式是最多的。
1.最簡(jiǎn)單的方式,通過CONFIGURE命令將CONTROLFILE AUTOBACKUP置為ON。
RMAN> CONFIGURE CONTROLFILE AUTOBACKUP ON;
然后你再通過rman做任何備份操作的同時(shí),都會(huì)自動(dòng)對(duì)控制文件做備份。
2.對(duì)編號(hào)為1的數(shù)據(jù)文件,即SYSTEM表空間的數(shù)據(jù)文件做備份時(shí),RMAN也會(huì)自動(dòng)對(duì)控制文件做備份。
3.手動(dòng)執(zhí)行備份命令。
RMAN> BACKUP CURRENT CONTROLFILE;
4.執(zhí)行BACKUP時(shí)指定INCLUDE CURRENT CONTROLFILE參數(shù),例如:
RMAN> BACKUP DATABASE INCLUDE CURRENT CONTROLFILE;
如果要查看備份的控制文件,可以通過:
RMAN> LIST BACKUP OF CONTROLFILE;
1.1.5 備份歸檔日志文件
歸檔日志對(duì)于數(shù)據(jù)庫介質(zhì)恢復(fù)相當(dāng)關(guān)鍵,其雖然不像控制文件那樣一旦損壞則數(shù)據(jù)庫馬上崩潰但重要性絲毫不減。歸檔日志文件能確保我們將數(shù)據(jù)庫恢復(fù)到備份之前的任意時(shí)刻。在RMAN中備份歸檔日志有兩種方式:
1、利用BACKUP ARCHIVELOG命令備份
RMAN> BACKUP ARCHIVELOG ALL;
2、在BACKUP過程中利用PLUS ARCHIVELOG參數(shù)備份,例如:
RMAN> BACKUP DATABASE PLUS ARCHIVELOG;
則在備份數(shù)據(jù)庫的同時(shí)自動(dòng)對(duì)所有歸檔文件進(jìn)行備份。這種方式與上種有什么區(qū)別呢,區(qū)別太明顯了,BACKUP.....PLUS ARCHIVELOG命令在備份過程中會(huì)依次執(zhí)行下列步驟:
1>.運(yùn)行ALTER SYSTEM ARCHIVE LOG CURRENT語句對(duì)當(dāng)前redolog進(jìn)行歸檔。
2>.執(zhí)行BACKUP ARCHIVELOG ALL命令備份所有已歸檔日志。
3>.執(zhí)行BACKUP命令對(duì)指定項(xiàng)進(jìn)行備份。
4>.再次運(yùn)行ALTER SYSTEM ARCHIVE LOG CURRENT對(duì)當(dāng)前redolog歸檔。
5>.對(duì)新生成的尚未備份的歸檔文件進(jìn)行備份。
在完成歸檔日志文件備份后,我們通過需要?jiǎng)h除已備份過的歸檔文件(歸檔文件記錄下了數(shù)據(jù)庫進(jìn)行過的所有操作,如果您的數(shù)據(jù)庫操作頻繁而且量大,那歸檔文件大小也是相當(dāng)恐怖,備份后刪除釋放存儲(chǔ)空間是相當(dāng)有必要地)。RMAN提供了DELETE ALL INPUT參數(shù),加在BACKUP命令后,則會(huì)在完成備份后自動(dòng)刪除歸檔目錄中已備份的歸檔日志。
完成備份之后,可以通過下列命令查看已備份的歸檔日志片段:
RMAN> LIST BACKUP OF ARCHIVELOG ALL;
1.1.6 建立增量備份
如果數(shù)據(jù)庫運(yùn)行于不歸檔模式下,那么你只能在數(shù)據(jù)庫干凈關(guān)閉的情況下(以NORMAL、IMMEDIATE、TRANSACTIONAL方式關(guān)閉)才能進(jìn)行一致性的增量備份,如果數(shù)據(jù)庫運(yùn)行于歸檔模式下,那即可以在數(shù)據(jù)庫關(guān)閉狀態(tài)進(jìn)行,也可以在數(shù)據(jù)庫打開狀態(tài)進(jìn)行備份。再次說明了打開歸檔模式的優(yōu)勢(shì),歸檔日志也就是多占些磁盤空間,好處不是一些是很多,可是也相當(dāng)于又給數(shù)據(jù)庫加了層保險(xiǎn)啊。
建立增量備份也是相當(dāng)簡(jiǎn)單,實(shí)質(zhì)就是一個(gè)參數(shù)INCREMENTAL LEVEL=n,在執(zhí)行BACKUP命令時(shí)加上即可,例如,建立一個(gè)增量級(jí)別0的全庫備份:
RMAN> BACKUP INCREMENTAL LEVEL=0 DATABASE;
再例如,建立一個(gè)增量級(jí)別1的users01.dbf數(shù)據(jù)文件備份
RMAN> BACKUP INCREMENTAL LEVEL=1 TABLESPACE SYSTEM DATAFILE 'F:\ORAHOME1\ORADATA\JSSWEB\USERS01.DBF';
注:Rman默認(rèn)創(chuàng)建的增量備份是Differential方式,如果要建立Cumulative方式的增量備份,在執(zhí)行BACKUP命令時(shí)顯式指定即可,例如:
RMAN> BACKUP INCREMENTAL LEVEL=2 CUMULATIVE DATABASE;
關(guān)于增量備份概念性解釋,比如Differential與Cumulative兩種方式間的區(qū)別請(qǐng)參考本篇外傳,括弧,外傳整理中,如果您看到本篇的時(shí)候外傳還沒出,這個(gè)。。。。表著急,耐心等候,面包牛奶都會(huì)有的。
1.1.7 建立冗余備份
RMAN提供了一種更謹(jǐn)慎的備份策略:Duplexed方式備份,其實(shí)質(zhì)即是在生成備份集的同時(shí),向指定位置生成指定份數(shù)(最大不超過4份)的備份集復(fù)制,以避免在災(zāi)難性事故時(shí)數(shù)據(jù)庫損壞和備份丟失的情況下導(dǎo)致完全崩潰,提高備份可用性。當(dāng)然,這是人類美好的愿意,對(duì)于那些沒有異機(jī)異地備份條件的,假如機(jī)房發(fā)生火災(zāi)、地震之類大災(zāi)難,就算dba把備份文件復(fù)制了100份也照樣玩完,上述是個(gè)假設(shè),萬勿對(duì)號(hào)入座,火災(zāi)、地震也不是哪都會(huì)發(fā)生地,大家好好活著,別害怕。
RMAN中提供了三種方式實(shí)現(xiàn)Duplexed方式備份:
1、在RMAN中執(zhí)行BACKUP命令時(shí)顯式指定COPIES參數(shù)。例如:
RMAN> BACKUP COPIES 3 DATABASE;
上述命令將會(huì)在全庫備份的同時(shí),自動(dòng)生成當(dāng)前備份集的2份拷貝到默認(rèn)備份目錄。
2、在RUN{}命令塊中利用SET BACKUP COPIES命令為該命令塊中所有的BACKUP命令設(shè)置Duplexed方式,例如:
RMAN>RUN{2>SET BACKUP COPIES 2;3>BACKUP DEVICE TYPE DISK FORMAT 'D:\BACKUP1\%U','D:\BACKUP2\%U'
4>TABLESPACE USERS,SALES;5>}
SET BACKUP COPIES
上述命令將生成兩份備份集,分別存儲(chǔ)到d:\backup1和d:\backup2目錄。
3、通過CONFIGURE ..... BACKUP COPIES命令設(shè)置預(yù)定義的備份Duplexed方式。
CONFIGURE ... BACKUP COPIES命令可以為指定的設(shè)備類型設(shè)置默認(rèn)的備份拷貝數(shù)量。這個(gè)配置僅適用于數(shù)據(jù)文件與歸檔重做日志文件和備份,并且,只有在使用自動(dòng)分配的通道時(shí)才能夠使用CONFIGURE ... BACKUP COPIES命令設(shè)置的配置。例如:
RMAN> CONFIGURE DEFAULT DEVICE TYPE TO DISK;
RMAN> CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE disk TO 2;
RMAN> CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE disk TO 2;
上述命令將disk設(shè)置上數(shù)據(jù)文件與歸檔文件的拷備數(shù)量設(shè)置為2,當(dāng)再執(zhí)行BACKUP DATABASE備份時(shí),即會(huì)自動(dòng)生成2份數(shù)據(jù)文件的備份集。
1.1.8 編寫rman批處理文件
保存至:E:\oracleScript\backup\database_backup_jssweb.rman
RUN {
CONFIGURE RETENTION POLICYTO RECOVERY WINDOW OF 7DAYS;
CONFIGURE CONTROLFILE AUTOBACKUPON;
CONFIGURE CONTROLFILE AUTOBACKUP FORMATFOR DEVICE TYPE DISK TO 'd:/backup/%F';
ALLOCATE CHANNEL CH1 DEVICE TYPEDISK FORMAT 'd:/backup/%U';BACKUP DATABASE SKIP INACCESSIBLE FILESPERSET 10PLUS ARCHIVELOG FILESPERSET20
DELETE ALLINPUT;
RELEASE CHANNEL CH1;
}
ALLOCATE CHANNELFOR MAINTENANCE DEVICE TYPE DISK;
CROSSCHECK BACKUPSET;DELETE NOPROMPT OBSOLETE;
database_backup_jssweb.rman
上述的各項(xiàng)命令均在前面幾個(gè)章節(jié)中提到過,如果有看著眼生的話,再回去翻翻前面。命令是都知曉地,可能有幾個(gè)參數(shù)會(huì)不明白其意義,比如:BACKUP命令中的SKIT INACCESSIBLE參數(shù),大家表著急,靜心等候俺的外。外外。。外外外。。。。(大鍋,看個(gè)筆記而已,您不用拎著把菜刀到處晃吧,你你你,你別過來,我說還不成嘛)en,看到大家如此虔誠,俺就提前透露這部分內(nèi)容吧。
SKIP選項(xiàng)說明
SKIP INACCESSIBLE:表示跳過不可讀的文件。我們知道一些offline的數(shù)據(jù)文件只要存在于磁盤上就仍然可被讀取,但是可能有些文件已經(jīng)被刪除或移到它處造成不可讀,加上這個(gè)參數(shù)就會(huì)跳過這些文件;
SKIP OFFLINE:跳過offline的數(shù)據(jù)文件;
SKIP READONLY:跳過那些所在表空間為read-only的數(shù)據(jù)文件;
1.2? 恢復(fù)
首先注意:rman備份的時(shí)候并不會(huì)備份臨時(shí)表空間的數(shù)據(jù)文件(想想也是,反正是臨時(shí)的,備它干嘛),所以完全恢復(fù)之后,如果臨時(shí)表空間的數(shù)據(jù)文件也丟失,需要手工重新創(chuàng)建臨時(shí)表空間的數(shù)據(jù)文件。據(jù)消息靈通人士稱,10G之后的版本會(huì)在恢復(fù)過程中自動(dòng)創(chuàng)建臨時(shí)表空間的數(shù)據(jù)文件,手頭沒有環(huán)境(11g都出了,俺還在學(xué)9i,落后啊。),未經(jīng)嘗試,有心的朋友如果落實(shí)該消息,也不妨通知俺一下:)
其次需要了解:Oracle數(shù)據(jù)庫的恢復(fù)實(shí)際上包含了兩個(gè)概念:數(shù)據(jù)庫修復(fù)(RESTORE)與數(shù)據(jù)庫恢復(fù)(RECOVER):
數(shù)據(jù)庫修復(fù):是指利用備份的數(shù)據(jù)庫文件來替換已經(jīng)損壞的數(shù)據(jù)庫文件或者將其恢復(fù)到一個(gè)新的位置。RMAN在進(jìn)行修復(fù)操作時(shí),會(huì)利用恢復(fù)目錄(沒有建立恢復(fù)目錄的話就使用目標(biāo)數(shù)據(jù)庫的控制文件)來獲取備份信息,并從中選擇最合適的備份進(jìn)行修復(fù)操作。選擇備份時(shí)有兩個(gè)原則(1、選擇距離恢復(fù)目錄時(shí)刻最近;2、優(yōu)先選擇鏡像復(fù)制,其次才是備份集)
數(shù)據(jù)庫恢復(fù):是指利用重做日志或增量備份來重建丟失的數(shù)據(jù)。
1.2.1 對(duì)數(shù)據(jù)庫進(jìn)行完全介質(zhì)恢復(fù)
過程有三個(gè)步驟:
1、啟動(dòng)數(shù)據(jù)庫到加載狀態(tài)
RMAN> SHUTDOWN IMMEDIATE;
RMAN> STARTUP MOUNT;
2、執(zhí)行恢復(fù)操作(記的我們剛說過的,恢復(fù)分兩步,有先有后的。)
RMAN> RESTORE DATABASE;
RMAN> RECOVER DATABASE DELETE ARCHIVELOGS SKIP TABLESPACE TEMP;
注意:DELETE ARCHIVELOGS和SKIP TABLESPACE兩個(gè)參數(shù)是可選擇的,作用如下:
DELETE ARCHIVELOGS:表示RMAN將在完成恢復(fù)過程后自動(dòng)刪除那些在恢復(fù)過程中修復(fù)的歸檔日志文件。
SKIP TABLESPACE:跳過指定表空間,比如臨時(shí)表,當(dāng)然臨時(shí)表空間即使你不跳過它也不會(huì)恢復(fù)的。
3、打開數(shù)據(jù)庫
RMAN> ALTER DATABASE OPEN;
此處需要注意的一點(diǎn)是,如果你的數(shù)據(jù)庫并非處于歸檔模式,那么必須使用ALTER DATABASE OPEN RESETLOGS來打開數(shù)據(jù)庫,因?yàn)镽MAN會(huì)認(rèn)為在非歸檔模式下是一個(gè)不一致的備份,執(zhí)行resetlogs之后,oracle將會(huì)把scn重新置為0。
1.2.2 恢復(fù)表空間
同樣也可以分成三個(gè)步驟:
1、啟動(dòng)數(shù)據(jù)庫到加載狀態(tài)
RMAN> SHUTDOWN IMMEDIATE;
RMAN> STARTUP MOUNT;
2、進(jìn)行恢復(fù)操作,在恢復(fù)之前,如果需要被恢復(fù)的表空間未處于脫機(jī)狀態(tài),需要通過alter tablespace ... Offline語句將其置為脫機(jī):
RMAN> SQL 'ALTER TABLESPACE jweb OFFLINE IMMEDIATE';
RMAN> RESTORE TABLESPACE jweb;
RMAN> RECOVER TABLESPACE jweb;
RMAN> SQL 'ALTER TABLESPACE jweb ONLINE';
3、打開數(shù)據(jù)庫
RMAN> ALTER DATABASE OPEN;
1.2.3? 恢復(fù)數(shù)據(jù)文件
事實(shí)上,恢復(fù)表空間實(shí)際就是恢復(fù)其所對(duì)應(yīng)的數(shù)據(jù)文件(一個(gè)表空間可能對(duì)應(yīng)多個(gè)數(shù)據(jù)文件),所以步驟與上相似。
1、啟動(dòng)數(shù)據(jù)庫到加載狀態(tài)
RMAN> SHUTDOWN IMMEDIATE;
RMAN> STARTUP MOUNT;
2、進(jìn)行恢復(fù)操作,在恢復(fù)之前,如果需要被恢復(fù)的表空間未處于脫機(jī)狀態(tài),需要通過alter tablespace ... Offline語句將其置為脫機(jī),操作數(shù)據(jù)文件時(shí)可以直接指定數(shù)據(jù)文件,也可以以數(shù)據(jù)文件序號(hào)代替:
RMAN>SQL 'ALTER DATABASE DATAFILE 10 OFFLINE;
RMAN> RESTORE DATAFILE 10;
RMAN> RECOVER DATAFILE 10;
RMAN>SQL ' ALTER DATABASE DATAFILE 10 ONLINE;
3、打開數(shù)據(jù)庫
RMAN> ALTER DATABASE OPEN;
1.3? 高級(jí)恢復(fù)
不完全恢復(fù)
不完全恢復(fù)是指不完全的數(shù)據(jù)恢復(fù),不完全恢復(fù)與完全恢復(fù)在許多方面是相同的,他們基本的命令集相同,但不完全恢復(fù)添加了一些其他命令。?引起不完全恢復(fù)的原 因有很多,如丟失了聯(lián)機(jī)重做日志或歸檔的重做日志,或者出現(xiàn)重大的用戶錯(cuò)誤。?不完全恢復(fù)會(huì)影響整個(gè)數(shù)據(jù)庫,換句話,不能只對(duì)數(shù)據(jù)庫的一部分執(zhí)行不完全恢 復(fù)操作,因?yàn)檫@個(gè)會(huì)使數(shù)據(jù)庫的一部分具有與這個(gè)數(shù)據(jù)庫其余部分不同的SCN和時(shí)間點(diǎn)。
要將數(shù)據(jù)庫數(shù)據(jù)還原到與數(shù)據(jù)庫剩余部分不同的時(shí)間點(diǎn),可以用基于?表空間時(shí)間恢復(fù)?或者用?閃回技術(shù)。
不完全恢復(fù)方法包括:基于時(shí)間,SCN,日志序列?或取消的恢復(fù)。
1.3.1?建立恢復(fù)點(diǎn)
使用RMAN執(zhí)行不完全恢復(fù)操作時(shí)需要完成一個(gè)工作是簡(jiǎn)歷恢復(fù)目標(biāo)。恢復(fù)目錄是恢復(fù)進(jìn)程的終點(diǎn),通常我們基于一個(gè)時(shí)間點(diǎn),一個(gè)指定的SCN?或者?一個(gè)日志序列號(hào)來表示它。?我們可以采用許多不同的方法建立恢復(fù)目標(biāo)。
1.3.1.1?? 在run?代碼塊中使用set?命令與until?time,until?SCN?或?until?sequence參數(shù)
Run
{
Set?until?time?"to_date('2010-07-05?14:02:00','yyyy-mm-dd?hh24:mi:ss')";
Restore?database;
Recover?database?alter?database?open?resetlogs;
}
執(zhí)行這條命令時(shí),RMAN?會(huì)查找與恢復(fù)目標(biāo)時(shí)間最近(并非恢復(fù)目標(biāo)時(shí)間本身也不能是位于恢復(fù)目標(biāo)之間的時(shí)間)的備份集,并且從這個(gè)備份集中還原數(shù)據(jù)庫。?如果數(shù)據(jù)庫置于noarchivelog?模式中,恢復(fù)操作會(huì)在備份集的時(shí)間停止;否則在執(zhí)行recover命令期間,oracle?會(huì)在所定義的恢復(fù)目標(biāo)(不包含恢復(fù)目標(biāo)本身)上應(yīng)用歸檔的重做日志(以及需要應(yīng)用的任何增量備份)。
注意:?如果嘗試恢復(fù)到特定備份的完成點(diǎn),則必須恢復(fù)到備份集中文件的CKP?SCN?或?CKP?TIME,在不同備份集的RMAN?list命令中會(huì)列出這些內(nèi)容。?有時(shí)使用備份的CKP?TIME?并不夠,還可能導(dǎo)致ORA-1152錯(cuò)誤。
1.3.1.2?? 在restore?和recover?命令中直接使用until?time,until?SCN?和?until?sequence?參數(shù)
這種方法避免使用run?代碼塊,也傾向與使用這種方法。
Startup?mount;
Restore?database?until?time?"to_date('2010-07-05?14:02:00','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;
1.3.2?基于時(shí)間的恢復(fù)
這種恢復(fù)類型允許用戶將數(shù)據(jù)庫恢復(fù)到與指定時(shí)間一致的狀態(tài)。?當(dāng)然,如果不存在能將數(shù)據(jù)庫還原到用戶請(qǐng)求的時(shí)間的有效備份或歸檔重做日志,Oracle?就會(huì)報(bào)RMAN-03002?和?RMAN-20207的錯(cuò)誤。
必須具備在我們指定的恢復(fù)時(shí)間之前生成的數(shù)據(jù)庫備份,此外還需要所有歸檔的重做日志。
1.3.3?基于SCN?的恢復(fù)
Oracle?允許用戶將數(shù)據(jù)庫恢復(fù)到指定的SCN,實(shí)際上,這并不是一種常見的恢復(fù)方法。示例如下:
Startup?mount;
Restore?database?until?SCN?1000;
Recover?database?until?SCN?1000;
Alter?database?open?resetlogs;
注意:?該示例可以將數(shù)據(jù)庫還原到SCN?1000,但是不會(huì)包含SCN.
1.3.4?????? 基于日志序列的恢復(fù)
RMAN?允許用戶將數(shù)據(jù)庫恢復(fù)到指定序列號(hào)的歸檔重做日志。如果歸檔的重做日志中存在間隙,使用這種恢復(fù)方法就非常方便。?間隙通常意味著我們只能將數(shù)據(jù)庫還原到間隙的開始點(diǎn)。
Startup?mount;
Restore?database?until?sequence?100?thread?1;
Recover?database?until?sequence?100?thread?1;
Alter?database?open?resetlogs;
1.3.5?????? 只讀表空間的恢復(fù)
在默認(rèn)情況下,即使丟失了只讀的數(shù)據(jù)文件,RMAN也不會(huì)在執(zhí)行完全恢復(fù)數(shù)據(jù)庫還原操作時(shí)還原只讀的數(shù)據(jù)文件。?要在完全恢復(fù)期間還原只讀的數(shù)據(jù)文件,就必須在restore?命令中使用check?readonly?參數(shù),如:
Restore?database?check?readonly;
注意,執(zhí)行recover?tablespace或recover?datafile命令時(shí),RMAN的工作情況是不一樣的。?使用這兩個(gè)命令時(shí),不管表空間是否為只讀狀態(tài)都會(huì)執(zhí)行恢復(fù)操作。
1.3.6 歸檔重做日志的還原
在使用RMAN的普通恢復(fù)過程中,不必恢復(fù)歸檔的重做日志。?不過,偶爾也會(huì)要求還原一個(gè)或多個(gè)歸檔的重做日志。?例如,我們可能需要使用LogMiner?在備份中存儲(chǔ)的歸檔重做日志文件里查找一些信息。
Restore?archivelog?all;
Restore?archivelog?from?logseq=20?thread=1;
Restore?archivelog?from?logseq=20?until?logseq=30?thread=1;
還可以將歸檔的重做日志還原到默認(rèn)位置以外的位置上:
Run
{
Set?archivelog?destination?to?"d:/arch";
Restore?archivelog?all;
}
注意:1.?上例中的set?命令沒有替代方法,必須要求使用set。
2.?如果RMAN?認(rèn)為一個(gè)歸檔的重做日志已存在,就不會(huì)在磁盤上還原這個(gè)歸檔的重做日志,即使設(shè)置的還原位置不同與默認(rèn)的歸檔日志位置,Oracle?也不會(huì)在這個(gè)新的位置上恢復(fù)歸檔的重做日志。
1.3.7?數(shù)據(jù)文件副本的還原
可以從數(shù)據(jù)文件副本(不是備份集)中還原數(shù)據(jù)庫的數(shù)據(jù)文件。?要實(shí)現(xiàn)這個(gè)功能,需要先使用restore?from?datafilecopy命令,然后再使用恢復(fù)數(shù)據(jù)庫(或表空間,數(shù)據(jù)文件)的recover。
RMAN>Restore?(datafile?5)?from?datafilecopy;??--?此處的圓括號(hào)是必須的,如果沒有就報(bào)錯(cuò)
RMAN>Recover?datafile?5;
SQL>Alter?database?datafile?5?online;
執(zhí)行restore?時(shí),該命令會(huì)識(shí)別需要還原的數(shù)據(jù)文件的最新副本,然后從這個(gè)副本中還原這些數(shù)據(jù)文件。?數(shù)據(jù)文件的最新副本可能是在一個(gè)數(shù)據(jù)文件副本中,而不是在一個(gè)副本中。?在這種情況下,Oracle?會(huì)恢復(fù)這個(gè)數(shù)據(jù)文件副本。
1.3.1?使用resetlogslogs?命令
在不完全恢復(fù)期間,通常需要使用resetlogs命令打開數(shù)據(jù)庫,這是因?yàn)槲覀円獜囊呀?jīng)簡(jiǎn)歷的現(xiàn)有日志流中脫離出來,并且需要向Oracle?說明這種情況.?Resetlogs?命令表示一個(gè)數(shù)據(jù)庫邏輯生存期的結(jié)束和另一個(gè)數(shù)據(jù)庫邏輯生存期的開始.?數(shù)據(jù)庫的邏輯生存期也稱為一個(gè)對(duì)應(yīng)物(Incarnation).?每次使用resetlogs命令都會(huì)創(chuàng)建一個(gè)新的數(shù)據(jù)庫對(duì)應(yīng)物,這對(duì)于恢復(fù)操作來說非常重要.
每次使用resetlogs命令時(shí),SCN?計(jì)數(shù)器不會(huì)被重置,不過Oracle?會(huì)重置其他計(jì)數(shù)器(如:日志序列號(hào)),同時(shí)還會(huì)重置聯(lián)機(jī)重做日志的內(nèi)容.
Oracle?10g?簡(jiǎn)化了通過resetlogs命令進(jìn)行的恢復(fù),在歸檔的重做日志名中添加了一個(gè)新的特?fù)Q串(%r),該字符串表示resetlog?ID?號(hào)。在log_archive_dest_format?參數(shù)串中包括%r時(shí),歸檔的重做日志名在每個(gè)resetlogs?命令中保持唯一。這種改動(dòng)以及其他的內(nèi)部Oracle?數(shù)據(jù)庫改動(dòng)使oracle?可以很容易的通過給定的resetlogs操作恢復(fù)數(shù)據(jù)庫。因此,可以很容易的在執(zhí)行操作后立刻備份數(shù)據(jù)庫,然而,我們?nèi)匀徽J(rèn)為在任何不完全恢復(fù)后備份數(shù)據(jù)庫是很有必要的。
1.3.2?恢復(fù)訛誤的數(shù)據(jù)塊
即使與訛誤數(shù)據(jù)塊關(guān)聯(lián)的數(shù)據(jù)文件一直聯(lián)機(jī),也可以通過用塊介質(zhì)恢復(fù)(block?Media?recover:?BMR)執(zhí)行塊級(jí)別恢復(fù)操作來修復(fù)Oracle?數(shù)據(jù)庫中的這些邏輯上或者物理上的訛誤數(shù)據(jù)塊。
一般出現(xiàn)數(shù)據(jù)塊錯(cuò)誤時(shí),都會(huì)有錯(cuò)誤消息:
ORA-01578:?ORACLE?data?block?corrupted?(file?#18,block?#88)
如果沒有BMR時(shí),我們必須從一個(gè)備份中恢復(fù)這個(gè)數(shù)據(jù)文件,在恢復(fù)過程中,用戶不能使用該數(shù)據(jù)塊文件中的所有數(shù)據(jù)。
用BMR恢復(fù)就很簡(jiǎn)單,只需要執(zhí)行blockrecover命令即可:
Blockrecover?datafile?18?block?88;
如果有必要,可以同時(shí)恢復(fù)多個(gè)數(shù)據(jù)文件的多個(gè)數(shù)據(jù)塊。如:
Blockrecover?datafile?18?block?16,17,88,108;
Blcokrecover?datafile?18?block?88?datafile?19?blcok?188;
Oracle?會(huì)跟蹤在備份和恢復(fù)期間發(fā)生的數(shù)據(jù)塊訛誤。如果檢測(cè)到備份或復(fù)制操作出現(xiàn)訛誤,由于Oracle?不允許在備份中出現(xiàn)訛誤,所有這個(gè)備份就會(huì)失敗。?當(dāng)然,可以配置RMAN允許一定數(shù)量的訛誤,但是不推薦這種用法。
可以使用backup?validate?database?命令查看RMAN?檢測(cè)到的所有數(shù)據(jù)庫訛誤。這條命令會(huì)在v$backup_corruption?和v$database_block_corruption視圖中填充檢測(cè)到的所有訛誤數(shù)據(jù)塊。?如果訛誤發(fā)生在復(fù)制操作期間,v$copy_corruption視圖就會(huì)指明包含訛誤的備份集。
注意的是:v$backup_corruption?是一個(gè)顯示歷史訛誤的視圖,v$database_block_corruption?則是一個(gè)顯示當(dāng)前數(shù)據(jù)塊訛誤的視圖。?一旦修正了數(shù)據(jù)庫的塊訛誤,就需要重新運(yùn)行backup?validate?database命令,然后查詢v$database_block_corruption?視圖以確保不存在其他訛誤。
查詢v$database_block_corruption視圖可以查看訛誤數(shù)據(jù)塊的詳細(xì)信息。?如下所示,使用具有corruption?list?restore?參數(shù)的blockrecover命令可以方便地修正v$database_block_corruption?視圖中的訛誤數(shù)據(jù)塊。
Blockrecover?corruption?list?restore?until?time?'SYSDATE-5';
這條命令將還原訛誤列表中最近5天的所有訛誤數(shù)據(jù)塊。?在上面的命令中,還可以使用until?time?和?until?sequence.
1.3.3?恢復(fù)前一個(gè)對(duì)應(yīng)物
一個(gè)數(shù)據(jù)庫的對(duì)應(yīng)物(incarnation)對(duì)應(yīng)這個(gè)數(shù)據(jù)庫的特定邏輯生存期。?有時(shí)我們需要使用上次執(zhí)行resetlogs命令打開數(shù)據(jù)庫前生成的一個(gè)備份來還原數(shù)據(jù)庫,或者可能需要還原到執(zhí)行上一個(gè)resetlogs命令之前的時(shí)間點(diǎn)。?這就需要用到incarnation.
1.3.3.1??使用恢復(fù)目錄恢復(fù)前一個(gè)對(duì)應(yīng)物
先假設(shè)使用恢復(fù)目錄執(zhí)行了備份操作,并且最近使用了resetlogs命令執(zhí)行過時(shí)間點(diǎn)恢復(fù),現(xiàn)在需要使用執(zhí)行resetlogs命令之前的一個(gè)備份來恢復(fù)數(shù)據(jù)庫。
操作步驟:
(1)啟動(dòng)但不加載實(shí)例,這是因?yàn)槲覀円鹊玫揭粋€(gè)與恢復(fù)數(shù)據(jù)庫對(duì)應(yīng)物關(guān)聯(lián)的控制文件
(2)使用reset?database?to?incarnation?命令為RMAN?指示對(duì)應(yīng)物的備份集。
(3)Restore?controlfile,使rman還原最新的控制文件
(4)加載數(shù)據(jù)庫
(5)Restore?數(shù)據(jù)庫
(6)Recover?數(shù)據(jù)庫
(7)使用resetlogs?打開數(shù)據(jù)庫
示例如下:
C:/Users/Administrator.DavidDai>rman?target?/?catalog?rman/rman@orcl;
RMAN>?list?incarnation;
RMAN>?startup?force?nomount;
RMAN>?reset?database?to?incarnation?4;
RMAN>?restore?controlfile;
RMAN>? alter?database?mount;
RMAN>? restore?database?until?scn?940990;
RMAN>? recover?database?until?scn?940990;
RMAN>? alter?database?open?resetlogs;
1.3.3.2?? 不使用恢復(fù)目錄恢復(fù)前一個(gè)對(duì)應(yīng)物
為了通過前一個(gè)對(duì)應(yīng)物進(jìn)行恢復(fù),需要一個(gè)包含前一個(gè)對(duì)應(yīng)物信息的控制文件。在大多數(shù)情況下,這可能是當(dāng)前的控制文件。如果當(dāng)前的控制文件不了解需要恢復(fù)的對(duì)應(yīng)物,則需要還原包含該信息的控制文件,從而使得利用該方法恢復(fù)數(shù)據(jù)。可以使用list?incarnation?of?database?命令查看控制文件了解哪些對(duì)應(yīng)物.
沒有連接恢復(fù)目錄的list?incarnation?輸出與已連接恢復(fù)目錄時(shí)的list?incarnation?輸出有一些細(xì)微的區(qū)別。這是因?yàn)樾畔目刂莆募蝎@得的,因此某些鍵(如Inc?key)將會(huì)不同。
操作步驟如下:
(1)從RMAN中運(yùn)行l(wèi)ist?incarnation?命令,確定希望復(fù)位到哪個(gè)對(duì)應(yīng)物
(2)關(guān)閉數(shù)據(jù)庫
(3)啟動(dòng)加載數(shù)據(jù)庫
(4)執(zhí)行reset?database?to?incarnation?命令復(fù)位對(duì)應(yīng)物
(5)使用restore?命令還原數(shù)據(jù)庫
(6)recover恢復(fù)數(shù)據(jù)庫
(7)使用resetlogs?打開數(shù)據(jù)庫
示例如下:
RMAN>?list?incarnation?of?database;
RMAN>? shutdown?immediate;
RMAN>? startup?mount;
RMAN>?reset?database?to?incarnation?2; --將數(shù)據(jù)庫重置為原型?2
RMAN>?restore?database?until?time?"to_date('2010-7-5?23:50:39','yyyy-mm-dd?hh24:mi:ss')";
RMAN>?recover?database?until?time?"to_date('2010-7-5?23:50:39','yyyy-mm-dd?hh24:mi:ss')";
RMAN>?alter?database?open?resetlogs;
RMAN>?list?incarnation;
注:?until?后面可以跟三種類型:
1.?restore?database?until?time?"to_date('2010-7-5?23:50:39','yyyy-mm-dd?hh24:mi:ss')";
2.?recover?database?until?scn?1000
3.?recover?database?until?sequence?150;
查看sequence:
SQL>?select?sequence#?from?v$archived_log;
SEQUENCE#
161
162
1
2
3
4
從這個(gè)結(jié)果也證明resetlogs?會(huì)重置sequnce,但是scn不會(huì)被重置。
查看scn:
SQL>?select?current_scn?from?v$database;
CURRENT_SCN
-----------
8555698
SQL>?select?dbms_flashback.get_system_change_number?from?dual;
GET_SYSTEM_CHANGE_NUMBER
------------------------
8555706
1.3.4?表空間時(shí)間點(diǎn)恢復(fù)
使用表空間時(shí)間點(diǎn)恢復(fù)(TSPITR)可以將一個(gè)或多個(gè)非SYSTEM表空間恢復(fù)到與數(shù)據(jù)庫其他部分不同的某個(gè)時(shí)間點(diǎn)上。這點(diǎn)和Flashback?有點(diǎn)類型。?比如用戶誤刪了3張表,我們就可以用TSPITR恢復(fù)。
先看TSPITR?的工作流程,如下圖所示:
(1)?在輔助實(shí)例上用target的備份集restore?數(shù)據(jù)文件
(2)?在輔助庫上用target的歸檔文件recover?數(shù)據(jù)文件
(3)?在輔助庫上導(dǎo)出相關(guān)數(shù)據(jù)
(4)?修改主庫的控制文件
(5)?用輔助庫上導(dǎo)出文件導(dǎo)入輔助庫上。
幾個(gè)相關(guān)相關(guān)的定義:
輔助實(shí)例(Auxiliary?instance):我們創(chuàng)建的臨時(shí)實(shí)例,RMAN可以使用這個(gè)實(shí)例執(zhí)行TSPITR,完成TSPITR操作后,可以刪除輔助實(shí)例。
輔助數(shù)據(jù)庫(Auxiliary?database):主數(shù)據(jù)庫的一個(gè)復(fù)本或子集,用于表空間的臨時(shí)恢復(fù)。
主數(shù)據(jù)庫(Primary?database):需要TSPITR的數(shù)據(jù)庫。
恢復(fù)集(Recovery?set):構(gòu)成恢復(fù)到某一個(gè)時(shí)間點(diǎn)表空間的表空間或數(shù)據(jù)文件,SYSTEM表空間數(shù)據(jù)文件不能作為恢復(fù)集的一部分。
輔助集(Auxiliary?set):需要執(zhí)行TSPITR的其他目標(biāo)數(shù)據(jù)庫文件集。?輔助集包括備份控制文件,回滾和撤銷段表空間數(shù)據(jù)文件,system表空間數(shù)據(jù)文件,輔助數(shù)據(jù)庫的聯(lián)機(jī)重做日志,以及一個(gè)可選的位于輔助數(shù)據(jù)庫中的臨時(shí)的表空間。
目標(biāo)實(shí)例(target?instance):包含將要恢復(fù)的表空間
1.3.4.1?? 為TSPITR?做準(zhǔn)備
在開始執(zhí)行TSPITR之前需要完成一些步驟。
(1)?確定還原的時(shí)間點(diǎn)
這是最關(guān)鍵的因素。?我們需要認(rèn)真對(duì)待這項(xiàng)操作,因?yàn)槿绻麤]有使用恢復(fù)目錄,則表空間的恢復(fù)是一次性的過程。?如果錯(cuò)誤地標(biāo)識(shí)了恢復(fù)的時(shí)間點(diǎn),則不能重新來過。?如果使用恢復(fù)目錄,則不存在這種限制。
(2)?確定傳送集中的對(duì)象是自包含的
應(yīng)該使用TS_PITR_CHECK?視圖來確保恢復(fù)集是完整的,并且標(biāo)識(shí)所有可能要用到的其他表空間。?首先需要檢查TS_PITR_CHECK?視圖來確保沒有其他相關(guān)的表空間。?比如我們檢查DAVE?表空間,示例代碼如下:
/*?Formatted?on?2010/7/7?17:10:00?(QP5?v5.115.810.9015)?*/
SELECT???obj1_owner,
obj1_name,
obj1_type,
reason
FROM???sys.ts_pitr_check
WHERE???(ts1_name?IN?('BL')?AND?ts2_name?NOT?IN?('BL'))
OR?(ts1_name?NOT?IN?('BL')?AND?Ts2_Name?IN?('BL'))
如果沒有沖突,則不會(huì)返回任何行。?如果存在沖突,則會(huì)看到描述的每個(gè)沖突的行。如果有沖突,我們也需要還原關(guān)聯(lián)的表空間。
(3)?保存可能丟失的對(duì)象或數(shù)據(jù)
如果我們將Dave表空間恢復(fù)之前的某個(gè)時(shí)間,那么在這個(gè)時(shí)間以后的任何更改,如新建對(duì)象,更新,插入或者刪除,都會(huì)丟失。?丟失這些對(duì)象可能沒有問題,但假設(shè)我們需要保存這些數(shù)據(jù),則需要導(dǎo)出將要保存的數(shù)據(jù),或者將數(shù)據(jù)復(fù)制到數(shù)據(jù)庫中的其他位置。?Oracle?提供了視圖?TS_PITR_OBJECTS_TO_BEDROPPED,?該視圖列出了將在恢復(fù)操作期間丟失的所有對(duì)象。?使用該視圖可以確定表空間中的對(duì)象在恢復(fù)之后的狀態(tài)。
SQL>?col?owner?format?a10
SQL>?col?name?format?a10
SQL>?alter?session?set?nls_date_format='yyyy-mm-dd?hh24:mi:ss';
SQL>?SELECT??*??FROM???ts_pitr_objects_to_be_dropped?WHERE??tablespace_name?=?'BL'?;
OWNER??????NAME???????CREATION_TIME???????TABLESPACE_NAME
----------?----------?-------------------?------------------------------
BL?????????BL?????????2010-07-07?19:24:18????BL
1.3.4.2?? 執(zhí)行實(shí)際的TSPITR
Oracle?Database?10g將為我們執(zhí)行自動(dòng)的TSPITR,這意味著它將創(chuàng)建輔助實(shí)例。?在這種情況下,我們只需要連接目標(biāo)數(shù)據(jù)庫和可選的恢復(fù)目錄(如果有的話),并且執(zhí)行recover?tablespace?命令。?RMAN?將為我們完成剩余的工作。
下 面演示使用recover?tablespace?命令恢復(fù)BL?表空間的示例。?我們使用可選的auxiliary?destination來指示 RMAN?和?Oracle?應(yīng)該在何處創(chuàng)建與輔助數(shù)據(jù)庫關(guān)聯(lián)的文件。?使用該參數(shù)使得該恢復(fù)成為一個(gè)具有自動(dòng)化實(shí)例的自定義TSPITR。?如果沒有使 用該參數(shù),TSPITR?就稱為完全自動(dòng)的TSPITR 恢復(fù)。
需 要注意的是,如果使用auxiliary?destination參數(shù),則應(yīng)該已經(jīng)創(chuàng)建了目標(biāo)目錄,并且Oracle?必須能夠?qū)懭氲皆撃繕?biāo)目錄。?在目 標(biāo)路徑名中沒有后綴的斜杠(/或/),如果包含斜杠將會(huì)導(dǎo)致TSPITR失敗,并且獲得錯(cuò)誤消息無法確切地描述該問題。命令如下:
Recover?tablespace?BL?until?time?"to_date('2010-7-7?20:38:18','yyyy-mm-dd?hh24:mi:ss')"?auxiliary?destination?'F:/bl'
在執(zhí)行這個(gè)命令之前有幾點(diǎn)注意的地方,因?yàn)門SPITR?會(huì)用已經(jīng)存在的備份集和歸檔文件來創(chuàng)建輔助數(shù)據(jù)庫,所以在執(zhí)行該命令之前需要確認(rèn)target?數(shù)據(jù)庫有備份和歸檔,并且控制文件也要有備份。
RMAN>?Recover?tablespace?BL?until?time?"to_date('2010-7-7?20:40:18','yyyy-mm-dd?hh24:mi:ss')"?auxiliary?destination?'F:/bl';
啟動(dòng)?recover?于?07-7月?-10
使用目標(biāo)數(shù)據(jù)庫控制文件替代恢復(fù)目錄
分配的通道:?ORA_DISK_1
通道?ORA_DISK_1:?SID=145?設(shè)備類型=DISK
RMAN-05026:?警告:?假定以下表空間集適用于指定的時(shí)間點(diǎn)
表空間列表要求具有?UNDO?段
表空間?SYSTEM
表空間?UNDOTBS1
使用?SID='iEfs'?創(chuàng)建自動(dòng)實(shí)例??--?這里是系統(tǒng)自動(dòng)創(chuàng)建的輔助數(shù)據(jù)庫名
供自動(dòng)實(shí)例使用的初始化參數(shù):
db_name=BL
db_unique_name=iEfs_tspitr_BL
compatible=11.2.0.0.0
db_block_size=8192
db_files=200
sga_target=280M
processes=50
db_create_file_dest=F:/bl
log_archive_dest_1='location=F:/bl'
#No?auxiliary?parameter?file?used
啟動(dòng)自動(dòng)實(shí)例?BL
Oracle?實(shí)例已啟動(dòng)
系統(tǒng)全局區(qū)域總計(jì)?????292933632?字節(jié)
Fixed?Size?????????????????????1374164?字節(jié)
Variable?Size????????????????100665388?字節(jié)
Database?Buffers?????????????184549376?字節(jié)
Redo?Buffers???????????????????6344704?字節(jié)
自動(dòng)實(shí)例已創(chuàng)建
對(duì)恢復(fù)集表空間運(yùn)行?TRANSPORT_SET_CHECK
TRANSPORT_SET_CHECK?已成功完成
內(nèi)存腳本的內(nèi)容:
{
#set requested point intimeset until time "to_date('2010-7-7 20:40:18','yyyy-mm-dd hh24:mi:ss')";
#restorethe controlfilerestoreclone controlfile;
# mount the controlfile
sql clone'alter database mount clone database';
# archivecurrent online logsql'alter system archive log current';
# avoid unnecessary autobackupsforstructural changes during TSPITR
sql'begin dbms_backup_restore.AutoBackupFlag(FALSE); end;';
}
View Code
正在執(zhí)行內(nèi)存腳本
正在執(zhí)行命令: SETuntil clause
啟動(dòng)restore 于 07-7月 -10分配的通道: ORA_AUX_DISK_1
通道 ORA_AUX_DISK_1: SID=59 設(shè)備類型=DISK通道 ORA_AUX_DISK_1: 正在開始還原數(shù)據(jù)文件備份集
通道 ORA_AUX_DISK_1: 正在還原控制文件
通道 ORA_AUX_DISK_1: 正在讀取備份片段 D:/APP/ADMINISTRATOR/FLASH_RECOVERY_AREA/B
L/AUTOBACKUP/2010_07_07/O1_MF_S_723759094_638VQR8R_.BKP
通道 ORA_AUX_DISK_1: 段句柄= D:/APP/ADMINISTRATOR/FLASH_RECOVERY_AREA/BL/AUTOBA
CKUP/2010_07_07/O1_MF_S_723759094_638VQR8R_.BKP 標(biāo)記 =TAG20100707T201134
通道 ORA_AUX_DISK_1: 已還原備份片段1通道 ORA_AUX_DISK_1: 還原完成, 用時(shí):00:00:02輸出文件名=F:/BL/BL/CONTROLFILE/O1_MF_638Y5Y3J_.CTL
完成restore 于 07-7月 -10sql 語句:alter database mount clone databasesql 語句:alter system archive log currentsql 語句:begin dbms_backup_restore.AutoBackupFlag(FALSE); end;
View Code
內(nèi)存腳本的內(nèi)容:
{
#set requested point intimeset until time "to_date('2010-7-7 20:40:18','yyyy-mm-dd hh24:mi:ss')";
#set destinations for recovery set and auxiliary setdatafilesset newname for clone datafile 1 tonew;set newname for clone datafile 3 tonew;set newname for clone datafile 2 tonew;set newname for clone tempfile 1 tonew;set newname for datafile 5 to"D:/APP/ADMINISTRATOR/ORADATA/BL/BL01.DBF";
# switchalltempfiles
switch clone tempfileall;
#restore the tablespaces in the recovery set and the auxiliary set
restore clone datafile 1, 3, 2, 5;
switch clone datafileall;
}
View Code
正在執(zhí)行內(nèi)存腳本
正在執(zhí)行命令: SETuntil clause
正在執(zhí)行命令:SETNEWNAME
正在執(zhí)行命令:SETNEWNAME
正在執(zhí)行命令:SETNEWNAME
正在執(zhí)行命令:SETNEWNAME
正在執(zhí)行命令:SETNEWNAME
臨時(shí)文件1 在控制文件中已重命名為 F:/BL/BL/DATAFILE/O1_MF_TEMP_%U_.TMP
啟動(dòng)restore 于 07-7月 -10使用通道 ORA_AUX_DISK_1
通道 ORA_AUX_DISK_1: 正在開始還原數(shù)據(jù)文件備份集
通道 ORA_AUX_DISK_1: 正在指定從備份集還原的數(shù)據(jù)文件
通道 ORA_AUX_DISK_1: 將數(shù)據(jù)文件00001 還原到 F:/BL/BL/DATAFILE/O1_MF_SYSTEM_%U_.DBF
通道 ORA_AUX_DISK_1: 將數(shù)據(jù)文件00003 還原到 F:/BL/BL/DATAFILE/O1_MF_UNDOTBS1_%U_.DBF
通道 ORA_AUX_DISK_1: 將數(shù)據(jù)文件00002 還原到 F:/BL/BL/DATAFILE/O1_MF_SYSAUX_%U_.DBF
通道 ORA_AUX_DISK_1: 將數(shù)據(jù)文件00005 還原到 D:/APP/ADMINISTRATOR/ORADATA/BL/BL01.DBF
通道 ORA_AUX_DISK_1: 正在讀取備份片段 F:/BACKUP/BL_02LI7BSK_1_1.BAK
通道 ORA_AUX_DISK_1: 段句柄= F:/BACKUP/BL_02LI7BSK_1_1.BAK 標(biāo)記 =TAG20100707T200956
通道 ORA_AUX_DISK_1: 已還原備份片段1通道 ORA_AUX_DISK_1: 還原完成, 用時(shí):00:02:46完成restore 于 07-7月 -10數(shù)據(jù)文件1已轉(zhuǎn)換成數(shù)據(jù)文件副本
輸入數(shù)據(jù)文件副本 RECID=4 STAMP=723761776 文件名=F:/BL/BL/DATAFILE/O1_MF_SYSTEM_638Y6B6B_.DBF
數(shù)據(jù)文件3已轉(zhuǎn)換成數(shù)據(jù)文件副本
輸入數(shù)據(jù)文件副本 RECID=5 STAMP=723761776 文件名=F:/BL/BL/DATAFILE/O1_MF_UNDOTBS1_638Y6B8V_.DBF
數(shù)據(jù)文件2已轉(zhuǎn)換成數(shù)據(jù)文件副本
輸入數(shù)據(jù)文件副本 RECID=6 STAMP=723761777 文件名=F:/BL/BL/DATAFILE/O1_MF_SYSAUX_638Y6B7Q_.DBF
View Code
內(nèi)存腳本的內(nèi)容:
{
#set requested point intimeset until time "to_date('2010-7-7 20:40:18','yyyy-mm-dd hh24:mi:ss')";
# online the datafiles restoredorswitched
sql clone "alter database datafile 1online";
sql clone "alter database datafile 3online";
sql clone "alter database datafile 2online";
sql clone "alter database datafile 5online";
# recoverand openresetlogs
recover clonedatabase tablespace "BL", "SYSTEM", "UNDOTBS1", "SYSAUX" deletearchivelog;alter clone database openresetlogs;
}
View Code
正在執(zhí)行內(nèi)存腳本
正在執(zhí)行命令: SETuntil clause
sql 語句:alter database datafile 1online
sql 語句:alter database datafile 3online
sql 語句:alter database datafile 2online
sql 語句:alter database datafile 5online
啟動(dòng) recover 于07-7月 -10使用通道 ORA_AUX_DISK_1
正在開始介質(zhì)的恢復(fù)
線程1 序列 7 的歸檔日志已作為文件 D:/ARCHIVELOG/BL_ARC0000000007_0723658881.0001存在于磁盤上
線程1 序列 8 的歸檔日志已作為文件 D:/ARCHIVELOG/BL_ARC0000000008_0723658881.0001存在于磁盤上
線程1 序列 9 的歸檔日志已作為文件 D:/ARCHIVELOG/BL_ARC0000000009_0723658881.0001存在于磁盤上
歸檔日志文件名=D:/ARCHIVELOG/BL_ARC0000000007_0723658881.0001 線程=1 序列=7歸檔日志文件名=D:/ARCHIVELOG/BL_ARC0000000008_0723658881.0001 線程=1 序列=8歸檔日志文件名=D:/ARCHIVELOG/BL_ARC0000000009_0723658881.0001 線程=1 序列=9介質(zhì)恢復(fù)完成, 用時(shí):00:00:14完成 recover 于07-7月 -10數(shù)據(jù)庫已打開
View Code
內(nèi)存腳本的內(nèi)容:
{
# online the tablespaces that will be exported
sql clone'alter tablespace BL online';
# makeread onlythe tablespace that will be exported
sql clone'alter tablespace BL read only';
#create directory fordatapump import
sql "create or replace directory TSPITR_DIROBJ_DPDIR as ''F:/bl''";
#create directory fordatapump export
sql clone "create or replace directory TSPITR_DIROBJ_DPDIR as ''F:/bl''";
}
View Code
正在執(zhí)行內(nèi)存腳本
sql 語句: altertablespace BL online
sql 語句:alter tablespace BL read onlysql 語句:create or replace directory TSPITR_DIROBJ_DPDIR as ''F:/bl''sql 語句:create or replace directory TSPITR_DIROBJ_DPDIR as ''F:/bl''正在執(zhí)行元數(shù)據(jù)導(dǎo)出...
EXPDP>啟動(dòng) "SYS"."TSPITR_EXP_iEfs":
EXPDP> 處理對(duì)象類型 TRANSPORTABLE_EXPORT/PLUGTS_BLK
EXPDP> 處理對(duì)象類型 TRANSPORTABLE_EXPORT/TABLEEXPDP> 處理對(duì)象類型 TRANSPORTABLE_EXPORT/POST_INSTANCE/PLUGTS_BLK
EXPDP> 已成功加載/卸載了主表 "SYS"."TSPITR_EXP_iEfs"
EXPDP> ******************************************************************************EXPDP>SYS.TSPITR_EXP_iEfs 的轉(zhuǎn)儲(chǔ)文件集為:
EXPDP> F:/BL/TSPITR_IEFS_51961.DMP
EXPDP> ******************************************************************************EXPDP>可傳輸表空間 BL 所需的數(shù)據(jù)文件:
EXPDP> D:/APP/ADMINISTRATOR/ORADATA/BL/BL01.DBF
EXPDP> 作業(yè) "SYS"."TSPITR_EXP_iEfs" 已于 20:59:10成功完成
導(dǎo)出完畢
View Code
內(nèi)存腳本的內(nèi)容:
{
#shutdownclone before importshutdownclone immediate
#droptarget tablespaces before importing them back
sql'drop tablespace BL including contents keep datafiles';
}
View Code
正在執(zhí)行內(nèi)存腳本
數(shù)據(jù)庫已關(guān)閉
數(shù)據(jù)庫已卸裝
Oracle 實(shí)例已關(guān)閉
sql 語句:droptablespace BL including contents keep datafiles
正在執(zhí)行元數(shù)據(jù)導(dǎo)入...
IMPDP> 已成功加載/卸載了主表 "SYS"."TSPITR_IMP_iEfs"
IMPDP>啟動(dòng) "SYS"."TSPITR_IMP_iEfs":
IMPDP> 處理對(duì)象類型 TRANSPORTABLE_EXPORT/PLUGTS_BLK
IMPDP> 處理對(duì)象類型 TRANSPORTABLE_EXPORT/TABLEIMPDP> 處理對(duì)象類型 TRANSPORTABLE_EXPORT/POST_INSTANCE/PLUGTS_BLK
IMPDP> 作業(yè) "SYS"."TSPITR_IMP_iEfs" 已于 21:00:49成功完成
導(dǎo)入完畢
View Code
內(nèi)存腳本的內(nèi)容:
{
# makeread write andoffline the imported tablespaces
sql'alter tablespace BL read write';
sql'alter tablespace BL offline';
# enable autobackups after TSPITRisfinished
sql'begin dbms_backup_restore.AutoBackupFlag(TRUE); end;';
}
正在執(zhí)行內(nèi)存腳本
sql 語句:alter tablespace BL readwrite
sql 語句:altertablespace BL offline
sql 語句:begin dbms_backup_restore.AutoBackupFlag(TRUE); end;
刪除自動(dòng)實(shí)例
自動(dòng)實(shí)例已刪除
已刪除輔助實(shí)例文件 F:/BL/BL/DATAFILE/O1_MF_TEMP_638YDTJF_.TMP
已刪除輔助實(shí)例文件 F:/BL/BL/ONLINELOG/O1_MF_3_638YDJ2V_.LOG已刪除輔助實(shí)例文件 F:/BL/BL/ONLINELOG/O1_MF_2_638YDDND_.LOG已刪除輔助實(shí)例文件 F:/BL/BL/ONLINELOG/O1_MF_1_638YD9K7_.LOG已刪除輔助實(shí)例文件 F:/BL/BL/DATAFILE/O1_MF_SYSAUX_638Y6B7Q_.DBF
已刪除輔助實(shí)例文件 F:/BL/BL/DATAFILE/O1_MF_UNDOTBS1_638Y6B8V_.DBF
已刪除輔助實(shí)例文件 F:/BL/BL/DATAFILE/O1_MF_SYSTEM_638Y6B6B_.DBF
已刪除輔助實(shí)例文件 F:/BL/BL/CONTROLFILE/O1_MF_638Y5Y3J_.CTL
完成 recover 于07-7月 -10
View Code
RMAN>
一旦完成了TSPITR,我們就應(yīng)該能夠查看到已經(jīng)恢復(fù)的表空間中的對(duì)象,并且發(fā)現(xiàn)他們已經(jīng)被恢復(fù)到請(qǐng)求的時(shí)間點(diǎn)。?我們需要將恢復(fù)的表空間改回到聯(lián)機(jī)狀態(tài)以使用它們。
SQL>?select?tablespace_name,online_status?from?dba_data_files;
TABLESPACE_NAME?????ONLINE_
------------------------------?-------
USERS?????????????????ONLINE
UNDOTBS1?????????????ONLINE
SYSAUX???????????????ONLINE
SYSTEM???????????????SYSTEM
BL?????????????????????OFFLINE
SQL>?Alter?tablespace?BL?online;
表空間已更改。
如果產(chǎn)生錯(cuò)誤,Oracle?就會(huì)保持輔助實(shí)例和相關(guān)數(shù)據(jù)文件的完整性。?我們可以嘗試修正問題并重新啟動(dòng)恢復(fù)操作。?在這種情況下,使用auxiliary參數(shù)重新啟動(dòng)RMAN,并且連接輔助實(shí)例。
如果輔助實(shí)例的創(chuàng)建工作沒有完全成功,可以很容易的刪除輔助實(shí)例和它的服務(wù),而不是使用手工的TSPITR過程重新啟動(dòng)恢復(fù)操作。首先,指出失敗的原因,然后刪除實(shí)例和服務(wù),并且重新啟動(dòng)自動(dòng)的TSPITR過程。
刪除輔助實(shí)例,用sysdba連接sqlplus,然后執(zhí)行一下命令即可:
SQL>?conn?/?as?sysdba
已連接。
SQL>??exec?dbms_backup_restore.manageauxinstance('sjus',1);
PL/SQL?過程已成功完成。
這里的sjus?是輔助實(shí)例名,在RMAN的輸出中有顯示。這使TSPITR恢復(fù)之前清除所有舊的輔助實(shí)例,可以在執(zhí)行該命令后進(jìn)入輔助目標(biāo)目錄,并刪除該目錄中的任何文件。
1.3.4.3?? 帶有自動(dòng)化實(shí)例的自定義自動(dòng)TSPITR
在執(zhí)行TSPITR時(shí)可以使用自定義自動(dòng)化實(shí)例創(chuàng)建,并且仍然允許Oracle?創(chuàng)建實(shí)例的其他的方法:
(1)?使用set?newname?命令指示恢復(fù)集的單個(gè)數(shù)據(jù)文件的位置
(2)?使用configure?auxname命令定義輔助實(shí)例名
(3)?為輔助實(shí)例創(chuàng)建自己的控制文件,并且在參數(shù)文件中提供參數(shù)(如:db_file_name_convert)。通過在$ORACLE_HOME/rdbms/admin?中創(chuàng)建名為parms_auxint.ora?文件來完成這項(xiàng)工作。?作為選擇,我們可以使用RMAN命令set?auxiliary?instance?parameter?file?來指定輔助實(shí)例參數(shù)文件駐留在客戶端上的路勁。
一旦已經(jīng)自定義了輔助實(shí)例,就可以通過執(zhí)行recover?tablespace?命令讓RMAN?創(chuàng)建輔助實(shí)例。
1.3.4.4?? 手工執(zhí)行TSPITR
Oracle?支持為TSPITR?創(chuàng)建自己的輔助實(shí)例。?也可以使用手工的TSPITR來完成失敗的自動(dòng)TSPITR操作。?首先,依然是應(yīng)用前面的準(zhǔn)備階段中列出的步驟,接著必須準(zhǔn)備輔助實(shí)例,然后執(zhí)行TSPITR過程。
準(zhǔn)備輔助實(shí)例
首先,需要啟動(dòng)和運(yùn)行輔助實(shí)例。輔助實(shí)例只是RMAN用于執(zhí)行TSPITR的臨時(shí)實(shí)例。?輔助實(shí)例必須駐留在與目標(biāo)數(shù)據(jù)庫相同的機(jī)器中,并且在輔助實(shí)例上不能執(zhí)行任何類型的DML。
在啟動(dòng)TSPITR前,需要準(zhǔn)備輔助實(shí)例。和普通的數(shù)據(jù)庫實(shí)例創(chuàng)建一樣。
Windows?Oracle?10G手工創(chuàng)建數(shù)據(jù)庫
http://blog.csdn.net/tianlesoftware/archive/2009/10/17/4680230.aspx
linux?下手工新建數(shù)據(jù)庫
http://blog.csdn.net/tianlesoftware/archive/2009/10/17/4680213.aspx
我們假設(shè)創(chuàng)建的輔助實(shí)例名是TEST.操作步驟如下:
(1)?創(chuàng)建口令文件
C:>orapwd?file=D:/app/Administrator/product/11.2.0/dbhome_1/database/PWDTEST.ora?password=admin
(2)?創(chuàng)建服務(wù)
C:/>oradim?-new?-sid?TEST
oradim是創(chuàng)建實(shí)例的工具程序名稱,-new表明執(zhí)行新建實(shí)例,-delete表明執(zhí)行刪掉實(shí)例,-sid指定害例的名稱。
(3)?創(chuàng)建參數(shù)文件
輔助數(shù)據(jù)庫的參數(shù)文件不同于目標(biāo)數(shù)據(jù)庫所使用的參數(shù)文件。輔助實(shí)例中應(yīng)該添加的一些參數(shù)如下表:
參數(shù)名
可選或必選
說明
Db_name
可選
與目標(biāo)數(shù)據(jù)庫相同的名稱
Lock_name_space
必選
不同于創(chuàng)建輔助實(shí)例所在系統(tǒng)上其他數(shù)據(jù)庫名的唯一名稱。
Db_file_name_convert
可選
用RMAN還原輔助數(shù)據(jù)庫中的數(shù)據(jù)文件時(shí),該參數(shù)用于為這些數(shù)據(jù)文件定義一組文件命名轉(zhuǎn)換模式。?它可以代替RMAN的configure?auxname命令。
Log_file_name_convert
可選
用RMAN還原輔助數(shù)據(jù)庫中的重做日志時(shí),該參數(shù)用于為這些重做日志定義一組命令轉(zhuǎn)換模式。?它可以代替RMAN的set?newnameml?.
Control_files
必要
這個(gè)參數(shù)定義了輔助實(shí)例控制文件的名稱和位置。?輔助實(shí)例控制文件的名稱應(yīng)當(dāng)不同于鎖一定位置中已有的其他控制文件名。
Remote_login_passwordfile
可選/必要
用于允許RMAN?通過Oracle?networking?服務(wù)連接輔助數(shù)據(jù)庫。?要求存在一個(gè)當(dāng)前的口令文件。?如果要本地連接輔助數(shù)據(jù)庫,就不需要設(shè)置該參數(shù)。
Compatible
必要
必須與目標(biāo)數(shù)據(jù)庫的設(shè)置相同
Db_block_size
可選/必要
如果在目標(biāo)數(shù)據(jù)庫上設(shè)置了該參數(shù),在輔助數(shù)據(jù)庫中也必須設(shè)置為同樣的參數(shù)值。
我們將所有輔助實(shí)例都放到F:/TEST目錄下,輔助實(shí)例的參數(shù)如下:
db_name=BL
db_unique_name=TEST
db_block_size=8192
db_cache_size=8388608
timed_statistics=TRUE
shared_pool_size=110M
large_pool_size=1M
compatible=11.2.0.0.0
Background_dump_dest=F:/TEST
Core_dump_dest=F:/TEST
User_dump_dest=F:/TEST
Control_files=F:/TEST/control01.ctl
db_create_file_dest=F:/TEST
log_file_name_convert=('D:/app/Administrator/oradata/bl','F:/TEST');
將該參數(shù)保存為initTEST.ora,?存放在F:/TEST/下。
(4)?啟動(dòng)輔助實(shí)例,并檢查網(wǎng)絡(luò)連通性
C:/Users/Administrator.DavidDai>set?ORACLE_SID=TEST
C:/Users/Administrator.DavidDai>sqlplus?/nolog
SQL*Plus:?Release?11.2.0.1.0?Production?on?星期四?7月?8?15:52:17?2010
Copyright?(c)?1982,?2010,?Oracle.??All?rights?reserved.
SQL>?conn?/?as?sysdba
已連接到空閑例程。
SQL>?startup?nomount?pfile='f:/test/inittest.ora';
ORA-32006:?BACKGROUND_DUMP_DEST?initialization?parameter?has?been?deprecated
ORA-32006:?USER_DUMP_DEST?initialization?parameter?has?been?deprecated
ORACLE?例程已經(jīng)啟動(dòng)。
Total?System?Global?Area??163221504?bytes
Fixed?Size??????????????????1373236?bytes
Variable?Size?????????????146803660?bytes
Database?Buffers????????????8388608?bytes
Redo?Buffers????????????????6656000?bytes
SQL>
(5)?執(zhí)行帶有手工輔助實(shí)例的TSPITR
用RMAN?連接目標(biāo)數(shù)據(jù)庫,輔助實(shí)例,和恢復(fù)目錄(如果有)。
還原控制文件,打開輔助實(shí)例。
C:/Users/Administrator.DavidDai>set?ORACLE_SID=TEST
C:/Users/Administrator.DavidDai>rman?target?sys/admin@bl?auxiliary=/
恢復(fù)管理器:?Release?11.2.0.1.0?-?Production?on?星期四?7月?8?16:05:56?2010
Copyright?(c)?1982,?2009,?Oracle?and/or?its?affiliates.??All?rights?reserved.
連接到目標(biāo)數(shù)據(jù)庫:?BL?(DBID=680066685)
已連接到輔助數(shù)據(jù)庫:?BL?(未裝載)
RMAN>????run
2>??????{
3>??????set?until??time?"to_date('2010-7-8?16:23:18','yyyy-mm-dd?hh24:mi:ss')";
4>??????restore?clone?controlfile?;
5>??????sql?clone?'alter?database?mount?clone?database';
6>??????sql?'alter?system?archive?log?current';
7>??????}
正在執(zhí)行命令: SETuntil clause
啟動(dòng)restore 于 08-7月 -10使用通道 ORA_AUX_DISK_1
通道 ORA_AUX_DISK_1: 正在開始還原數(shù)據(jù)文件備份集
通道 ORA_AUX_DISK_1: 正在還原控制文件
通道 ORA_AUX_DISK_1: 正在讀取備份片段 D:/APP/ADMINISTRATOR/FLASH_RECOVERY_AREA/B
L/AUTOBACKUP/2010_07_08/O1_MF_S_723831710_63C2O0HN_.BKP
通道 ORA_AUX_DISK_1: 段句柄= D:/APP/ADMINISTRATOR/FLASH_RECOVERY_AREA/BL/AUTOBA
CKUP/2010_07_08/O1_MF_S_723831710_63C2O0HN_.BKP 標(biāo)記 =TAG20100708T162150
通道 ORA_AUX_DISK_1: 已還原備份片段1通道 ORA_AUX_DISK_1: 還原完成, 用時(shí):00:00:02輸出文件名=F:/TEST/CONTROL01.CTL
完成restore 于 08-7月 -10
View Code
sql?語句:?alter?database?mount?clone?database
sql?語句:?alter?system?archive?log?current
RMAN>
說明:1.?alter?system?archive?log?current,它確保用于副本數(shù)據(jù)庫恢復(fù)的所有重做都可用。
2.?Sql?colne?命令是在副本數(shù)據(jù)庫上執(zhí)行sql命令
確定并還原數(shù)據(jù)文件
我們需要還原system,sysaux,?undo,?temp?表空間,和我們將要還原的表空間,這里是BL?表空間。要注意的是,在我們開始創(chuàng)建輔助實(shí)例之前,要將待恢復(fù)的表空間設(shè)置為offline.
SQL>?select?file_id,tablespace_name?from?dba_data_files;
FILE_ID?TABLESPACE_NAME
----------?------------------------------
4?USERS
3?UNDOTBS1
2?SYSAUX
1?SYSTEM
5?BL
SQL>?alter?tablespace?BL?offline?for?recover;
表空間已更改。
RMAN>?run
2>?{
3>?#?set?requested?point?in?time
4>?set?until??time?"to_date('2010-7-8?16:23:18','yyyy-mm-dd?hh24:mi:ss')";
5>?#?set?destinations?for?recovery?set?and?auxiliary?set?datafiles
6>?set?newname?for?clone?datafile??1?to?new;
7>?set?newname?for?clone?datafile??3?to?new;
8>?set?newname?for?clone?datafile??2?to?new;
9>?set?newname?for?clone?tempfile??1?to?new;
10>?set?newname?for?datafile??5?to??"D:/APP/ADMINISTRATOR/ORADATA/BL/BL01.DBF";
11>?#?switch?all?tempfiles
12>?switch?clone?tempfile?all;
13>?#?restore?the?tablespaces?in?the?recovery?set?and?the?auxiliary?set
14>?restore?clone?datafile??1,?3,?2,?5;
15>?switch?clone?datafile?all;
16>?}
說明:?set?newname?for?clone?命令確保還原期間正確的命令這些文件。?對(duì)數(shù)據(jù)文件5進(jìn)行set?newname是為還原該數(shù)據(jù)文件做準(zhǔn)備。
打開輔助實(shí)例,準(zhǔn)備執(zhí)行TSPITR:
run
{
#?set?requested?point?in?time
set?until??time?"to_date('2010-7-8?16:23:18','yyyy-mm-dd?hh24:mi:ss')";
#?online?the?datafiles?restored?or?switched
sql?clone?"alter?database?datafile??1?online";
sql?clone?"alter?database?datafile??3?online";
sql?clone?"alter?database?datafile??2?online";
sql?clone?"alter?database?datafile??5?online";
#?recover?and?open?resetlogs
recover?clone?database?tablespace??"BL",?"SYSTEM",?"UNDOTBS1",?"SYSAUX"?delete?archivelog;
alter?clone?database?open?resetlogs;
}
導(dǎo)出元數(shù)據(jù),在導(dǎo)入數(shù)據(jù)
Exp?user/pwd?point_in_time_recover=y?tablespaces=BL?file=tspitr.dmp
Imp?user/pwd?point_in_time_recover=y?file=tspitr.dmp
最后將BL表空間online
Alter?tablespace?BL?online.
操作完成后,別忘了重新備份數(shù)據(jù)庫,及刪除輔助實(shí)例。
從上面的步驟來看,手工操作和自動(dòng)步驟是一樣的,只不過手工將這些步驟分開了。
1.3.4.5?? TSPITR的限制
TSPITR?有許多的限制:
(1)不能還原包含SYS用戶特有對(duì)象的表空間
(2)不能用TSPITR恢復(fù)含有復(fù)制主表的表空間
(3)不支持使用快照日志的表空間
(4)不能還原含有回滾段的表空間
(5)如果要恢復(fù)的表空間中的對(duì)象包含如下對(duì)象,則不支持:
Varray
嵌套表
外部文件
此外,TSPITR?不能用于恢復(fù)刪除的表空間,我們也不能恢復(fù)舊的對(duì)象統(tǒng)計(jì)表。
如果使用不含恢復(fù)目錄的RMAN,還會(huì)存在下面與TSPITR的限制:
(1)在要恢復(fù)的點(diǎn)和當(dāng)前的點(diǎn)之間,目標(biāo)數(shù)據(jù)庫中撤銷和回滾段的當(dāng)前物理結(jié)構(gòu)必須沒有變化。?回滾段在恢復(fù)期間不能發(fā)生變化。
(2)完成指定表空間的TSPITR后,這個(gè)表空間以前的所有備份就不能在用于以后的TSPITR。?這就是TSPITR后的表空間備份操作非常重要的原因,只有再次備份表空間后才能執(zhí)行下一個(gè)TSPITR.
總結(jié)
以上是生活随笔為你收集整理的mysql中的rman备份与恢复_RMAN备份与恢复总汇的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python:查找天气预报json接口的
- 下一篇: Flask + PostgreSQL部署