rman恢復

一、恢復的相關(guān)概念

? ? 1.1)實例恢復


? ? ? ? ? ? 是指數(shù)據(jù)庫在遭遇突然情況下崩潰,在處理的事務中有提交的,有沒有提交的,


? ? ? ? ? ? 也就是說有臟數(shù)據(jù),數(shù)據(jù)庫系統(tǒng)本身有某種記錄狀態(tài)和數(shù)據(jù)的機制。在下次重啟之后,再次運行該實例時,


? ? ? ? ? ? 系統(tǒng)自動檢查相關(guān)狀態(tài)并有專有進程將該實例的狀態(tài)、數(shù)據(jù)恢復到崩潰的那個時候。? ?

? ? 1.2)介質(zhì)恢復

? ? ? ? 首先使用備份還原數(shù)據(jù),然后再應用歸檔日志、重做日志的恢復方式稱為介質(zhì)恢復。

? ? ? ? 介質(zhì)恢復能將一個經(jīng)過還原的數(shù)據(jù)更新到當前的時間點或之前的某個時間點。

? ? ? ? 通常介質(zhì)恢復這個術(shù)語專指對數(shù)據(jù)文件進行恢復的過程。

? ? ? ? 數(shù)據(jù)塊的介質(zhì)恢復指數(shù)據(jù)文件中的個別數(shù)據(jù)塊出現(xiàn)錯誤時進行的特殊恢復操作。

? ? ? ? 介質(zhì)恢復通常又可以分為完全恢復和不完全恢復


? ? ? ? 1.2.1)完全恢復

? ? ? ? 使用數(shù)據(jù)庫,表空間或數(shù)據(jù)文件的備份進行還原,再使用歸檔,重做日志或增量備份將數(shù)據(jù)更新到當前時間點

? ? ? ? 用戶可以實現(xiàn)基于對數(shù)據(jù)庫、表空間、數(shù)據(jù)文件執(zhí)行完全恢復


? ? 1.2.2)不完全恢復

? ? ? 是將數(shù)據(jù)恢復到某一個特定的時間點或特定的SCN。


? ? ? ? 不完全介質(zhì)恢復的幾種類型:

? ? ? ? ? ? 基于時間的恢復(Time-based recovery) 將數(shù)據(jù)恢復到指定的時間點

 ? ? ? ? 用戶控制的恢復(Cancel-based recovery) 當用戶提交CANCEL后停止恢復

? ? ? ? ? ? ? ? ? (此選項在使用RMAN時無效)

 ? ? ? ? 基于SCN 的恢復(Change-based recovery) 將數(shù)據(jù)恢復到指定的SCN

? ? ? ? ? ? 按重做日志序號恢復(Log sequence recovery)將數(shù)據(jù)恢復到指定的重做日志序號

? ? ? ? ? ? (僅使用RMAN時有效)

二、基于用戶管理恢復的方法

? ? 數(shù)據(jù)恢復時的常用視圖

? ? ? ? v$reover_file? ? --查詢需要恢復的文件,該視圖信息來自控制文件,

? ? ? ? ? ? ? ? ? ? ? ? ? ? 如控制文件來自備份或重建過則信息會不準

? ? ? ? v$archived_log? ? --查詢所有歸檔日志列表

? ? ? ? v$recovery_log? ? --查詢所有需要用于恢復的日志


? ? 常用的recover命令

? ? ? ? --mount狀態(tài)下執(zhí)行恢復

? ? ? ? ? ? SQL> recover database;

? ? ? ? --open狀態(tài)下執(zhí)行恢復

? ? ? ? ? ? SQL> recover tablespace users;

? ? 配置恢復自動使用歸檔日志

? ? ? ? 在介質(zhì)恢復前通過設(shè)置set autorecovery on來自動應用歸檔日志實現(xiàn)恢復

? ? ? ? 也可以在輸入歸檔日志路徑、文件名時輸入auto


? ? 恢復文件到新路徑

