注:
①恢復(fù)的前提是已經(jīng)做好備份
②完全恢復(fù)數(shù)據(jù)庫(kù)是數(shù)據(jù)庫(kù)遇到故障,在恢復(fù)時(shí)候沒(méi)有丟失任何已經(jīng)提交事物數(shù)據(jù)的恢復(fù)
不完全恢復(fù)數(shù)據(jù)庫(kù)是數(shù)據(jù)庫(kù)遇到故障,在恢復(fù)時(shí)候丟失部分?jǐn)?shù)據(jù)的恢復(fù)
③在linux下需要設(shè)置環(huán)境變量,即需要恢復(fù)的oracle數(shù)據(jù)庫(kù)的實(shí)例名:export ORACLE_SID=orcl
④當(dāng)用resetlogs啟動(dòng)數(shù)據(jù)庫(kù)時(shí),應(yīng)該要對(duì)數(shù)據(jù)庫(kù)進(jìn)行一次全備份
一、恢復(fù)方案
1、丟失數(shù)據(jù)文件,進(jìn)行完全恢復(fù)
復(fù)制代碼 代碼如下:
RMAN>startup mount;
RMAN>restore database;
RMAN>recover database;
RMAn>sql 'alter database open';
2、丟失重做日志文件,進(jìn)行不完全恢復(fù)
復(fù)制代碼 代碼如下:
SQL>startup mount;
SQL>recover database until cancel;
SQL>alter database open resetlogs;
3、丟失數(shù)據(jù)文件、控制文件和重做日志文件,進(jìn)行不完全恢復(fù)
復(fù)制代碼 代碼如下:
RMAN>startup nomount;
RMAN>restore controfile from autobackup;
RMAN>alter database mount;
RMAN>restore database;
SQL>recover database using backup controlfile until cancel;
SQL>alter database open resetlogs;
4、丟失初始化文件、控制文件數(shù)據(jù)文件和重做日志文件,進(jìn)行不完全恢復(fù)
復(fù)制代碼 代碼如下:
SQL>startup nomount pfile='D:\oracle\product\10.2.0\db_1\admin\orcl\pfile\init.ora.27201414210'; #pfile的路徑
RMAN>restore spfile from autobackup;
SQL>shutdown immediate;
SQL>startup nomount;
RMAN>restore controlfile from autobackup;
RMAN>alter database mount;
RMAN>restore database;
SQL>recover database using backup controlfile until cancel;
SQL>alter database open resetlogs;
5、基于時(shí)間點(diǎn)的恢復(fù)(常用)
復(fù)制代碼 代碼如下:
RMAN>startup mount;
RMAN>restore database;
RMAN>sql 'alter session set nls_date_format="yyyymmdd hh24:mi:ss"'; #設(shè)置顯示時(shí)間格式
RMAN>recover database until time '20140312 17:07:00'; #把數(shù)據(jù)庫(kù)恢復(fù)到2014-03-12 17:07:00這一時(shí)間點(diǎn)上
RMAN>sql 'alter database open resetlogs';
6、基于SCN的恢復(fù)
復(fù)制代碼 代碼如下:
RMAN>startup mount;
RMAN>restore database;
RMAN>recover database until scn 963915;
RMAN>sql 'alter database open resetlogs';
①查詢當(dāng)前SCN號(hào):
復(fù)制代碼 代碼如下:
SQL>select dbms_flashback.get_system_change_number from dual;
②根據(jù)SCN號(hào)查詢時(shí)間:
復(fù)制代碼 代碼如下:
SQL>select to_char(scn_to_timestamp(963959),'yyyymmdd hh24:mi:si') from dual;
③根據(jù)時(shí)間查詢SCN號(hào):
復(fù)制代碼 代碼如下:
SQL>select timestamp_to_scn(to_date('20140309 17:55:10','yyyymmdd hh24:mi:ss')) from dual;
④查詢一段時(shí)間內(nèi)的SCN號(hào):
復(fù)制代碼 代碼如下:
SQL>select * from (select time_dp,scn from smon_scn_time order by time_dp desc) where rownum20;
7、深入理解incarnation:就是可以跨越resetlogs進(jìn)行數(shù)據(jù)恢復(fù)
①每一次resetlogs就會(huì)使incarnation + 1;如果想要恢復(fù)到之前incarnation的scn,就需要先恢復(fù)到之前的incarnation;
②Incarnation 11 and 12都包括scn 900000 的spot,所以當(dāng)incarnation 12 做 until scn的時(shí)候,是恢復(fù)到當(dāng)前incarcation 的 scn;但是根據(jù)我們的需要,我們需要的是incarnation 11的scn 900000;所以就需要切換incarnation到incarnation 11,才能找回我們需要的數(shù)據(jù)。
RMAN>reset database to incarnation 11;
8、recover database的四條語(yǔ)句區(qū)別
① SQL>recover database using backup controlfile
如果丟失當(dāng)前控制文件,用冷備份的控制文件恢復(fù)的時(shí)候,用來(lái)告訴oracle,不要以controlfile中的scn作為恢復(fù)的終點(diǎn)。
②SQL>recover database until cancel
如果丟失current/active redo的時(shí)候,手動(dòng)指定終點(diǎn)。
③SQL>recover database using backup controlfile until cancel;
如果丟失當(dāng)前controlfile并且current/active redo都丟失,會(huì)先去自動(dòng)應(yīng)用歸檔日志,可以實(shí)現(xiàn)最大的恢復(fù);
④SQL>recover database until cancel using backup controlfile;
如果丟失當(dāng)前controlfile并且current/active redo都丟失,以舊的redo中的scn為恢復(fù)終點(diǎn),因?yàn)闆](méi)有應(yīng)用歸檔日志,所有會(huì)丟失數(shù)據(jù)。
要理解recover database using backup controlfile,先理解 recover database;在普通的recover database 或者 recover tablespace, recover datafile時(shí), Oracle會(huì)以當(dāng)前controlfile所紀(jì)錄的SCN為準(zhǔn),利用archive log和 redo log的redo entry, 把相關(guān)的datafile 的 block恢復(fù)到“當(dāng)前controlfile所紀(jì)錄的SCN”;而某些情況下,Oracle需要把數(shù)據(jù)恢復(fù)到比當(dāng)前controlfile所紀(jì)錄的SCN還要靠后的位置(比如說(shuō),control file是backup controlfile , 或者 controlfile是根據(jù)trace create的。),這時(shí)候,就需要用using backup controlfile. 恢復(fù)就不會(huì)受“當(dāng)前controlfile所記錄的SCN”的限制。這時(shí)候的限制就來(lái)自于你的語(yǔ)句(until time , until scn),或者可用的archive log(until cancel) 。如果控制文件丟失,restore備份的控制文件后,則必須使用using backup controlfile選項(xiàng)。而until cancel則是不完全恢復(fù),即current/active redo丟失,或者從restore數(shù)據(jù)庫(kù)后某個(gè)歸檔文件缺失,則終止。
結(jié)論:
如果有舊的數(shù)據(jù)庫(kù)備份,在歸檔日志和在線日志全部保存完好的情況下,使用recover database或recover database using backup controlfile,則不丟失數(shù)據(jù)
如果存在備份數(shù)據(jù)文件restore后,歸檔日志或者在線日志(active、current)丟失情況下,使用recover database using backup controlfile until cancel,則可以實(shí)現(xiàn)最大恢復(fù)。
二、RMAN異機(jī)恢復(fù)(源數(shù)據(jù)庫(kù)和目標(biāo)數(shù)據(jù)庫(kù)的實(shí)例名要一致)
1、對(duì)源數(shù)據(jù)庫(kù)進(jìn)行備份
復(fù)制代碼 代碼如下:
RMAN>backup database plus archivelog;
RMAN>backup current controlfile;
2、生成源數(shù)據(jù)庫(kù)的參數(shù)文件,修改后傳至目標(biāo)數(shù)據(jù)庫(kù)
3、在windows平臺(tái)下進(jìn)行恢復(fù)
復(fù)制代碼 代碼如下:
C:\&;oradim -new -sid orcl #創(chuàng)建一個(gè)orcl服務(wù)
C:\&;set ORACLE_SID=orcl
C:\&;sqlplus "/as sysdba";
SQL>startup nomount pfile='C:\INITorcl.ORA';
SQL> create spfile from pfile='C:\INITorcl.ORA';
SQL> shutdown immediate;
SQL>exit;
C:\&;set ORACLE_SID=orcl
C:\&;rman target/
RMAN>startup nomount;
RMAN>restore controlfile to '目標(biāo)數(shù)據(jù)庫(kù)控制文件放置的位置及名稱' from '備份控制文件放置的位置';
RMAN>alter database mount;
RMAN>catalog start with '備份集放置的位置'; #向控制文件中添加備份集
RMAN>crosscheck backup;
RMAN>report schema;
編寫下邊腳本并運(yùn)行
復(fù)制代碼 代碼如下:
run
{
set newname for datafile 1
to 'C:\oracle\product\10.2.0\oradata\orcl\SYSTEM.DBF'; #實(shí)例中SYSTEM.DBF放置的位置
set newname for datafile 2
to 'C:\oracle\product\10.2.0\oradata\orcl\UNDOTBS1.DBF';
set newname for datafile 3
to 'C:\oracle\product\10.2.0\oradata\orcl\SYSAUX.DBF';
set newname for datafile 4
to 'C:\oracle\product\10.2.0\oradata\orcl\USERS.DBF';
set newname for datafile 5
to 'C:\oracle\product\10.2.0\oradata\orcl\BANK_DATA02.DBF';
restore database;
switch datafile all;
}
RMAN>recover database;
RMAN>sql 'alter database open resetlogs';
恢復(fù)成功
您可能感興趣的文章:- Oracle數(shù)據(jù)庫(kù)的備份與恢復(fù)
- Oracle誤刪除表數(shù)據(jù)后的數(shù)據(jù)恢復(fù)詳解
- oracle冷備份恢復(fù)和oracle異機(jī)恢復(fù)使用方法
- oracle如何恢復(fù)被覆蓋的存儲(chǔ)過(guò)程
- Oracle數(shù)據(jù)庫(kù)數(shù)據(jù)丟失恢復(fù)的幾種方法總結(jié)
- oracle drop table(表)數(shù)據(jù)恢復(fù)方法
- oracle數(shù)據(jù)庫(kù)創(chuàng)建備份與恢復(fù)腳本整理
- ORACLE 數(shù)據(jù)庫(kù)RMAN備份恢復(fù)
- 關(guān)于系統(tǒng)重裝后Oracle數(shù)據(jù)庫(kù)完全恢復(fù)的解決辦法
- Oracle數(shù)據(jù)庫(kù)恢復(fù)教程之resetlogs操作