? ? ? alter database rename file '<dir>' to '<dir>'

三、完全恢復?

? ? ? 3.1) 恢復數(shù)據(jù)庫

? ? ? ? ? ? 3.1.1)備份數(shù)據(jù)庫


? ? ? ? ? ? ? ? ? RMAN> backup database;


? ? ? ? ? ? 3.1.2) 刪除所有數(shù)據(jù)文件


SQL> SELECT 'rm -f? '||file_name? FROM DBA_DATA_FILES;

tail -f /opt/oracle/diag/rdbms/orcl/ORCL/trace/alert_ORCL.log

3.1.3)恢復數(shù)據(jù)庫

? ? ? SQL> startup;

? ? ? SQL> select OPEN_MODE from v$database;

? ? ? SQL> set linesize 200

? ? ? ? ? ? col ERROR format a20

? ? ? ? ? ? select * from v$recover_file;


? ? ? rman target /

? ? ? RMAN> restore database ;


? ? ? SQL>? set linesize 200

? ? ? ? ? ? col ERROR format a20

? ? ? ? ? ? select * from v$recover_file;

? ? ? ? ? ? recover database ;?

? ? ? ? ? ? alter database open;



3.2) 恢復表空間:恢復表空間時候,記得OFFLINE表空間,恢復完成ONLINE;

? ? 3.2.1)創(chuàng)建表空間并插入數(shù)據(jù)

? ? ? ? ? create tablespace rman_tablespace_test datafile '/opt/oracle/oradata/WEISIDB/dbfile_01.dbf' size 100M;

? ? ? ? ? alter user weisi default tablespace rman_tablespace_test;

? ? ? ? ? backup databae;

? ? sqlplus weisi/weisi@weisi

? ? create table big_rman_t tablespace rman_tablespace_test as select * from sys.dba_objects ;? ? ? ?

? ? select count(1) from big_rman_t;

? ? select file_name from dba_data_files where tablespace_name='RMAN_TABLESPACE_TEST' ;

? ? /opt/soft/rman/ORCL/datafile/o1_mf_rman_tab_ckrv2vky_.dbf

? ? rm -f? /opt/oracle/oradata/WEISIDB/dbfile_01.dbf


? ? ? ? ? ? /opt/soft/rman/ORCL/datafile/o1_mf_rman_tab_ckrv2vky_.dbf


? ? select count(1) from big_rman_t;

? ? select file_name,online_status from dba_Data_files;



? ? alter database datafile '/opt/oracle/oradata/WEISIDB/dbfile_01.dbf' offline;

? ? col TABLESPACE_NAME format a30

? ? col file_name format a50

? ? select file_name,online_status from dba_Data_files;

? ? select tablespace_name , status from dba_tablespaces;

? ? alter tablespace rman_tablespace_test offline;

? ? alter tablespace rman_tablespace_test offline immediate;


? ? RMAN> restore tablespace rman_tablespace_test;

? ? ? ? ? recover tablespace rman_tablespace_test;



? ? alter tablespace rman_tablespace_test online;

? ? select count(1) from big_rman_t;

3.3)? 恢復數(shù)據(jù)文件

? ? ? select file_name,online_status from dba_Data_files;

? ? ? ? rm -f /opt/soft/rman/ORCL/datafile/o1_mf_rman_tab_ckh42899_.dbf

? ? ? ? select count(1) from big_rman_t;

? ? ? ? alter system flush buffer_cache;


? ? ? ? alter database datafile 8 offline;


? ? ? ? RMAN> restore? datafile 8;

? ? ? ? ? ? ? ? ? ? ? ? ? recover datafile 8;


? ? ? ? ? ? ? ? ? alter database datafile 8 online; ?




? ? ? ? ? 總結(jié):

? ? ? ? ? ? ? 數(shù)據(jù)庫處于關(guān)閉狀態(tài)下的恢復:包括系統(tǒng)表空間(系統(tǒng)數(shù)據(jù)文件)、Undo 表空間、整個數(shù)據(jù)庫

? ? ? ? ? ? ? 1.關(guān)閉實例

? ? ? ? ? ? ? 2.startup mount;

? ? ? ? ? ? ? 3.還原數(shù)據(jù)文件

? ? ? ? ? ? ? 4.使用歸檔日志更新到最新

? ? ? ? ? ? ? 5.打開數(shù)據(jù)庫


? ? ? ? ? 數(shù)據(jù)庫處于打開狀態(tài)下,非系統(tǒng)數(shù)據(jù)文件丟失的恢復

? ? ? ? ? 1.將數(shù)據(jù)文件offline(alter database datafile n offline)

? ? ? ? ? 2.還原數(shù)據(jù)文件(restore)

? ? ? ? ? 3.恢復數(shù)據(jù)文件(recover datafile n)

? ? ? ? ? ? 4.使數(shù)據(jù)文件online (alter database datafile n online)




四:控制文件恢復

Oracle 控制文件為二進制文件,記錄了當前數(shù)據(jù)庫的物理結(jié)構(gòu)信息,多路復用的原則。

在mount階段被讀取,open階段一直被使用


? ? ? ? 控制文件中包含的內(nèi)容:

? ? ? ? ? ? 數(shù)據(jù)庫的名字、ID、創(chuàng)建的時間戳

? ? ? ? ? ? 表空間的名字

? ? ? ? ? ? 聯(lián)機日志文件、數(shù)據(jù)文件的位置、個數(shù)、名字

? ? ? ? ? ? 聯(lián)機日志的Sequence號碼

? ? ? ? ? ? 檢查點的信息

? ? ? ? ? ? 歸檔信息

? ? ? ? ? ? 備份信息

? ? ? ? alter database backup controlfile to trace as '/opt/soft/control.sql';


? ? ? ? SHOW PARAMETER CONTROL_FILES? ? --列出控制文件的名字、狀態(tài)、位置等


? ? ? ? 備份控制文件

? ? ? ? 1.alter database backup controlfile to '/opt/soft/control.ctl';

? ? ? ? 2.alter database backup controlfile to trace as '/opt/soft/control.sql' ;

? ? ? ? 3.RMAN>? backup current controlfile;


? ? ? ? 備份:SPFILE

? ? ? ? backup spfile;


? ? ? ? 恢復SPFILE


? ? ? ? /opt/oracle/product/11.2.0/dbhome/dbs/spfileORCL.ora

? ? ? ? 實驗:

? ? ? ? 1.完全備份數(shù)據(jù)庫

? ? ? ? 2.關(guān)閉數(shù)據(jù)庫

? ? ? ? 3.刪除SPFILE

? ? ? ? ? cd /opt/oracle/product/11.2.0/dbhome/dbs/

? ? ? ? 4.恢復SPFILE

? ? ? ? ? RMAN> startup force nomount;

? ? ? ? ? RMAN> restore spfile;

? ? ? ? ? RMAN> restore spfile from autobackup;

? ? ? ? ? RMAN> restore spfile from '/opt/oracle/flash_recovery_area/WEISIDB/backupset/2016_12_11/o1_mf_ncsnf_TAG20161211T113526_d4slkyt2_.bkp';

? ? ? ? ? RMAN> restore spfile to '/opt/soft/spfile' from '/opt/soft/recover/ORCL/backupset/2016_04_23/o1_mf_nnsnf_TAG20160423T072145_ckodj973_.bkp';

? ? ? ? ? RMAN> shutdown immediate;

? ? ? ? ? RMAN> start;


? ? ? ? 恢復控制文件:

? ? ? ? /opt/oracle/oradata/ORCL/control01.ctl, /opt/oracle/oradata/ORCL/control02.ctl

? ? ? ? ? RMAN>? backup current controlfile;

? ? ? ? ? SQL> shutdown immediate;

? ? ? ? ? mv? /opt/oracle/oradata/ORCL/control01.ctl? /opt/oracle/oradata/ORCL/control01.ctl_20160424

? ? ? ? ? mv? /opt/oracle/oradata/ORCL/control02.ctl? /opt/oracle/oradata/ORCL/control02.ctl_20160424


? ? ? ? ? cd opt/soft/recover/ORCL/backupset/


? ? ? ? ? ll -th


? ? ? ? ? SQL>? startup


? ? ? ? ? RMAN> restore controlfile from? '/opt/oracle/flash_recovery_area/WEISIDB/backupset/2016_12_11/o1_mf_ncnnf_TAG20161211T142803_d4swhn8w_.bkp';

? ? ? ? ? RMAN> alter database mount;

? ? ? ? ? RMAN> recover database;

? ? ? ? ? RMAN> alter database open resetlogs;




手動創(chuàng)建控制文件


? ? ? ? ? SQL> alter database backup controlfile to trace as '/opt/soft/control.sql' ;

? ? ? ? ? ? ? shutdown immediate;

? ? ? ? ? ? ? mv? /opt/oracle/oradata/ORCL/control01.ctl? /opt/oracle/oradata/ORCL/control01.ctl_20160424_4

? ? ? ? ? ? ? mv? /opt/oracle/oradata/ORCL/control02.ctl? /opt/oracle/oradata/ORCL/control02.ctl_20160424_4


? ? ? ? ? ? ? sqlplus / as sysdba

? ? ? ? ? ? ? SQL> startup nomount;


? ? ? ? ? ? ? CREATE CONTROLFILE REUSE DATABASE "ORCL" RESETLOGS? ARCHIVELOG

? MAXLOGFILES 40

? MAXLOGMEMBERS 3

? ? MAXDATAFILES 100

? ? MAXINSTANCES 8

? ? MAXLOGHISTORY 292

LOGFILE GROUP 2 '/opt/oracle/oradata/ORCL/redo02.log'? SIZE 50M BLOCKSIZE 512, GROUP 3 '/opt/oracle/oradata/ORCL/redo03.log'? SIZE 50M BLOCKSIZE 512

DATAFILE? '/opt/oracle/oradata/ORCL/system01.dbf','/opt/oracle/oradata/ORCL/sysaux01.dbf', '/opt/oracle/oradata/ORCL/undotbs01.dbf', '/opt/oracle/product/11.2.0/dbhome/dbs/data_D-ORCL_I-1434170406_TS-USERS_FNO-4_0vr1prk2', '/opt/oracle/oradata/ORCL/weisi_catalog_01.dbf','/opt/oracle/oradata/ORCL/undo02.dbf','/opt/soft/oracle/rman_tbs_01.dbf'? CHARACTER SET AL32UTF8;

RECOVER DATABASE using backup controlfile;

alter database open resetlogs;


? ? ? ? 數(shù)據(jù)文件無備份情況下的恢復

? ? ? ? 前提是非系統(tǒng)表空間

? ? ? ? 控制文件未被重新創(chuàng)建或恢復到以前的版本(丟失數(shù)據(jù)文件的描述信息應在數(shù)據(jù)字典和控制文件中)

? ? ? ? 該數(shù)據(jù)文件從文件開始到丟失期間的所有日志必須存在

? ? ? ? 使用下面的命令重建數(shù)據(jù)文件

? ? ? ? ? ? alter database create datafile 'filename';

? ? ? ? ? ? alter database create datafile 'filename' as 'new file name'; --可以放置到不同目錄

? ? ? ? 步驟:-->先將丟失數(shù)據(jù)文件脫機-->重建數(shù)據(jù)文件-->應用歸檔日志-->聯(lián)機恢復的數(shù)據(jù)文件

? ? ? ? SQL> create tablespace rman_datafile_nobackup datafile '/opt/oracle/oradata/ORCL/no_back.dbf' size 100M


? ? ? ? ? ? ? create user wuzhenxing identified by wuzhenxing default tablespace rman_datafile_nobackup;

grant select on DBA_OBJECTS to wuzhenxing;

grant connect to wuzhenxing;

grant resource to wuzhenxing;

wuzhenxing

? ? ? ? ? ? ? create table t as select * from sys.dba_objects;

? ? ? ? ? ? ? insert into t select * from t;

? ? ? ? ? ? ? select count(1) from t;


? ? ? ? ? ? ? SYS

? ? ? ? ? ? ? alter system switch logfile;

? ? ? ? ? ? ? alter system checkpoint;


? ? ? ? ? ? ? os

? ? ? ? ? ? ? rm -f /opt/oracle/oradata/ORCL/no_back.dbf


? ? ? ? ? ? ? SYS

? ? ? ? ? ? ? alter system flush buffer_cache;


? ? ? ? ? ? ? wuzhenxing

? ? ? ? ? ? ? select count(1) from t;


? ? ? ? ? ? ? SYS

? ? ? ? ? ? ? select * from dba_data_files;

? ? ? ? ? ? ? 5?

? ? ? ? ? ? ? alter database datafile 5 offline;

? ? ? ? ? ? ? select * from v$recover_file;

? ? ? ? ? ? ? alter database create datafile 5;

? ? ? ? ? ? ? select * from v$recovery_log;

? ? ? ? ? ? ? select name,checkpoint_change# from v$datafile_header;

? ? ? ? ? ? ? recover datafile 5;

? ? ? ? ? ? ? alter database datafile 5 online;

? ? ? wuzhenxing

? ? ? select count(1) from t;


? ? ? rm -f /opt/oracle/oradata/ORCL/no_back.dbf


? ? ? ps -ef |grep dbw


? ? ? cd /proc/11573/fd


? ? ? ll | grep no


? ? ? cp 31 /opt/oracle/oradata/ORCL/no_back.dbf


? ? ? alter database datafile 9 offline;

? ? ? recover datafile 9;

? ? ? alter database datafile 4 online;







? resetlogs


? 數(shù)據(jù)在啟動時候是要做一致性檢查的,oracle在open階段要做兩次檢查


1. 檢查數(shù)據(jù)文件頭的檢查點計數(shù)(checkpoint cnt)是否和控制文件的檢查點計數(shù)(checkpoint cnt)一致。目的是確認數(shù)據(jù)文件

? ? 是否來自同一版本,而不是從備份中恢復的。如果這一步檢查通過,就進行第二步檢查


2. 檢查數(shù)據(jù)文件頭的開始scn和控制文件中記錄該文件的結(jié)束scn是否一致。如果數(shù)據(jù)文件頭的開始scn和控制文件中該文件的結(jié)束scn

? ? 相等,那說明這個數(shù)據(jù)文件就不需要恢復,否則就要恢復文件


? 如果以上兩步檢查都通過,那就可以正常打開數(shù)據(jù)庫,鎖定數(shù)據(jù)文件,同時將控制文件中每個數(shù)據(jù)文件的結(jié)束scn設(shè)置無窮大。

? 我們在某些條件下打開數(shù)據(jù),會提示讓用resetlogs選項open數(shù)據(jù)庫,為什么要用resetlogs呢?它是干嘛用的呢?問號一大堆了吧,

下面來具體分析下。



? resetlogs的作用


? 防止陳舊的數(shù)據(jù)進入數(shù)據(jù)庫(保證數(shù)據(jù)庫的一致性),用resetlogs打開數(shù)據(jù)庫,一定要立即對數(shù)據(jù)庫做個全備。

? 在控制文件,data file header,redo log header里存儲”resetlogs data“,當open resetlogs被執(zhí)行時,可以通過這些內(nèi)容檢查一致性。



什么時候用resetlogs


1. 不完全恢復

2. 用備份的控制文件恢復

3. 新創(chuàng)建的控制文件來恢復

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容